文件系统检查工具fsck研究以及dosfsck代码分析
一般情况下 fsck 会在非交互的方式下运行。这种方式只会修正由 unclean halt 所引起的 corrupt。这些操作一般是在交互方式下运行操作的子集。这份文档中我们默认 fsck 是在交 互方式下运行的,所有可能的错误都会遇到。在这种方式下发现不一致的情况,则会将其汇 报给操作者选择修正的方式。
Super block 的一致性检查包括文件系统大小,inode 数量,空闲的 block 块,空闲的 inode 数量等。文件系统的大小必须大于 super block 和 inode 使用的 block 数的和。文件系统的大 小和布局信息是对 fsck 而言至关重要的信息。但并没有一种可以实际检查这些大小,因为 他们是由 newfs 静态决定的,fsck 可以检查这些大小在一个合理的范围之内。如果 fsck 在默 认的 super block 中的静态的参数中检查到 corrupt,它就会要求提供备用的 super block 所存 放的地址。
每个 inode 都包含一个列表或者是列表的指针,上面记录着这个 inode 所使用的数据块。 因为 inode 是这些列表的拥有者,因此,当这些列表存在不一致的情况时,就直接影响到拥 有它的 inode。
Fsck 会将一个 inode 声明的 block number 与列表中已经分配的 block number 比较。如果 另一个 inode 已经声明了一个 block number,那么这个 block number 就被加入到一个 duplicate block 链表中。否则,已分配的 block list 中会将这个 block number 加入。
必须是同种类型。这三种类型是:plain data blocks, symbolic link data blocks 和 directory data blocks。Plain data blocks 包含文件中保存的信息。symbolic link data blocks 包含一个 link 中
5. inode data size 每个 inode 包含一定数量的 data blocks。实际 data block 的数量是所有 allocated data blocks
和 indirect blocks 的总和。Fsck 计算实际的 data blocks 的数量,并与 inode 所记录的数值进 行比较。如果两者不一致,fsck 会进行修正。
4. inode links 连接数是计算每一个 inode 与其相连的目录项的数目。fsck 从文件系统的 root 目录开始
检查每一个 inode 的连接数,并沿着目录树依次查找。每个 inode 的实际 link count 在遍历的 时候计算得到。
如果存储的 link count 非 0,而计算的 link count 为 0,则此 inode 没有对应的目录项。这 种情况下,fsck 将把这个对应的文件放入 lost+fount 目录中。如果存储的 link count 与实际 计算所得的值非 0 且不相等,那么可能是 inode 的 link count 在有一个目录加入或删除的时 候没有被相应更新。这种情况下,fsck 会用计算得到的值更新存储的值。
Fsck 检查与 unallocated blocks(holes)对应的 directories。这些 directories 应当从不被创 建。当发现这些 directory 存在时,fsck 将通过缩短这些 directory 大小到上一个 allocated block 结尾的 hole 来提示用户去调整这些 directory。但同时这又意味着另一轮的第一部分检查需 要执行---super blockchecking。Fsck 将提示用户在修改一个含有 unlocated block 的 directory 后重新执行 fsck。(Whenfound, fsck will prompt the user to adjust the length of the offending directory which is done by shortening the size of the directory to the end of the last allocated block preceeding the hole. Unfortunately, this means that another Phase 1 run has to be done. Fsck will remind the user to rerun fsck after repairing a directory containing an unallocated block.)
3. Checking the inode state
当文件系统中有很多 inode 存在的时候(即很多文件),有可能会有几个 inode corrupt。 文件系统中的 inode 链表是从 inode2 开始顺序被检查的(inode0 标记没有用过的 inode,inode1 用来将来的扩展),直到文件系统中的最后一个 inode。Inode 的状态检查包括:format and type, link count, duplicated blocks, bad blocks, and inode size。
每个 inode 都有一个 mode word,它描述了 inode 的 type 和 state。Inode 必须处于六种类 型之一:普通 inode,目录 inode,symbolink inode,special block inode,special character inode, 或者是 socket inode。
2. Free block checking Fsck 会检查所有在 cylinder group block maps (注:cylinder group 即对应于 fs 的 partions。) 中标记为 free 的块,即没有被文件占用的块。Fsck 会检查 free 的块的数量与 inode 中声明使 用的块的数量的和是否与整个文件系统的所有块数相等。
如果一个 directory entry 的node list 中,fsck 会移除这个 directory entry。这一般发生在 bad data 被写入到 a directory data block 的情况下。
“.”的 directory inode number entry 必须是 directory data block 的第一个 entry。“.”的 inode number 必须 reference 它自己。比如,它必须等于 directory data block 的 inode number。“..” 的 directory inode number entry 必须是 directory data block 的第二个 entry,它的值必须与这个 directory entry 的父目录的 inode number 相等(如果是 root directory 的“..”,则与其 directory data block 的 inode number 相等)。如果 directory inode numbers 不正确,fsck 将用正确的值 取代它。如果目录有许多 hard links,第一个被认为是“..”指向的真正的父目录,fsck 会倾 向于删除其后出现的名称。(recommends deletion for the subsequently discovered names.(不 懂这句话) 7. File system connectivity
在执行 fsck 时,文件系统必须处于一种 quiescent state,因为 fsck 是一个 multi-pass 的 程序。
以下部分分别讨论发现数据不一致的方法,修正 cylinder group blocks,inodes, indirect blocks 和包含有目录项的 data blocks 的方法。
1. Super block checking 在一个文件系统中最经常 corrupt 掉的是 super block 中的汇总信息。原因是这些信息在
文件系统的 block 或者 inode 的每项改动,都需要在汇总信息中做相应的修改。因此,经常 会 corrupt(汇总信息与实际的文件系统信息不一致)。
每个 inode 包含了一个 32 位的 size 域。这个数是 inode 对应的文件所含有的字节数。这 个 size 域的一致性检查是通过计算与 inode 对应的最大数量的 blocks 数,与实际 inode 保存 的数值比较。
6. checking the data with an inode 一个 inode 可以直接或间接的 reference 三种类型的 data blocks。所有的 referenced blocks
如果在 block allocation maps 中有任何错误,fsck 将根据其计算的 allocated blocks 进行重 新组建 block allocation maps。
Super block 中也存有所有 free 块的数量信息,fsck 会把自己检查的结果与 super block 中 的信息进行比较。如果这两个数不等,则 fsck 会将检查得到的结果更新到 super block 中。 对文件系统中的 free inode 的数量,也会进行类似的处理。
文件系统检查工具—fsck 研究
第一部分 理论 导致一个文件系统 corrupt 的原因有可能有几种,而最经常的就是非正常关机流程和硬
linux命令--使用fsck修复文件系统
linux命令--使⽤fsck修复⽂件系统使⽤fsck修复⽂件系统错误1、问题描述服务器maint_samba由于服务器maint_samba (debian操作系统)没有正常关机,在重新启动过程中/dev/sdb1出现⽂件系统错误,需要⼿动使⽤fsck进⾏扫描和修复。
出现如下情况:…...Checking file systems ...fsck 1.41.3(12-OCT-2008)/dev/sdb1 contains a file system with errors check forced/dev/sdb1: |========== 百分数%……/dev/sdb1: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY (i.e.,without -a or -p options)fsck died with exit status4…………/var/log/fsck/fsck ---fsck报错⽇志的存放位置……Warning……Press enter for maintenance(or type Control-D to continue): --- Ctrl+d继续启动服务器。
2、⼿动fsck修复2.1 fsck简介fsck不仅可以对⽂件系统进⾏扫描,还能修正⽂件系统的⼀些问题。
值得注意的是fsck 扫描⽂件系统时⼀定要在单⽤户模式、修复模式或把设备umount后进⾏。
警告:如果扫描运⾏中的系统,会造成系统⽂件损坏。
⽂件系统扫描⼯具有 fsck,fsck.ext2,fsck.jfs,fsck.msdos,fsck.vfat,fsck.ext3,fsck.reiserfs(reiserfsck)。
其中fsck 默认⽀持⽂件系统ext2,如果想⽀持ext3⽂件系统的扫描,应该加-j 参数。
最好是根据不同的⽂件系统来调⽤不同的扫描⼯具,⽐如ext3的⽂件系统使⽤fsck.ext3,ext2⽂件系统使⽤fsck.etx2等。
linux fsck命令参数及用法详解
linux fsck命令参数及用法详解---检查修复linux文件系统命令fsck命令:fsck使用权限: 超级使用者使用方式: fsck [-sACVRP] [-t fstype] [--] [fsck-options] file sys [...]说明:在Linux系统中,为了增加系统性能,通常系统默认一些数据写在内存中,并不会直接将数据写入硬盘,这是因为内存速度要比硬盘快若干倍。
但是有个问题,万一由于“断电”或者其他未知原因,造成系统死机,怎么办?系统就崩溃了。
所以,我们需要在特定的时候让数据直接回存到硬盘中。
这里提供几个常用的命令,其中,fsck命令最重要. 当文件系统发生错误时,可用fsck命令尝试加以修复.直接采用分区编号(如/dev/had3),或使用挂载点(Mount Point,如/、/usr等)指定文件系统皆可。
假设一次指定多个文件系统,而这些系统分别位于不同的物理磁盘上,则fsck将会尝试同步的方式去检查他们,以节省操作时间。
参数:filesys :device 名称(eg./dev/sda1),mount 点(eg. / 或/usr)-t : 给定档案系统的型式,若在/etc/fstab 中已有定义或kernel 本身已支援的则不需加上此参数-s : 依序一个一个地执行fsck 的指令来检查-A : 对/etc/fstab 中所有列出来的partition 做检查-C : 显示完整的检查进度-d : 列印e2fsck的debug 结果-p : 同时有-A 条件时,同时有多个fsck 的检查一起执行-R : 同时有-A 条件时,省略/ 不检查-V : 详细显示模式-a : 如果检查有错则自动修复-r : 如果检查有错则由使用者回答是否修复补充说明:例子:检查msdos 档案系统的/dev/hda5 是否正常,如果有异常便自动修复:fsck -t msdos -a /dev/hda5注意:此指令可与/etc/fstab 相互参考操作来加以了解。
Linux文件系统损坏后的修复技巧详细介绍
Linux文件系统损坏后的修复技巧详细介绍Linux不正常关机,有时候再次启动时会报文件系统损坏,如何修复文件?首先会让你输入root用户的密码。
1)出错的时候如果告诉你是哪一块硬盘的分区有问题,比如是/dev/hda3接着用如下的命令去对付它呀:#fsck -y /dev/hda3结束后,reboot。
这样就OK了!2)如果你不知道时哪个地方出了问题。
(常用此种方法)可以直接#fsck在随后的多个确认对话框中输入:y结束后,reboot。
就ok了。
说明:对Linux系统中常用文件系统的检查是通过fsck工具来完成的。
功能说明:检查文件系统并尝试修复错误。
语法:fsck [-aANPrRsTV][-t <文件系统类型>][文件系统…]补充说明:当文件系统发生错误四化,可用fsck指令尝试加以修复。
参数:-a 自动修复文件系统,不询问任何问题。
-A 依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统。
-N 不执行指令,仅列出实际执行会进行的动作。
-P 当搭配”-A”参数使用时,则会同时检查所有的文件系统。
-r 采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式。
-R 当搭配”-A”参数使用时,则会略过/目录的文件系统不予检查。
-s 依序执行检查作业,而非同时执行。
-t<文件系统类型>指定要检查的文件系统类型。
-T 执行fsck指令时,不显示标题信息。
-V 显示指令执行过程。
用fsck检查文件系统完整性文件系统很复杂,因此易于发生错误。
可以用fsck 命令检查文件系统是否正确和有效。
它可以根据指令修复找到的小错误,并将未修复错误报告用户。
幸运的是,文件系统的代码非常有效,所以根本极少出现问题,并且问题通常原因是电源失败、硬件失败、或操作错误,例如没有正常关闭系统。
大多数系统设置为启动时自动运行fsck ,因此任何错误将在系统使用前被检测到(并根据希望修正)。
HDFS中的fsck命令(检查数据块是否健康)
HDFS中的fsck命令(检查数据块是否健康)在HDFS中,提供了fsck命令,⽤于检查HDFS上⽂件和⽬录的健康状态、获取⽂件的block信息和位置信息等。
我们在master机器上执⾏hdfs fsck就可以看到这个命令的⽤法。
[hadoop-twq@master ~]$ hdfs fsckUsage: hdfs fsck <path> [-list-corruptfileblocks | [-move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]]] [-includeSnapshots] [-storagepolicies] [-blockId <blk_Id>] <path> start checking from this path-move move corrupted files to /lost+found-delete delete corrupted files-files print out files being checked-openforwrite print out files opened for write-includeSnapshots include snapshot data if the given path indicates a snapshottable directory or there are snapshottable directories under it-list-corruptfileblocks print out list of missing blocks and files they belong to-blocks print out block report-locations print out locations for every block-racks print out network topology for data-node locations-storagepolicies print out storage policy summary for the blocks-blockId print out which file this blockId belongs to, locations (nodes, racks) of this block, and other diagnostics info (under replicated, corrupted or not, etc)查看⽂件⽬录的健康信息执⾏如下的命令:hdfs fsck /user/hadoop-twq/cmd可以查看/user/hadoop-twq/cmd⽬录的健康信息:其中有⼀个⽐较重要的信息,就是Corrupt blocks,表⽰损坏的数据块的数量查看⽂件中损坏的块 (-list-corruptfileblocks)[hadoop-twq@master ~]$ hdfs fsck /user/hadoop-twq/cmd -list-corruptfileblocksConnecting to namenode via http://master:50070/fsck?ugi=hadoop-twq&listcorruptfileblocks=1&path=%2Fuser%2Fhadoop-twq%2FcmdThe filesystem under path '/user/hadoop-twq/cmd' has 0 CORRUPT files上⾯的命令可以找到某个⽬录下⾯的损坏的数据块,但是上⾯表⽰没有看到坏的数据块损坏⽂件的处理将损坏的⽂件移动⾄/lost+found⽬录 (-move)hdfs fsck /user/hadoop-twq/cmd -move 删除有损坏数据块的⽂件 (-delete)hdfs fsck /user/hadoop-twq/cmd -delete检查并列出所有⽂件状态(-files)执⾏如下的命令:hdfs fsck /user/hadoop-twq/cmd -files 显⽰结果如下:上⾯的命令可以检查指定路径下的所有⽂件的信息,包括:数据块的数量以及数据块的备份情况检查并打印正在被打开执⾏写操作的⽂件(-openforwrite)执⾏下⾯的命令可以检查指定路径下⾯的哪些⽂件正在执⾏写操作:hdfs fsck /user/hadoop-twq/cmd -openforwrite打印⽂件的Block报告(-blocks) 执⾏下⾯的命令,可以查看⼀个指定⽂件的所有的Block详细信息,需要和-files⼀起使⽤: hdfs fsck /user/hadoop-twq/cmd/big_file.txt -files -blocks 结果如下:如果,我们在上⾯的命令再加上-locations的话,就是表⽰还需要打印每⼀个数据块的位置信息,如下命令:hdfs fsck /user/hadoop-twq/cmd/big_file.txt -files -blocks -locations 结果如下:如果,我们在上⾯的命令再加上-racks的话,就是表⽰还需要打印每⼀个数据块的位置所在的机架信息,如下命令:hdfs fsck /user/hadoop-twq/cmd/big_file.txt -files -blocks -locations -racks 结果如下:hdfs fsck的使⽤场景场景⼀当我们执⾏如下的命令:hdfs fsck /user/hadoop-twq/cmd可以查看/user/hadoop-twq/cmd⽬录的健康信息: 我们可以看出,有两个⽂件的数据块的备份数量不⾜,这个我们可以通过如下的命令,重新设置两个⽂件数据块的备份数:## 将⽂件big_file.txt对应的数据块备份数设置为1hadoop fs -setrep -w 1 /user/hadoop-twq/cmd/big_file.txt## 将⽂件parameter_test.txt对应的数据块备份数设置为1hadoop fs -setrep -w 1 /user/hadoop-twq/cmd/parameter_test.txt上⾯命令中-w参数表⽰等待备份数到达指定的备份数,加上这个参数后再执⾏的话,则需要⽐较长的时间 执⾏完上⾯的命令后,我们再来执⾏下⾯的命令:hdfs fsck /user/hadoop-twq/cmd结果如下:场景⼆当我们访问HDFS的WEB UI的时候,出现了如下的警告信息:表明有⼀个数据块丢失了,这个时候我们执⾏下⾯的命令来确定是哪⼀个⽂件的数据块丢失了:[hadoop-twq@master ~]$ hdfs fsck / -list-corruptfileblocksConnecting to namenode via http://master:50070/fsck?ugi=hadoop-twq&listcorruptfileblocks=1&path=%2FThe list of corrupt files under path '/' are:blk_1073744153 /tmp/hadoop-yarn/staging/history/done_intermediate/hadoop-twq/job_1528682852398_0015_conf.xmlThe filesystem under path '/' has 1 CORRUPT files发现是数据块blk_1073744153丢失了,这个数据块是淑⽂⽂件/tmp/hadoop-yarn/staging/history/done_intermediate/hadoop-twq/job_1528682852398_0015_conf.xml的。
fsck命令详解
fsck命令详解本⽂出⾃ “” 博客,更多命令查看博客:fsck命令使⽤fsck命令可以检查⽂件系统并尝试修复系统的错误。
命令语法:fsck [选项] [⽂件系统]命令中各选项的含义如表所⽰。
表 fsck命令选项含义选项含义-a⾃动修复⽂件系统,不询问任何问题-A按照/etc/fstab配置⽂件的内容,检查⽂件内所列的全部⽂件系统-N不执⾏命令,仅列出实际执⾏会进⾏的动作-P当搭配-A选项使⽤时,则会同时检查/⽬录的⽂件系统-r采⽤交互模式,在执⾏修复时询问,让⽤户确认并决定处理⽅式-R当使⽤-A选项检查所有⽂件系统的时候,跳过/⽬录的⽂件系统-t <⽂件系统类型>指定要检查的⽂件系统类型-C显⽰完整的检查进度-y关闭互动模式-c检查坏块,并将它们添加到坏块列表-p⾃动修复⽂件系统错误-f强制检查,即使⽂件系统被标记⼲净例:检查磁盘分区/dev/sda5的⽂件系统。
[root@rhel ~]# fsck /dev/sda5例:强制检查磁盘分区/dev/sda5的⽂件系统[root@rhel~]# fsck -f /dev/sda5fsckfrom util-linux-ng 2.17.2e2fsck1.41.12 (17-May-2010)第⼀步:检查inode,块,和⼤⼩第⼆步:检查⽬录结构第3步:检查⽬录连接性Pass4: Checking reference counts第5步:检查簇概要信息/dev/sda5:12/6561792 files (0.0% non-contiguous), 459863/26215641 blocks例:检查和修复磁盘分区/dev/sda5的⽂件系统,在执⾏修复时进⾏询问,让⽤户决定处理⽅式,显⽰详细修复过程。
[root@rhel ~]# fsck -rV -t ext4 /dev/sda5例:检查磁盘分区/dev/sda5的⽂件系统,并显⽰完整的检查进度。
[转载]在Linux中使用fsck命令修复文件系统
[转载]在Linux中使⽤fsck命令修复⽂件系统背景:fsck(⽂件系统检查)是⼀种命令⾏实⽤程序,可让您在⼀个或多个 Linux ⽂件系统上执⾏⼀致性检查和交互式修复。
它的程序独⽴于所检查⽂件的系统类型。
在系统⽆法启动或⽆法挂载分区的情况下,可以使⽤ fsck 命令修复损坏的⽂件系统。
在本⽂中,我们将讨论 fsck 命令。
重点:1、我们不应该⽤ fsck 检查已挂载的磁盘,这很可能会对磁盘造成永久性的伤害。
因此在开始使⽤ fsck 之前,我们需要使⽤下⾯命令来卸载磁盘如何使⽤ fsckfsck 命令采⽤以下⼀般形式:fsck [OPTIONS] [FILESYSTEM]操作指南:基本操作:$ umount/dev/sdb1$ fsck/dev/sdb1检查⽂件系统错误并⾃动修复使⽤选项 -a 进⾏⼀致性检查并⾃动修复这些错误。
也可以⽤ -y 替代 -a 选项。
$ fsck -a /dev/sdb1检查⽂件系统错误但并不进⾏修复若我们只想知道⽂件系统上有哪些错误⽽不想修复这些错误,那么可以使⽤选项 -n,$ fsck-n /dev/sdb1只检查指定⽂件系统类型的分区使⽤选项 -t 及⽂件系统类型,可以让 fsck 只检查指定⽂件系统类型的分区,⽐如指定⽂件系统类型为 “ext4”,$ fsck-t ext4 /dev/sdb1或者,$ fsck-t -A ext4只有 root 或具有 sudo 特权的⽤户才能清除缓冲区。
当 FILESYSTEM 参数不提供时, fsck 检查 fstab ⽂件中列出的设备。
切勿在已挂载的分区上运⾏ fsck ,因为这可能会损坏⽂件系统。
在尝试检查或修复⽂件系统之前,请先进⾏操作 unmount 。
fsck 命令是各种 Linux ⽂件系统检查器 (fsck.*) 的包装,并且根据⽂件系统的类型接受不同的选项。
可以在⼿册页以获取有关特定检查器的更多信息。
例如,要查看 fsck.ext4 可⽤的选项,请输⼊:man fsck.ext4修复损坏的⽂件系统该 fsck 命令最简单的⽤例是修复⽆根损坏的 ext3 或 ext4 ⽂件系统。
CHKDSK命令的语法
CHKDSK命令的语法Chkdsk是系统检查磁盘当前状态的一个命令,启动它可以显示磁盘状态、内存状态和指定路径下指定文件的不连续数目。
选择“开始→运行”输入“Chkdsk”回车,即可启动Chkdsk,它会自动校验文件并将丢失的链接转换成文件。
CHKDSK命令可检查磁盘状态并显示状态报告,还能修正磁盘错误。
状态报告显示MS-DOS文件系统中的逻辑错误,该文件系统由文件分配表(FAT)和目录组成(CHKDSK不验证文件中的信息能否准确读出)。
如果磁盘有错误,CHKDSK便会给出一条警告信息。
所以,应不时地用CHKDSK来检查一下磁盘有无错误,以保证系统的正常运行。
一、CHKDSK命令的语法CHKDSK drive:[[path]filename][/F][/V]若要显示当前驱动器的磁盘状态,可用命令:CHKDSK二、CHKDSK命令的参数解释(1)drive指定要用CHKDSK检查的磁盘所在的驱动器。
(2)[path]filename指定要用CHKDSK进行碎片检查的一个或一组文件的路径及名称,可用通配符(*或?)指定多上文件。
三、CHKDSK命令的开关项(1)/F修正磁盘错误。
需要注意的是从其它应用程序(如Windows等)运行CHKDSK时不要选此项。
(2)/V磁盘检查时,显示每个目录下的文件。
四、帮助信息的获取如果不知道CHKDSK命令的用法也没关系,在DOS下随时打入CHKDSK/?便可了解其用法。
五、关于CHKDSK命令的注释(1)状态报告的形式MS-DOS按类似下列的形式显示CHKDSK的状态报告:Volume MS-DOS_6 created 07-16-1996 10:40aVolume Serial Number is 2111-59F0629,424,128 bytes total disk space638,976 bytes in 15 hidden files1,146,880 bytes in 70 directories120,766,464 bytes in 1,802 user files506,871,808 bytes available on disk(2)修正磁盘错误在修正磁盘错误时,最好使用ScanDisk程序。
fsck问题说明
Fsck的用法有很多方式可以使文件系统遭到破坏,最通常的是不正常关机和一些硬件错误。
原因是在关闭系统并且挂起CPU之前没有执行sync来将数据写入磁盘,导致文件系统不完整。
另外,硬件错误也是很致命的,特别是磁盘的物理损伤,将导致数据永久性地丢失。
fsck用来检查和维护不一致的文件系统。
若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查. fsck检查所有在柱面组群的数据块映象中被标识为未使用的数据块,也即空闲数据块。
fsck合计空闲数据块的数目,并且把它加上被文件节点使用的数据块的数目,检查这个结果是否等于文件系统中所有数据块的总和。
如果fsck发现数据块分配映象有错时,它会自动重建它。
概要信息中和超级数据块相联系的信息包含了在文件系统中所有空闲数据块的数目。
fsck将它检查所得到的空闲数据块数目和上面概要信息中的空闲数据块数目进行比较,如果两者不一致,fsck就将实际检查得到的空闲数据块覆盖概要信息中的空闲数据块信息。
对于空闲文件节点的检查也会作同样的处理。
后面一般跟参数如下:-s : 依序一个一个地执行fsck 的指令来检查-A : 对/etc/fstab 中所有列出来的partition 做检查-C : 显示完整的检查进度-d : 列印 e2fsck 的debug 结果-p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行-R : 同时有 -A 条件时,省略/ 不检查-V : 详细显示模式-a : 如果检查有错则自动修复-r : 如果检查有错则由使用者回答是否修复同时还有一些特殊用法例如:天行设备突然断电后出现WARNING!!! running e2fsck on a mounted filesystem may cause SEVERE filesystem damage.用fsck -V –A 无法修复解决的办法就是先将对象领域转为ro只读格式,然后进行fsckmount -o remount,ro /fsck -y /(-y,指的就是后面提示问题一律回答yes)。
solaris fcsk命令
1) 移去一个没有相关文件的目录入口 答Yes或Y来删除该目录入口
2) 重连接一个已分配但不能访问的文件
对fsck的"RECONNECT?"回答Yes,即把该I节点连接到lost+found目录下,文件名即是I节点号
3) 连接数调整 回答Yes或Y来改正连接数
4) 自由块表不一致 回答Yes或Y来修正超级块
总结:以后执行命令的时候,一定要仔细阅读指南,搞清楚应该做什么,不该做什么。
问题:lost+found里还有很多文件,以“#”打头,后面是数字编号,这是没有恢复连接的文件吗?怎么才能恢复呢?有看见这篇文章的高手请指点一下啊。
PS:由于第一次亲密接触(续)实在没有可写的了,因为后面安装只能说是一帆风顺,除了分区出了问题,一个分区小了,不得不重装。看来仔细阅读说明书还是很重要的。切忌瞎搞胡搞。
partition>quit
format>save
使用命令newfs来为每一个分区创建文件系统:
newfs /dev/rdsk/c?t?d?s?
硬盘包含启动分区(根分区),我们需要手动安装启动模块
#reboot cdrom -s (从光盘启动,并进入单用户模式)
#mount /dev/dsk/c0t1d0s0 /mnt (将系统根分区挂接到mnt目录下)
print - display the current table
label - write partition map and label to the disk
! - execute , then return
quit
partition> modify
partition>label
fsck_msdos分析
最近准备重写android/external中自带的fsck工具,因为这个工具对于内存的占用太厉害了,在一些极端的大容量小簇的情况下会导致系统奔溃,所以准备重写一个。
Android自带的fsck在检查的时候会为每一个簇分配一个struct fatentry结构体,在后面的检查中构成簇链(cluster chain)。
这种方法虽然内存占用比较多,但是处理比较快速,而且适应性较强,可以处理任何情况,也算是一方面的优点吧。
(1)fat表的检查Fsck基本分为下面四个阶段:1.读FAT,并进行fat表的对比(为了保证fat表的完整性,会保持多份fat表)2.处理cluster chain。
对于错误情况进行交互式的处理。
3.处理文件目录项和文件4.处理一些无主(没有相应目录项)的数据,写入到LOST.DIR中5.写入fat表我本来不想罗列代码,但是对于一个码农来说,无代码的泛泛而论都显得十分空洞。
我是一懒的人,就用下面的表格来代表图。
在此不再赘述。
for (cl = CLUST_FIRST; cl < boot->NumClusters;)switch (boot->ClustMask) {case CLUST32_MASK:fat[cl].next = p[0] + (p[1] << 8)+ (p[2] << 16) + (p[3] << 24);fat[cl].next &= boot->ClustMask;ret |= checkclnum(boot, no, cl, &fat[cl].next);cl++;p += 4;break;case CLUST16_MASK:fat[cl].next = p[0] + (p[1] << 8);ret |= checkclnum(boot, no, cl, &fat[cl].next);cl++;p += 2;break;default:fat[cl].next = (p[0] + (p[1] << 8)) & 0x0fff;ret |= checkclnum(boot, no, cl, &fat[cl].next);cl++;if (cl >= boot->NumClusters)break;fat[cl].next = ((p[1] >> 4) + (p[2] << 4)) & 0x0fff;ret |= checkclnum(boot, no, cl, &fat[cl].next);cl++;p += 3;break;}上面的代码摘自external/fsck_msdos/fat.c文件。
