fsck 命令检查和尝试修复的内容
第22 章• 检查UFS 文件系统一致性(任务) 425
将根据以下内容检查超级块是否存在不一致性问题:
文件系统大小
inode 数
空闲块计数
空闲inode 计数
文件系统大小和Inode 列表大小检查
文件系统大小必须大于超级块和inode 列表所用的块数。inode 数必须小于文件系统所允许
的最大数。一个inode 表示一个文件的所有信息。对于fsck 命令,文件系统大小和布局信
息是最关键的信息。无法实际检查这些大小,因为它们是在创建文件系统时静态确定的。
但是,fsck 命令可以检查这些大小是否在合理的范围内。所有其他文件系统检查都要求这
些大小正确。如果fsck 命令检测到主超级块的静态参数已损坏,则会要求操作员指定备用
超级块的位置。
有关UFS 文件系统结构的更多信息,请参见第445 页中的“UFS 文件系统的柱面组结构
”。
空闲块检查
空闲块存储在柱面组块图中。fsck 命令检查标记为空闲的所有块是否未被任何文件请求。
将所有块统计在内后,fsck 命令将检查空闲块数与inode 所请求的块数之和是否等于文件系
统中的总块数。如果块图出现任何错误,则fsck 命令将重新构建它们,不考虑已分配的
块。
超级块中的摘要信息包括文件系统中空闲块总数的计数。fsck 命令将此计数与它在文件系
统中找到的空闲块数进行比较。如果这两个计数不一致,则fsck 命令会将超级块中的计数
替换为实际的空闲块计数。
空闲Inode 检查
超级块中的摘要信息包含文件系统中空闲inode 的计数。fsck 命令将此计数与它在文件系统
中找到的空闲inode 数进行比较。如果这两个计数不一致,则fsck 命令会将超级块中的计
数替换为实际的空闲inode 计数。
Inode
将按顺序从inode 2 开始检查inode 列表(Inode 0 和inode 1 是保留的)。将根据以下内容检
查每个inode 是否存在不一致性问题:
格式和类型
链接计数
重复块
坏块编号
Inode 大小
fsck 命令检查和尝试修复的内容
426 系统管理指南:设备和文件系统• 2006 年9 月
Inode 的格式和类型
每个inode 都包含模式字,用于说明inode 的类型和状态。Inode 可以是以下九种类型之一
:
常规
目录
块特殊
字符特殊
FIFO(命名管道)
符号链接
阴影(用于ACL)
属性目录
套接字
Inode 可能处于以下三种状态之一:
已分配
未分配
部分分配
创建文件系统时,会保留固定数目的inode。但是,仅在需要这些inode 时才分配它们。已
分配inode 是指向文件的inode。未分配inode 不指向文件,因此它应该为空。部分分配状态
表示inode 未正确格式化。例如,如果因硬件故障而将错误数据写入inode 列表,则inode
将变为此状态。fsck 命令可以执行的唯一更正操作是清除inode。
链接计数检查
每个inode 都包含与其链接的目录项数的计数。fsck 命令通过从根(/) 目录开始检查整个目
录结构并计算每个inode 的实际链接计数,验证每个inode 的链接计数。
存储在inode 中的链接计数和由fsck 命令确定的实际链接计数之间的差异可能是以下三种
类型之一:
存储的计数不为0,而实际计数为0。
如果inode 的目录项不存在,则可能出现此情况。在这种情况下,fsck 命令会将已断开
的文件放置在lost+found 目录中。
存储的计数不为0 且实际计数不为0。但是,这两个计数不相等。
如果已添加或删除目录项,但尚未更新inode,则可能会出现此情况。在这种情况下,
fsck 命令会将存储的链接计数替换为实际的链接计数。
存储的计数为0,而实际计数不为0。
在这种情况下,fsck 命令会将inode 的链接计数更改为实际计数。
重复块检查
每个inode 都包含由inode 请求的所有块的列表或指向列表的指针(间接块)。由于间接块
由inode 拥有,因此间接块的不一致性问题会直接影响拥有间接块的inode。
fsck 命令检查和尝试修复的内容
第22 章• 检查UFS 文件系统一致性(任务) 427
fsck 命令将inode 请求的每个块编号与已分配块的列表进行比较。如果另一个inode 已请求
某个块编号,则将该块编号放置在重复块列表中。否则,会将已分配块的列表更新为包括
该块编号。
如果发现重复块,则fsck 命令再次遍历inode 列表,以查找请求每个重复块的其他inode。
fsck 命令不能肯定哪个inode 出现错误。因此,fsck 命令会提示您选择应保留和应清除的
inode。请注意,inode 中的大量重复块可能是由于未将间接块写入文件系统而导致的。
坏块编号检查
fsck 命令检查inode 请求的每个块编号,以确定其值是否大于文件系统中第一个数据块的值
并小于最后一个数据块的值。如果块编号超出了此范围,则认为它是坏块编号。
inode 中的坏块编号可能是由于未将间接块写入文件系统而导致的。fsck 命令会提示您清除
inode。
Inode 大小检查
每个inode 都包含它所引用的数据块数的计数。实际数据块的数目等于已分配数据块与间接
块的和。fsck 命令计算数据块数,并将该块计数与inode 请求的块数进行比较。如果inode
包含的计数不正确,则fsck 命令会提示您修复它。
每个inode 都包含一个64 位大小的字段。此字段说明与inode 关联的文件中的字符数(数据
字节)。粗略检查inode 的大小字段是否一致时,会使用大小字段中所示的字符数,以计算
应与inode 关联的块数,然后将该块数与inode 请求的实际块数进行比较。
间接块
间接块由inode 拥有。因此,间接块的不一致性问题会影响拥有它的inode。可以检查的不
一致性问题如下:
已由另一inode 请求的块
超出文件系统范围的块编号
对直接块也执行以上列出的一致性检查。
数据块
inode 可以直接或间接引用三种数据块。引用的所有块必须属于同一种类。这三种类型的数
据块如下:
纯文本数据块
符号链接数据块
目录数据块
纯文本数据块包含存储在文件中的信息。符号链接数据块包含存储在符号链接中的路径
名。目录数据块包含目录项。fsck 命令只能检查目录数据块的有效性。
通过inode 的mode 字段中的项,可以将目录与常规文件区分开。与目录关联的数据块包含
目录项。检查目录数据块是否存在一致性问题涉及以下内容:
fsck 命令检查和尝试修复的内容
428 系统管理指南:设备和文件系统• 2006 年9 月
指向未分配inode 的目录inode 编号
大于文件系统中inode 数的目录inode 编号
“.” 和“..” 目录的错误目录inode 编号
从文件系统断开的目录
未分配目录检查
如果目录数据块中的inode 编号指向未分配的inode,则fsck 命令删除该目录项。如果修改
并写出包含新目录项的数据块,但未写出inode,则可能出现此情况。如果突然关闭CPU,
则可能出现此情况。
错误Inode 编号检查
如果目录项inode 编号超出了inode 列表的范围,则fsck 命令删除该目录项。将错误数据写
入目录数据块时,可能出现此情况。
错误“.” 和“..” 项检查
“.” 的目录inode 编号项必须是目录数据块中的第一项。目录inode 编号必须引用自身。即,
其值必须等于目录数据块的inode 编号。
“..” 的目录inode 编号项必须是目录数据块中的第二项。目录的inode 编号值必须等于父目
录的inode 编号或它自己的inode 编号(如果该目录是根(/) 目录)。
如果“.” 和“..” 的目录inode 编号不正确,则fsck 命令将它们替换为正确值。如果有多个硬
链接指向一个目录,则将找到的第一个硬链接视为“..” 应指向的实际父级。在这种情况
下,fsck 命令建议您删除其他名称。
断开的目录
fsck 命令检查文件系统的常规连通性。如果找到未链接到文件系统的目录,则fsck 命令将
该目录链接到文件系统的lost+found 目录。当inode 已写入文件系统,但是对应的目录数
据块未写入时,可能出现此情况。
常规数据块
与常规文件关联的数据块包含文件的内容。fsck 命令不会尝试检查常规文件的数据块内容
的有效性。
fsck 摘要消息
以交互方式运行fsck 命令且成功完成时,将显示与以下内容类似的消息:
# fsck/dev/rdsk /c0t0d0s7
** /dev/rdsk/c0t0d0s7
fsck 命令检查和尝试修复的内容
第22 章• 检查UFS 文件系统一致性(任务) 429
** Last Mounted on /export/home
** Phase 1- Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
2 files, 9 used, 2833540 free (20 frags, 354190 blocks, 0.0% fragmentation)
#
# fsck/dev/rdsk /c0t0d0s7
** /dev/rdsk/c0t0d0s7
** Last Mounted on /export/home
** 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
2 files, 9 used, 2833540 free (20 frags, 354190 blocks, 0.0% fragmentation)
#
fsck 输出的最后一行说明有关文件系统的以下信息:
# files 正在使用的inode 数
# used 正在使用的段数
# free 未使用的段数
# frags 未使用的非块段数
# blocks 未使用的完整块数
fsck 命令检查和尝试修复的内容
430 系统管理指南:设备和文件系统• 2006 年9 月
%fragmentation 段百分比,其中:空闲段数x 100/文件系统中的总段数
有关段的信息,请参见第449 页中的“段大小”。
以交互方式检查和修复UFS 文件系统
在以下情况下可能需要以交互方式检查文件系统:
无法挂载文件系统
使用文件系统时出现不一致性问题
正在使用的文件系统出现不一致性问题时,可能会在控制台窗口或系统消息文件中显示错
误消息。或者,系统可能会崩溃。例如,系统消息文件/var/adm/messages 可能包括与以下
内容类似的消息:
Sep 5 13:42:40 hostname ufs: [ID 879645 kern.notice] NOTICE: /: unexpected
free inode 630916, run fsck(1M)
hostname 是报告该错误的系统。
使用fsck 命令之前,您可能希望参阅以下内容以了解有关解决fsck 错误消息的信息:
第444 页中的“fsck 命令的语法和选项”
《System Administration Guide: Advanced Administration》中的第28 章,“Resolving UFS
File System Inconsistencies (Tasks)”
运行fsck 命令检查UFS 文件系统时,请牢记以下要点:
使用fsck 检查文件系统时,文件系统应该处于非活动状态。等待刷新到磁盘的文件系统
更改或在fsck 检查过程中发生的文件系统更改,可能被解释为文件系统损坏。这些问题
不能可靠地表明存在问题。
使用fsck 修复文件系统时,文件系统必须处于非活动状态。等待刷新到磁盘的文件系统
更改或在fsck 修复过程中发生的文件系统更改,可能导致文件系统损坏。或者,它们可
能导致系统崩溃。
在文件系统上使用fsck 之前,取消挂载文件系统。这样做可确保文件系统的数据结构尽
可能一致。活动根(/)、/usr 和/var 文件系统除外,因为必须挂载它们才能运行fsck。
如果需要修复根(/)、/usr 和/var 文件系统,应尽可能从备用设备引导系统,以便这些
文件系统处于非挂载和非活动状态。
有关在根(/)、/usr 或/var 文件系统上运行fsck 的逐步说明,请参见第432 页中的“如
何从备用引导设备检查根(/)、/usr 或/var 文件系统”。
以交互方式检查和修复UFS 文件系统
第22 章• 检查UFS 文件系统一致性(任务) 431
如何从备用引导设备检查根(/)、/usr 或/var 文件
系统
有关Solaris 10 6/06 发行版中fsck 的新信息,请参见第324 页中的“UFS 文件系统实用程序
(fsck、mkfs 和newfs)的增强功能”。如果看到以下消息,则无需重新运行fsck:
***** FILE SYSTEM WAS MODIFIED *****
但是,在出现此消息后重新运行fsck 并不会损害文件系统。此消息只是有关fsck 的更正操
作的信息。
此过程假定本地CD 或网络引导服务器可用,从而可以从备用设备引导系统。
有关恢复坏的超级块的信息,请参见第438 页中的“如何恢复坏的超级块(仅限Solaris 10
6/06 发行版)”或第442 页中的“如何恢复坏的超级块(Solaris 8、9 和10 发行版)”。
成为超级用户或承担等效角色。
仅适用于具有镜像根(/) 文件系统的系统:在从备用设备进行引导之前分离根(/) 镜像,否则
会有损坏文件系统的风险。
有关分离根(/) 镜像的信息,请参见《Solaris Volume Manager Administration Guide》中
的“WorkingWith Submirrors”。
识别需要检查的根(/)、/usr 或/var 文件系统的设备,例如/dev/dsk/c0t0d0s0。
从备用设备进行引导时,将需要提供此设备名称。已从备用设备引导后识别此设备会更困
难。
在单用户模式下,从备用设备(如本地CD 或网络)引导具有需要检查的根(/)、/usr 或
/var 文件系统的系统。
这样做可确保在这些文件系统上没有任何活动。
例如:
# init 0
ok boot net -s
.
.
.
#
1
2
3
4
以交互方式检查和修复UFS 文件系统
432 系统管理指南:设备和文件系统• 2006 年9 月
检查包含步骤3 中识别的根(/)、/usr 或/var 文件系统的设备。
如果要检查或修复的文件系统的硬件已更改,则设备名称可能已更改。检查fsck -n 消息
Last Mounted on ... 是否指示文件系统的预期设备。
在此示例中,要检查的根(/) 文件系统是/dev/dsk/c0t0d0s0。
# fsck-n /dev/rdsk/c0t0d0s0
** /dev/rdsk/c0t0d0s0 (NO WRITE)
** Last Mounted on /
.
.
.
fsck/dev/rdsk /c0t0d0s0
** /dev/rdsk/c0t0d0s0
** Last Mounted on /
** Phase 1- Check Blocks and Sizes
** Phase 2 - Check Pathnames
.
.
.
更正任何报告的fsck 错误。
有关如何响应以交互方式检查一个或多个UFS 文件系统时出现的错误消息,请参
见《System Administration Guide: Advanced Administration》中的第28 章,“Resolving UFS
File System Inconsistencies (Tasks)”。
如果在运行fsck 后无法修复所有问题,请参见第436 页中的“修复fsck 命令无法修复的
UFS 文件系统。”。
挂载已修复的文件系统,以确定lost+found 目录中是否存在任何文件。
由fsck 命令放置在lost+found 目录中的各个文件是使用其inode 编号重命名的。如有可
能,请重命名这些文件,并将它们移动到所属的位置。请尝试使用grep 命令匹配各个文件
中的短语,并尝试使用file 命令确定文件类型。
5
6
7
8
以交互方式检查和修复UFS 文件系统
第22 章• 检查UFS 文件系统一致性(任务) 433
最后,删除遗留在lost+found 目录中的无法识别的文件或目录,以免该目录不必要地被填
满。
使系统返回到多用户模式。
# init 6
仅适用于具有镜像根(/) 文件系统的系统:重新连接根(/) 镜像。
如何检查其他文件系统(不是根(/)、/usr 或
/var)
有关Solaris 10 6/06 发行版中fsck 的新信息,请参见第324 页中的“UFS 文件系统实用程序
(fsck、mkfs 和newfs)的增强功能”。如果看到以下消息,则无需重新运行fsck:
***** FILE SYSTEM WAS MODIFIED *****
但是,在出现此消息后重新运行fsck 并不会损害文件系统。此消息只是有关fsck 的更正操
作的信息。
此过程假定已取消挂载要检查的文件系统。
有关恢复坏的超级块的信息,请参见第438 页中的“如何恢复坏的超级块(仅限Solaris 10
6/06 发行版)”或第442 页中的“如何恢复坏的超级块(Solaris 8、9 和10 发行版)”。
成为超级用户或承担等效角色。
取消挂载本地文件系统以确保文件系统上没有任何活动。
将挂载点目录或/dev/dsk/device-name 指定为fsck 命令的参数。将显示有关不一致性问题
的所有消息。
例如:
# umount /export/home
# fsck/dev/rdsk /c0t0d0s7
** /dev/dsk/c0t0d0s7
** Last Mounted on /export/home
.
.
.
9
10
1
2
以交互方式检查和修复UFS 文件系统
434 系统管理指南:设备和文件系统• 2006 年9 月
更正任何报告的fsck 错误。
有关如何响应以交互方式检查一个或多个UFS 文件系统时出现的错误消息,请参
见《System Administration Guide: Advanced Administration》中的第28 章,“Resolving UFS
File System Inconsistencies (Tasks)”。
如果在运行fsck 后无法修复所有问题,请参见第436 页中的“修复fsck 命令无法修复的
UFS 文件系统。”。
挂载已修复的文件系统,以确定lost+found 目录中是否存在任何文件。
由fsck 命令放置在lost+found 目录中的单独文件是使用其inode 编号重命名的。
重命名并移动放置在lost+found 目录中的任何文件。
如有可能,请重命名这些文件,并将它们移动到所属的位置。请尝试使用grep 命令匹配各
个文件中的短语,并尝试使用file 命令确定文件类型。
最后,删除遗留在lost+found 目录中的无法识别的文件或目录,以免该目录不必要地被填
满。
以交互方式检查非根(/) 或非/usr 文件系统
以下示例说明如何检查/dev/rdsk/c0t0d0s6 文件系统并更正不正确的块计数。此示例假定
已取消挂载文件系统。
# fsck/dev/rdsk /c0t0d0s6
** Phase 1- Check Block and Sizes
INCORRECT BLOCK COUNT I=2529 (6 should be 2)
CORRECT? y
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Cylinder Groups
929 files, 8928 used, 2851free (75 frags, 347 blocks, 0.6%
fragmentation)
3
4
5
6
示例22–1
以交互方式检查和修复UFS 文件系统
第22 章• 检查UFS 文件系统一致性(任务) 435
***** FILE SYSTEM WAS MODIFIED *****
#
整理UFS 文件系统
fsck -o p 命令(p 表示整理)检查UFS 文件系统,并自动解决通常因系统意外关闭而导致
的问题。如果此命令遇到要求操作员干预的问题,则它会立即退出。此命令还允许并行检
查文件系统。
在异常关机后,可以运行fsck -o p 命令以整理文件系统。在此模式下,fsck 命令不查看“
干净”标志,而是执行完整检查。这些操作是fsck 命令以交互方式运行时所执行操作的子
集。
如何整理UFS 文件系统
此过程假定文件系统已取消挂载或处于非活动状态。
成为超级用户或承担等效角色。
取消挂载UFS 文件系统。
# umount /mount-point
用整理选项检查UFS 文件系统。
# fsck-o p /dev/rdsk/device-name
通过将/mount-point 或/dev/rdsk/device-name 用作fsck 命令的参数,可以整理单独的文件
系统。
整理UFS 文件系统
以下示例说明如何整理/export/home 文件系统。
# fsck-o p /export/home
修复fsck 命令无法修复的UFS 文件系统。
fsck 命令运行若干遍,在稍后的一遍中更正的问题可能会暴露仅在前几遍中检测到的其他
问题。因此,有时需要一直运行fsck,直到它不再报告任何问题。这样做可确保找出并修
复所有错误。
1
2
3
示例22–2
以交互方式检查和修复UFS 文件系统
436 系统管理指南:设备和文件系统• 2006 年9 月
请注意fsck 命令所显示的信息。此信息可能有助于您解决问题。例如,消息可能会指出损
坏的目录。如果删除该目录,则可能发现fsck 命令不再报告任何错误。
如果fsck 命令仍无法修复文件系统,请尝试使用ff、clri 和ncheck 命令找出并修复问题。
有关如何使用这些命令的信息,请参见以下内容:
fsdb(1M)
ff(1M)
clri(1M)
ncheck(1M)
最后,可能需要重新创建文件系统,然后从备份介质恢复其内容。
有关恢复完整文件系统的信息,请参见第27 章。
如果无法完全修复文件系统,但可以将它挂载为只读,请尝试使用cp、tar 或cpio 命令从
文件系统检索所有数据或部分数据。
如果问题是由硬件磁盘错误导致的,则在重新创建和恢复文件系统之前,可能需要再次重
新格式化磁盘并对其重新分区。在更换磁盘设备之前,请检查设备电缆和连接器是否正常
工作。硬件错误通常会在使用不同的命令时一再显示同一错误。format 命令尝试修复磁盘
上的坏块。但是,如果磁盘损坏得太严重,则问题可能会一直存在,即使重新格式化后也
是如此。有关使用format 命令的信息,请参见format(1M)。有关安装新磁盘的信息,请参
见第13 章或第14 章。
恢复坏的超级块
当文件系统的超级块损坏时,必须恢复它。fsck 命令会在超级块已损坏的时候告知您。好
在文件系统中存储有超级块的多个副本。
可以使用fsck -o b 命令将超级块替换为其中一个副本,或使用fsck 的自动搜索备份超级块
功能(Solaris 10 6/06 发行版中的新增功能)。有关此功能的更多信息,请参见第325 页中的
“自动搜索备份超级块”。
有关超级块的更多信息,请参见第446 页中的“超级块”。
如果根(/) 文件系统中的超级块损坏,而且您无法恢复它,则您有以下两种选择:
重新安装系统。
从网络或本地CD 进行引导,然后尝试执行以下步骤。如果这些步骤失败,请使用
newfs 命令重新创建根(/) 文件系统,然后从备份副本恢复它。
恢复坏的超级块
第22 章• 检查UFS 文件系统一致性(任务) 437
如何恢复坏的超级块(仅限Solaris 10 6/06 发行
版)
此过程是Solaris 10 6/06 发行版的新增内容。如果文件系统具有坏的超级块,则fsck 会自动
计算备用超级块,如以下消息所示:
BAD SUPERBLOCK AT ...
LOOK FOR ALTERNATE SUPERBLOCKS WITH MKFS?
LOOK FOR ALTERNATE SUPERBLOCKS WITH NEWFS?
注意– 如果具有损坏的超级块的文件系统是使用newfs 或mkfs 自定义参数(例如ntrack 或
nsect)创建的,则使用fsck 自动计算的超级块执行修复过程可能会对文件系统造成无法恢
复的损坏。
如果文件系统是使用自定义参数创建的,并且它具有坏的超级块,则fsck 提供以下提示以
取消fsck 会话:
CANCEL FILESYSTEM CHECK?
如果此文件系统是使用自定义参数创建的,或者在此文件系统上运行fsck 可能会带来其他
问题,则应取消fsck 会话。
成为超级用户或承担等效角色。
检查怀疑有坏的超级块的文件系统。
# fsck/dev/rdsk /c0t1d0s0
** /dev/rdsk/c0t1d0s0
BAD SUPERBLOCK at ...
确定文件系统是如何创建的,然后选择以下项之一:
文件系统是使用newfs 命令创建的。
fsck 响应所有超级块都已损坏,而且必须使用通用超级块。按以下示例所示应答
fsck 提示。
1
2
3
恢复坏的超级块
438 系统管理指南:设备和文件系统• 2006 年9 月
注意– 如果文件系统是使用自定义参数创建的,则不要使用此选项。仅应在没有其他
方法时使用此选项。为从备份副本恢复文件系统做好准备。
# 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
SEARCH FOR ALTERNATE SUPERBLOCKS FAILED.
USE GENERIC SUPERBLOCK FROM MKFS? no
USE GENERIC SUPERBLOCK FROM NEWFS? yes
CALCULATED GENERIC SUPERBLOCK WITH 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
恢复坏的超级块
第22 章• 检查UFS 文件系统一致性(任务) 439
** 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
81files, 3609 used, 244678 free (6 frags, 30584 blocks, 0.0% fragmentation)
***** FILE SYSTEM WAS MODIFIED *****
fsck 响应它找到备用超级块,并显示与以下内容类似的消息:
FOUND ALTERNATE SUPERBLOCK 32 WITH NEWFS
在此fsck 方案中,按照第325 页中的“自动搜索备份超级块”所示的提示操作。
文件系统是使用mkfs 命令创建的。
fsck 响应所有超级块都已损坏,而且必须使用通用超级块。按以下示例所示应答
fsck 提示。
注意– 如果文件系统是使用自定义参数创建的,则不要使用此选项。仅应在没有其他
方法时使用此选项。为从备份副本恢复文件系统做好准备。
恢复坏的超级块
440 系统管理指南:设备和文件系统• 2006 年9 月
# 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
LOOK FOR ALTERNATE SUPERBLOCKS WITH NEWFS? no
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? no
** Last Mounted on
** Phase 1- Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3a - Check Connectivity
恢复坏的超级块
第22 章• 检查UFS 文件系统一致性(任务) 441
** 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)
fsck 响应它找到备用超级块,并显示与以下内容类似的消息:
FOUND ALTERNATE SUPERBLOCK 32 WITH MKFS
在此fsck 方案中,按照第325 页中的“自动搜索备份超级块”所示的提示操作。
应答提示以挽救和恢复超级块。
在看到以下消息时,无需重新运行fsck:
***** FILE SYSTEM WAS MODIFIED *****
但是,在出现此消息后重新运行fsck 并不会损害文件系统。此消息只是有关fsck 的更正操
作的信息。
如何恢复坏的超级块(Solaris 8、9 和10 发行版)
成为超级用户或承担等效角色。
确定根(/)、/usr 或/var 文件系统中是否存在坏的超级块,然后选择以下项之一:
如果根(/)、/usr 或/var 文件系统中存在坏的超级块,则从网络或本地连接的CD 进行
引导。
从本地连接的CD 进行引导时使用以下命令:
ok boot cdrom -s
4
1
2
恢复坏的超级块
442 系统管理指南:设备和文件系统• 2006 年9 月
从已设置引导服务器或安装服务器的网络进行引导时使用以下命令:
ok boot net -s
如果需要有关如何停止系统的帮助,请参见《System Administration Guide: Basic
Administration》中的第10 章,“Booting a System (Tasks)”或《System Administration
Guide: Basic Administration》中的第11 章,“GRUB Based Booting (Tasks)”。
如果根(/)、/usr、/var 文件系统中不存在坏的超级块,则转到损坏的文件系统之外的
目录,并取消挂载文件系统。
# umount /mount-point
注意– 务必在下一步中使用newfs -N。如果省略-N 选项,则会损坏文件系统中的所有数
据,并将它替换为空的文件系统。
使用newfs -N 命令显示超级块的值。
# newfs -N /dev/rdsk/device-name
除非文件系统是使用特殊参数创建的,否则命令输出将显示newfs 命令创建文件系统时用于
超级块副本的块编号。有关创建自定义文件系统的信息,请参见第448 页中的“自定义
UFS 文件系统参数”。
使用fsck 命令提供备用超级块。
# fsck-F ufs -o b=block-number /dev/rdsk/device-name
fsck 命令使用指定的备用超级块恢复主超级块。可以始终尝试将32 作为备用块。或者,使
用newfs -N 命令所示的任何备用块。
恢复坏的超级块(Solaris 8、9 和10 发行版)
以下示例说明如何恢复超级块副本5264。
# newfs -N /dev/rdsk/c0t3d0s7
/dev/rdsk/c0t3d0s7: 163944 sectors in 506 cylinders of 9 tracks, 36 sectors
83.9MB in 32 cyl groups (16 c/g, 2.65MB/g, 1216 i/g)
super-block backups (for fsck -b #) at:
32, 5264, 10496, 15728, 20960, 26192, 31424, 36656, 41888,
47120, 52352, 57584, 62816, 68048, 73280, 78512, 82976, 88208,
93440, 98672, 103904, 109136, 114368, 119600, 124832, 130064, 135296,
3
4
示例22–3
恢复坏的超级块
第22 章• 检查UFS 文件系统一致性(任务) 443
140528, 145760, 150992, 156224, 161456,
# fsck-F ufs -o b=5264 /dev/rdsk/c0t3d0s7
Alternate superblock location: 5264.
** /dev/rdsk/c0t3d0s7
** Last Mounted on
** Phase 1- Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
36 files, 867 used, 75712 free (16 frags, 9462 blocks, 0.0% fragmentation)
***** FILE SYSTEM WAS MODIFIED *****
#
fsck 命令的语法和选项
fsck 命令检查和修复文件系统中的不一致性问题。如果运行不带任何选项的fsck 命令,则
该命令会在进行修复之前以交互方式要求进行确认。此命令有四个选项。
命令和选项说明
fsck -m 检查是否可以挂载文件系统
fsck -y 接受所有修复
fsck -n 拒绝所有修复
fsck -o p 以非交互方式整理文件系统,解决所有预期的
(无害的)不一致性问题,但是在遇到严重问题
时退出
fsck 命令的语法和选项
444 系统管理指南:设备和文件系统• 2006 年9 月
UFS 文件系统(参考)
以下是本章中参考信息的列表。
第445 页中的“UFS 文件系统的柱面组结构”
第448 页中的“自定义UFS 文件系统参数”
UFS 文件系统的柱面组结构
创建UFS 文件系统时,磁盘片被分成若干个柱面组。柱面组由一个或多个连续的磁盘柱面
组成。柱面组又进一步分成若干个可寻址的块,以控制和组织柱面组中文件的结构。在文
件系统中,每种类型的块都具有特定的功能。UFS 文件系统具有以下四种类型的块。
块类型所存储信息的类型
引导块在引导系统时使用的信息
超级块有关文件系统的详细信息
Inode 有关文件的所有信息
存储块或数据块每个文件的数据
以下各节提供有关这些块的组织和功能的其他信息。
引导块
引导块存储在引导系统时使用的对象。如果文件系统不用于引导,则将引导块保留为空。
引导块仅出现在第一个柱面组(柱面组0)中,它是片中的前8KB。
23 第2 3 章
445
超级块
超级块存储有关文件系统的大多数信息,其中包括:
文件系统的大小和状态
标号,包括文件系统名称和卷名称
文件系统逻辑块的大小
上次更新的日期和时间
柱面组的大小
柱面组中的数据块数
摘要数据块
文件系统状态
最后一个挂载点的路径名
由于超级块包含关键数据,因此在创建文件系统时建立了多个超级块。
摘要信息块保留在超级块内。不复制摘要信息块,而是将其与主超级块组合在一起(通常
在柱面组0 中)。摘要块记录在使用文件系统时发生的更改。此外,摘要块列出文件系统
中的inode、目录、段和存储块的数目。
Inode
inode 包含有关文件的所有信息,但文件的名称(保存在目录中)除外。一个inode 为128
字节。inode 信息保存在柱面信息块中,它包含以下内容:
文件类型:
常规
目录
块特殊
字符特殊
FIFO,也称为命名管道
符号链接
套接字
其他inode-属性目录和阴影(用于ACL)
文件的模式(读-写-执行权限集)
指向文件的硬链接数
文件属主的用户ID
文件所属的组ID
文件中的字节数
包含15 个磁盘块地址的数组
上次访问文件的日期和时间
上次修改文件的日期和时间
更改inode 的日期和时间
UFS 文件系统的柱面组结构
446 系统管理指南:设备和文件系统• 2006 年9 月
包含15 个磁盘块地址(0 到14)的数组指向存储文件内容的数据块。前12 个地址是直接地
址。即,它们直接指向文件内容的前12 个逻辑存储块。如果文件大于12 个逻辑块,则第13
个地址指向间接块,该块包含直接块地址而不是文件内容。第14 个地址指向双重间接块,
该块包含间接块的地址。第15 个地址用于三重间接地址。下图描述从inode 开始这些地址
块之间的关系链。
图23–1UFS文件系统的地址链
数据块
数据块也称为存储块,它包含为文件系统分配的其余空间。这些数据块的大小是在创建文
件系统时确定的。缺省情况下,为数据块分配以下两种大小:8KB的逻辑块大小和1KB的
段大小(fragment size)。
对于常规文件,数据块包含文件的内容。对于目录,数据块包含提供目录中文件的inode 编
号和文件名的项。
空闲块
在柱面组图中,当前未用作inode、间接地址块或存储块的块被标记为空闲。此图还跟踪段
以防止段化降低磁盘的性能。
为使您了解典型的UFS 文件系统结构,下图说明普通UFS 文件系统中的一系列柱面组。