Solaris 10 6/06:文件系统检查实用程序 fsck 已经增强,包括 FreeBSD 4.9 版本的 fsck 程序的功能以及其他增强功能。
此 Solaris 发行版中的 fsck 实用程序包括以下改进:
更彻底地检查和修复文件系统,并且提供改进的错误消息。例如,在某些情况下,fsck 可确定缺少的结构并对其进行适当替换。
自动搜索备份超级块。
报告 fsck 何时需要重新运行。
清除目录时,fsck 现在会尝试立即恢复目录内容,因此可减少重新运行此实用程序所用的时间。
如果 fsck 发现重复块,并且并非所有引用重复块的文件都已清除,则 fsck 会在 fsck 运行结束时报告 inode 的数目。然后,可以使用 find 命令查看已损坏的 inode。
包括与扩展属性和其他特殊文件(如设备文件和 ACL 项)的状态有关的改进错误消息。
包括用于启用更详细消息的 -v 选项。
此外,还更新了 newfs 和 mkfs 命令,其中包括用于以文本格式显示文件系统超级块信息或以二进制格式转储超级块信息的新选项。
newfs [ -S or -B ] /dev/rdsk/... |
以文本格式显示文件系统的超级块
以二进制格式转储文件系统的超级块
mkfs [ -o calcsb or -o calcbinsb ] /dev/rdsk/... size |
以文本格式显示文件系统的超级块
以二进制格式转储文件系统的超级块
fsck 实用程序使用此超级块信息搜索备份超级块。
以下各节介绍了特定的 fsck 增强功能及其对应的错误消息。有关使用 fsck 实用程序修复损坏的超级块的逐步说明,请参见如何恢复坏的超级块(仅限 Solaris 10 6/06 发行版)。
以下 fsck 错误消息示例说明了自动搜索备份超级块的功能。
如果文件系统包含损坏的超级块,并且该超级块是使用 newfs 或 mkfs 自定义参数(如 ntrack 或 nsect)创建的,则使用 fsck 自动搜索的超级块执行修复过程可能会损坏文件系统。
如果文件系统是使用自定义参数创建的,并且包含错误的超级块,则 fsck 会提供取消 fsck 会话的提示:
CANCEL FILESYSTEM CHECK? |
如果文件系统是使用 newfs 命令创建的,并且 fsck 响应表明只是主超级块已损坏,请考虑使用 fsck 恢复超级块。
# fsck /dev/dsk/c1t2d0s0 ** /dev/rdsk/c1t2d0s0 BAD SUPERBLOCK AT BLOCK 16: BLOCK SIZE LARGER THAN MAXIMUM SUPPORTED LOOK FOR ALTERNATE SUPERBLOCKS WITH MKFS? no LOOK FOR ALTERNATE SUPERBLOCKS WITH NEWFS? yes FOUND ALTERNATE SUPERBLOCK 32 WITH NEWFS USE ALTERNATE SUPERBLOCK? yes FOUND ALTERNATE SUPERBLOCK AT 32 USING NEWFS If filesystem was created with manually-specified geometry, using auto-discovered superblock may result in irrecoverable damage to filesystem and user data. CANCEL FILESYSTEM CHECK? no ** Last Mounted on ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3a - Check Connectivity ** Phase 3b - Verify Shadows/ACLs ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cylinder Groups CORRECT GLOBAL SUMMARY SALVAGE? y UPDATE STANDARD SUPERBLOCK? y 81 files, 3609 used, 244678 free (6 frags, 30584 blocks, 0.0% fragmentation) ***** FILE SYSTEM WAS MODIFIED ***** |
如果文件系统是使用 mkfs 命令创建的,并且 fsck 响应表明只是主超级块已损坏,请考虑使用 fsck 恢复超级块。
# fsck /dev/dsk/c1t2d0s0 ** /dev/rdsk/c1t2d0s0 BAD SUPERBLOCK AT BLOCK 16: BLOCK SIZE LARGER THAN MAXIMUM SUPPORTED LOOK FOR ALTERNATE SUPERBLOCKS WITH MKFS? yes FOUND ALTERNATE SUPERBLOCK 32 WITH MKFS USE ALTERNATE SUPERBLOCK? yes FOUND ALTERNATE SUPERBLOCK AT 32 USING MKFS If filesystem was created with manually-specified geometry, using auto-discovered superblock may result in irrecoverable damage to filesystem and user data. CANCEL FILESYSTEM CHECK? no ** Last Mounted on ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3a - Check Connectivity ** Phase 3b - Verify Shadows/ACLs ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cylinder Groups CORRECT GLOBAL SUMMARY SALVAGE? y UPDATE STANDARD SUPERBLOCK? y 81 files, 3609 used, 243605 free (117 frags, 30436 blocks, 0.0% fragmentation) ***** FILE SYSTEM WAS MODIFIED ***** |
以下示例说明在超级块已损坏的情况下指定 fsck 的 -y 选项时将发生的情况。您将自动从 fsck 会话退出。此时会显示一条消息,指示使用替代超级块重新运行该命令。
# fsck -y /dev/dsk/c1t2d0s0 # ** /dev/rdsk/c1t2d0s0 BAD SUPERBLOCK AT BLOCK 16: BLOCK SIZE LARGER THAN MAXIMUM SUPPORTED LOOK FOR ALTERNATE SUPERBLOCKS WITH MKFS? yes LOOK FOR ALTERNATE SUPERBLOCKS WITH NEWFS? yes SEARCH FOR ALTERNATE SUPERBLOCKS FAILED. USE GENERIC SUPERBLOCK FROM MKFS? yes CALCULATED GENERIC SUPERBLOCK WITH MKFS If filesystem was created with manually-specified geometry, using auto-discovered superblock may result in irrecoverable damage to filesystem and user data. CANCEL FILESYSTEM CHECK? yes Please verify that the indicated block contains a proper superblock for the filesystem (see fsdb(1M)). FSCK was running in YES mode. If you wish to run in that mode using the alternate superblock, run `fsck -y -o b=453920 /dev/rdsk/c1t2d0s0'. |
以下 fsck 错误消息情况说明备份超级块的新提示,但在此示例中并未取消运行 fsck。如果此文件系统是使用自定义参数创建的,或者在此文件系统上运行 fsck 可能会带来其他问题,则应取消 fsck 会话。
以斜体提供的各种超级块错误情况如下所示:
# fsck /dev/rdsk/c0t1d0s0 ** /dev/rdsk/c0t1d0s0 BAD SUPERBLOCK AT BLOCK 16: BLOCK SIZE LARGER THAN MAXIMUM SUPPORTED BAD SUPERBLOCK AT BLOCK 16: NUMBER OF DATA BLOCKS OUT OF RANGE BAD SUPERBLOCK AT BLOCK 16: INODES PER GROUP OUT OF RANGE BAD SUPERBLOCK AT BLOCK 16: MAGIC NUMBER WRONG BAD SUPERBLOCK AT BLOCK 16: BAD VALUES IN SUPER BLOCK BAD SUPERBLOCK AT BLOCK 16: NCG OUT OF RANGE BAD SUPERBLOCK AT BLOCK 16: CPG OUT OF RANGE BAD SUPERBLOCK AT BLOCK 16: NCYL IS INCONSISTENT WITH NCG*CPG BAD SUPERBLOCK AT BLOCK 16: SIZE OUT OF RANGE BAD SUPERBLOCK AT BLOCK 16: NUMBER OF DIRECTORIES OUT OF RANGE BAD SUPERBLOCK AT BLOCK 16: ROTATIONAL POSITION TABLE SIZE OUT OF RANGE BAD SUPERBLOCK AT BLOCK 16: SIZE OF CYLINDER GROUP SUMMARY AREA WRONG BAD SUPERBLOCK AT BLOCK 16: INOPB NONSENSICAL RELATIVE TO BSIZE LOOK FOR ALTERNATE SUPERBLOCKS WITH MKFS? yes FOUND ALTERNATE SUPERBLOCK 32 WITH MKFS USE ALTERNATE SUPERBLOCK? yes FOUND ALTERNATE SUPERBLOCK AT 32 USING MKFS If filesystem was created with manually-specified geometry, using auto-discovered superblock may result in irrecoverable damage to filesystem and user data. CANCEL FILESYSTEM CHECK? no ** Last Mounted on ** Phase 1 - Check Blocks and Sizes ** Phase 2a - Check Duplicated Names ** Phase 2b - Check Pathnames ** Phase 3a - Check Connectivity ** Phase 3b - Verify Shadows/ACLs ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cylinder Groups SALVAGE? yes UPDATE STANDARD SUPERBLOCK? yes 82 files, 3649 used, 244894 free (6 frags, 30611 blocks, 0.0% fragmentation) ***** FILE SYSTEM WAS MODIFIED ***** |
如果 fsck 更好地报告它何时需要重新运行,则会减少多次运行所需的时间和必要,在大文件系统上多次运行可能特别耗时。
以下新消息提示您在错误情况结束时重新运行 fsck 实用程序:
***** PLEASE RERUN FSCK ***** |
或:
Please rerun fsck(1M) to correct this. |
这些新提示解决了以前在确定是否应该重新运行 fsck 方面的困难。
除非出现上述类似消息提示重新运行 fsck,否则不需要运行 fsck,即使显示以下消息后也是如此:
***** FILE SYSTEM WAS MODIFIED ***** |
但是,在出现此消息后重新运行 fsck 并不会损害文件系统。此消息只是有关 fsck 的更正操作的信息。
提供新的 fsck 消息,可报告和修复具有扩展属性的文件。例如:
BAD ATTRIBUTE REFERENCE TO I=1 FROM I=96 |
Attribute directory I=97 not attached to file I=96 I=96 OWNER=root MODE=40755 SIZE=512 MTIME=Jul 21 16:23 2005 DIR= <xattr> FIX? yes |
ZERO LENGTH ATTR DIR I=12 OWNER=root MODE=160755 SIZE=0 MTIME=Jul 21 16:25 2005 CLEAR? yes |
File should BE marked as extended attribute I=22 OWNER=root MODE=100644 SIZE=0 MTIME=Jul 21 16:36 2005 FILE= <xattr> FIX? yes |
UNREF ATTR DIR I=106 OWNER=root MODE=160755 SIZE=512 MTIME=Jul 21 16:36 2005 RECONNECT? yes |
File I=107 should NOT be marked as extended attribute I=107 OWNER=root MODE=100644 SIZE=0 MTIME=Jul 21 16:36 2005 FILE=?/attfsdir-7-att FIX? yes DIR I=106 CONNECTED. |
fsck 错误消息现在会报告有关块、段或 LFN(从文件开头算起的逻辑段编号)的信息。例如,可能会显示以下类似输出:
** Phase 1 - Check Blocks and Sizes FRAGMENT 784 DUP I=38 LFN 0 FRAGMENT 785 DUP I=38 LFN 1 FRAGMENT 786 DUP I=38 LFN 2 . . . |
fsck 将对象作为段处理,但是在以前的 Solaris 发行版中,该命令只是将对象作为块来报告其信息。现在,它将对象作为段来正确报告其信息。
如果 fsck 发现错误情况涉及重复块或段,则 fsck 会在 fsck 输出的结尾显示未清除的文件。例如,可能会显示以下类似输出:
LIST REMAINING DUPS? yes Some blocks that were found to be in multiple files are still assigned to file(s). Fragments sorted by inode and logical offsets: Inode 38: Logical Offset 0x00000000 Physical Fragment 784 Logical Offset 0x00000800 Physical Fragment 786 Logical Offset 0x00001000 Physical Fragment 788 Logical Offset 0x00001800 Physical Fragment 790 |
然后,可以使用 find -i inode-number 命令标识此示例中 inode 38 的名称。