首先推荐两个网页:
我们的相同之处就是用的fat文件系统,我的应用和第二个同志的一样,解决办法:移植一个修复工具dosfsck,其详细用法请参看:http://linux.about.com/library/cmd/blcmdl8_dosfsck.htm
FAT (dosfsck)
依次序检查以下:
FAT 中有无效的 cluster 编号,发现则改成 EOF。
档案 cluster 链有循环
有坏 cluster (读取时有错误),发现则把该 cluster 标记为坏 cluster,并由使用它的档案中移除。
有大量坏项目的目录,发现则可能要遗弃整个目录。
档案 . 和 .. 不是目录,发现则需要改名。
在根目录发现目录 . 和 ..,发现则需要遗弃。
有坏档案名称,发现则需要改名。
有重复目录项目,发现则需要改名或遗弃。
有目录的档案大小为非零,发现则需要设定为 0。
有目录 . 不指向父目录 (parent directory),发现则需要调节指标。
有目录 .. 不指向父目录的父目录,发现则需要调节指标。
档案的第一 cluster 编号无效,发现则需要设档案大小为 0。
档案有坏或未使用的 cluster,发现则需要折断档案。
档案 cluster 链长于档案大小栏所指定的大小,发现则需要折断档案。
两个或以上的档案使用同一个 cluster,发现则除一个档案外,其档案都需要被折断。如果被折断是一个已检查的目录,折断后需要重新开以整个档案系统检查工作。
档案 cluster 链短于档案大小栏所指定的大小,发现则需要折断档案。
cluster 被标记为已使用但未有一个档案使用,发现则需要未使用。
此外,亦会检查以下但不进行修复:
启动磁区 (boot sector) 有无效参数
非根目录没有 . 和 .. 两项目
请注意这句话:If -a and -r are absent, the file system is only checked, but not repaired.
推荐这样使用:
./dosfsck -arV -w /dev/sda (该命令类似于dos下的chkdsk)
结果修复无效(如果这个指令有效,建议可以在程序中整合dosfsck修复的代码),看了只能重新格掉了
david@raptor:/media$ fsck /dev/sdb1
fsck 1.40.2 (12-Jul-2007)
dosfsck 2.11, 12 Mar 2005, FAT32, LFN
FATs differ but appear to be intact. Use which FAT ?
1) Use first FAT
2) Use second FAT
? 1
Reclaimed 416900 unused clusters (1707622400 bytes).
Free cluster summary wrong (584604 vs. really 1001504)
1) Correct
2) Don't correct
? 1
Leaving file system unchanged.
/dev/sdb1: 0 files, 1/1001505 clusters
david@raptor:/media$ fsck /dev/sdb1
fsck 1.40.2 (12-Jul-2007)
dosfsck 2.11, 12 Mar 2005, FAT32, LFN
FATs differ but appear to be intact. Use which FAT ?
1) Use first FAT
2) Use second FAT
? 2
Reclaimed 418050 unused clusters (1712332800 bytes).
Free cluster summary wrong (584604 vs. really 1001504)
1) Correct
2) Don't correct
? 1
Leaving file system unchanged.
/dev/sdb1: 0 files, 1/1001505 clusters
david@raptor:/media$