首先推荐两个网页:
我们的相同之处就是用的fat文件系统,我的应用和第二个同志的一样,解决办法:移植一个修复工具dosfsck,其详细用法请参看:
dosfsck的工作机制如下(转自:):
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$
阅读(4830) | 评论(0) | 转发(0) |