2005-05-10 08:41:03

by Simon Horman [Horms]

[permalink] [raw]
Subject: statfs returns wrong values for 250Gb FAT fs

On Sat, May 07, 2005 at 06:24:29PM +0100, Carlos Rodrigues wrote:
> Package: kernel-image-2.6.8-2-386
> Version: 2.6.8-13
> Severity: important
>
>
> I have a 250Gb external USB 2.0 hard-drive formatted with FAT32 and "df"
> always reports 64Kb of used space on it, although it contains a couple of
> gigabytes.
>
> At first I thought the problem might be in "df" itself, but the following
> test code proves the statfs function is to blame. The values returned are
> incorrect.
>
> However, it does report correct values for another FAT32 partition I have
> (70Gb).
>
>
> ----------- statfs.c -----------
>
> #include <sys/vfs.h>
>
>
> int main(int argc, char *argv[])
> {
> struct statfs stats;
> long used;
> int kib;
>
> if (argc < 2) {
> printf("USAGE: %s <mountpoint>\n", argv[0]);
>
> return 1;
> }
>
> statfs(argv[1], &stats);
> used = stats.f_blocks - stats.f_bfree;
>
> printf("f_bsize = %ld blocks\nf_blocks = %ld blocks\nf_bfree = %ld blocks\nused = %ld blocks\n",
> stats.f_bsize, stats.f_blocks, stats.f_bfree, used);
>
> kib = stats.f_bsize / 1024;
> printf("total = %ld KiB\nfree = %ld KiB\nused = %ld KiB\n",
> kib * stats.f_blocks,
> kib * stats.f_bfree,
> kib * used);
>
> return 0;
> }
>
> ----------- eof - statfs.c -----------

Carlos,

this looks like it could be an issue with the fat file system
handling a somewhat large filesystem. I have CCed the maintainer
for comment. I have looked through most of the changes made
to fat and vfat since 2.6.8.1 and I wasn't able to see anything
there that looked like it would help your cause.

--
Horms


2005-05-10 12:01:20

by OGAWA Hirofumi

[permalink] [raw]
Subject: Re: statfs returns wrong values for 250Gb FAT fs

Hi,

Horms <[email protected]> writes:

>> printf("f_bsize = %ld blocks\nf_blocks = %ld blocks\nf_bfree = %ld blocks\nused = %ld blocks\n",
>> stats.f_bsize, stats.f_blocks, stats.f_bfree, used);
>>
>> kib = stats.f_bsize / 1024;
>> printf("total = %ld KiB\nfree = %ld KiB\nused = %ld KiB\n",
>> kib * stats.f_blocks,
>> kib * stats.f_bfree,
>> kib * used);

Filesystem may have the corrupted free-cluster value.

I couldn't reproduce the problem on 2.6.12-rc4.

Could you try a recently dosfsck (dosfstools-2.11 or later)?
Also could you send the output of above program?

Thanks.
--
OGAWA Hirofumi <[email protected]>

2005-05-10 20:42:44

by Carlos Rodrigues

[permalink] [raw]
Subject: Re: statfs returns wrong values for 250Gb FAT fs

OGAWA Hirofumi wrote:

>Filesystem may have the corrupted free-cluster value.
>
>I couldn't reproduce the problem on 2.6.12-rc4.
>
>Could you try a recently dosfsck (dosfstools-2.11 or later)?
>Also could you send the output of above program?
>
>

"dosfsck" did find a problem in the free-cluster value. And also said
the backups FAT was different than the original FAT.

I didn't use "dosfsck" to fix the problems though (not that it couldn't,
I just didn't try). As I had already copied everything to another disk,
I just used "mkdosfs" to reformat the drive, and it works just fine now.

I still don't know what caused this, probably something related to some
"kernel panics" I was seeing on shutdown (in a Fedora 3 installation,
not Debian), after doing an umount+unplug.

I didn't though of using "dosfsck" because Windows' checkdisk was saying
the filesystem was perfectly fine... It makes me feel really safe
trusting MS tools... not.

Carlos Rodrigues

2005-05-11 14:26:35

by Paul Ionescu

[permalink] [raw]
Subject: Re: statfs returns wrong values for 250Gb FAT fs

Hi,

On Tue, 10 May 2005 21:34:46 +0100, Carlos Rodrigues wrote:

> OGAWA Hirofumi wrote:
>
>>Filesystem may have the corrupted free-cluster value.
>>
>>I couldn't reproduce the problem on 2.6.12-rc4.
>>
>>Could you try a recently dosfsck (dosfstools-2.11 or later)? Also could
>>you send the output of above program?
>>
>>
>>
> "dosfsck" did find a problem in the free-cluster value. And also said the
> backups FAT was different than the original FAT.
>
> I didn't use "dosfsck" to fix the problems though (not that it couldn't, I
> just didn't try). As I had already copied everything to another disk, I
> just used "mkdosfs" to reformat the drive, and it works just fine now.
>
> I still don't know what caused this, probably something related to some
> "kernel panics" I was seeing on shutdown (in a Fedora 3 installation, not
> Debian), after doing an umount+unplug.
>
> I didn't though of using "dosfsck" because Windows' checkdisk was saying
> the filesystem was perfectly fine... It makes me feel really safe trusting
> MS tools... not.
>
> Carlos Rodrigues

I had the same problem with an external 250 GB vfat USB 2.0 disk.
The disk was formatted/used previously in windows, checkdisk said is OK,
but mounted in linux readonly, game the same error (said only some little
space was free, when in fact it was almost full).
However, I was able to see and copy all files from it.
As it was not my hard disk, I did not reformatted it, nor dosfsck-ed it.
DOSFSCK reported errors with the FAT copy, and other errors, but as I
said, I could access all data on it.

Best regards,
Paul


2005-05-12 20:32:14

by OGAWA Hirofumi

[permalink] [raw]
Subject: Re: statfs returns wrong values for 250Gb FAT fs

Paul Ionescu <[email protected]> writes:

> I had the same problem with an external 250 GB vfat USB 2.0 disk.
> The disk was formatted/used previously in windows, checkdisk said is OK,
> but mounted in linux readonly, game the same error (said only some little
> space was free, when in fact it was almost full).
> However, I was able to see and copy all files from it.
> As it was not my hard disk, I did not reformatted it, nor dosfsck-ed it.
> DOSFSCK reported errors with the FAT copy, and other errors, but as I
> said, I could access all data on it.

If same problem happen, please report. And please let me investigate
the details of the filesystem of this state.

Thanks.
--
OGAWA Hirofumi <[email protected]>