系统管理指南:设备和文件系统

恢复坏的超级块

当文件系统的超级块损坏时,必须恢复它。fsck 命令会在超级块已损坏的时候告知您。好在文件系统中存储有超级块的多个副本。

可以使用 fsck -o b 命令将超级块替换为其中一个副本,或使用 fsck 的自动搜索备份超级块功能(Solaris 10 6/06 发行版中的新增功能)。有关此功能的更多信息,请参见自动搜索备份超级块

有关超级块的更多信息,请参见超级块

如果根 (/) 文件系统中的超级块损坏,而且您无法恢复它,则您有以下两种选择:

Procedure如何恢复坏的超级块(仅限 Solaris 10 6/06 发行版)

此过程是 Solaris 10 6/06 发行版的新增内容。如果文件系统具有坏的超级块,则 fsck 会自动计算备用超级块,如以下消息所示:


BAD SUPERBLOCK AT ...



LOOK FOR ALTERNATE SUPERBLOCKS WITH MKFS? 

LOOK FOR ALTERNATE SUPERBLOCKS WITH NEWFS?

注意 – 注意 –

如果具有损坏的超级块的文件系统是使用 newfsmkfs 自定义参数(例如 ntracknsect)创建的,则使用 fsck 自动计算的超级块执行修复过程可能会对文件系统造成无法恢复的损坏。

如果文件系统是使用自定义参数创建的,并且它具有坏的超级块,则 fsck 提供以下提示以取消 fsck 会话:


CANCEL FILESYSTEM CHECK?

如果此文件系统是使用自定义参数创建的,或者在此文件系统上运行 fsck 可能会带来其他问题,则应取消 fsck 会话。


  1. 成为超级用户或承担等效角色。

  2. 检查怀疑有坏的超级块的文件系统。


    # fsck /dev/rdsk/c0t1d0s0
    
    
    
    ** /dev/rdsk/c0t1d0s0
    
    
    
    BAD SUPERBLOCK at ...
    
  3. 确定文件系统是如何创建的,然后选择以下项之一:

    • 文件系统是使用 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
        
        
        
        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
        
        
        
        ** 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 *****
      • fsck 响应它找到备用超级块,并显示与以下内容类似的消息:


        FOUND ALTERNATE SUPERBLOCK 32 WITH NEWFS

        在此 fsck 方案中,按照自动搜索备份超级块所示的提示操作。

    • 文件系统是使用 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
        
        
        
        
        
        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
        
        ** 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 方案中,按照自动搜索备份超级块所示的提示操作。

  4. 应答提示以挽救和恢复超级块。

    在看到以下消息时,无需重新运行 fsck


    ***** FILE SYSTEM WAS MODIFIED *****

    但是,在出现此消息后重新运行 fsck 并不会损害文件系统。此消息只是有关 fsck 的更正操作的信息。

Procedure如何恢复坏的超级块(Solaris 8、9 和 10 发行版)

  1. 成为超级用户或承担等效角色。

  2. 确定根 (/)、/usr/var 文件系统中是否存在坏的超级块,然后选择以下项之一:

  3. 使用 newfs -N 命令显示超级块的值。


    # newfs -N /dev/rdsk/device-name
    

    除非文件系统是使用特殊参数创建的,否则命令输出将显示 newfs 命令创建文件系统时用于超级块副本的块编号。有关创建自定义文件系统的信息,请参见自定义 UFS 文件系统参数

  4. 使用 fsck 命令提供备用超级块。


    # fsck -F ufs -o b=block-number /dev/rdsk/device-name
    

    fsck 命令使用指定的备用超级块恢复主超级块。可以始终尝试将 32 作为备用块。或者,使用 newfs -N 命令所示的任何备用块。


示例 22–3 恢复坏的超级块(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,

 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 *****

#