Solaris Volume Manager 管理指南

Procedure如何从状态数据库副本不足中恢复

  1. 引导系统。

  2. 确定哪些状态数据库副本不可用。


    # metadb -i
    
  3. 如果已知有一个或多个磁盘不可用,请删除这些磁盘上的状态数据库副本。否则,请删除足够数量的错误的状态数据库副本(由 metadb 报告的标有 W、M、D、F 或 R 状态标志的数据库副本),以确保现有状态数据库副本中的大多数都没有错误。


    # metadb -d disk-slice
    

    提示 –

    带有大写状态标志的状态数据库副本有错误,带有小写状态标志的状态数据库副本可以正常工作。


  4. 验证副本是否已删除。


    # metadb
    
  5. 重新引导系统。


    # reboot
    
  6. 如有必要,请替换磁盘,正确格式化该磁盘,然后添加该磁盘所需的任何状态数据库副本。

    请按照创建状态数据库副本中的说明操作。

    在拥有替换磁盘之后,停止系统,替换出现故障的磁盘,然后再次重新引导系统。使用 format 命令或 fmthard 命令按照磁盘在出现故障之前的状态对磁盘进行分区。


示例 25–1 从过时的状态数据库副本中恢复

在以下示例中,包含七个副本的磁盘已经出现错误。因此,系统只有三个良好的副本。系统将崩溃,因而无法重新引导到多用户模式下。


panic[cpu0]/thread=70a41e00: md: state database problem



403238a8 md:mddb_commitrec_wrapper+6c (2, 1, 70a66ca0, 40323964, 70a66ca0, 3c)

  %l0-7: 0000000a 00000000 00000001 70bbcce0 70bbcd04 70995400 00000002 00000000

40323908 md:alloc_entry+c4 (70b00844, 1, 9, 0, 403239e4, ff00)

  %l0-7: 70b796a4 00000001 00000000 705064cc 70a66ca0 00000002 00000024 00000000

40323968 md:md_setdevname+2d4 (7003b988, 6, 0, 63, 70a71618, 10)

  %l0-7: 70a71620 00000000 705064cc 70b00844 00000010 00000000 00000000 00000000

403239f8 md:setnm_ioctl+134 (7003b968, 100003, 64, 0, 0, ffbffc00)

  %l0-7: 7003b988 00000000 70a71618 00000000 00000000 000225f0 00000000 00000000

40323a58 md:md_base_ioctl+9b4 (157ffff, 5605, ffbffa3c, 100003, 40323ba8, ff1b5470)

  %l0-7: ff3f2208 ff3f2138 ff3f26a0 00000000 00000000 00000064 ff1396e9 00000000

40323ad0 md:md_admin_ioctl+24 (157ffff, 5605, ffbffa3c, 100003, 40323ba8, 0)

  %l0-7: 00005605 ffbffa3c 00100003 0157ffff 0aa64245 00000000 7efefeff 81010100

40323b48 md:mdioctl+e4 (157ffff, 5605, ffbffa3c, 100003, 7016db60, 40323c7c)

  %l0-7: 0157ffff 00005605 ffbffa3c 00100003 0003ffff 70995598 70995570 0147c800

40323bb0 genunix:ioctl+1dc (3, 5605, ffbffa3c, fffffff8, ffffffe0, ffbffa65)

  %l0-7: 0114c57c 70937428 ff3f26a0 00000000 00000001 ff3b10d4 0aa64245 00000000



panic: 

stopped at      edd000d8:       ta      %icc,%g0 + 125

Type  'go' to resume



ok boot -s

Resetting ... 



Sun Ultra 5/10 UPA/PCI (UltraSPARC-IIi 270MHz), No Keyboard

OpenBoot 3.11, 128 MB memory installed, Serial #9841776.

Ethernet address 8:0:20:96:2c:70, Host ID: 80962c70.







Rebooting with command: boot -s                                       

Boot device: /pci@1f,0/pci@1,1/ide@3/disk@0,0:a  File and args: -s

SunOS Release 5.9 Version s81_39 64-bit



Copyright 1983-2001 Sun Microsystems, Inc.  All rights reserved.

configuring IPv4 interfaces: hme0.

Hostname: dodo



metainit: dodo: stale databases



Insufficient metadevice database replicas located.



Use metadb to delete databases which are broken.

Ignore any "Read-only file system" error messages.

Reboot the system when finished to reload the metadevice database.

After reboot, repair any broken database replicas which were deleted.



Type control-d to proceed with normal startup,

(or give root password for system maintenance): root-password

single-user privilege assigned to /dev/console.

Entering System Maintenance Mode



Jun  7 08:57:25 su: 'su root' succeeded for root on /dev/console

Sun Microsystems Inc.   SunOS 5.9       s81_39  May 2002

# metadb -i

        flags           first blk       block count

     a m  p  lu         16              8192            /dev/dsk/c0t0d0s7

     a    p  l          8208            8192            /dev/dsk/c0t0d0s7

     a    p  l          16400           8192            /dev/dsk/c0t0d0s7

    M     p             16              unknown         /dev/dsk/c1t1d0s0

    M     p             8208            unknown         /dev/dsk/c1t1d0s0

    M     p             16400           unknown         /dev/dsk/c1t1d0s0

    M     p             24592           unknown         /dev/dsk/c1t1d0s0

    M     p             32784           unknown         /dev/dsk/c1t1d0s0

    M     p             40976           unknown         /dev/dsk/c1t1d0s0

    M     p             49168           unknown         /dev/dsk/c1t1d0s0

# metadb -d c1t1d0s0

# metadb

        flags           first blk       block count

     a m  p  lu         16              8192            /dev/dsk/c0t0d0s7

     a    p  l          8208            8192            /dev/dsk/c0t0d0s7

     a    p  l          16400           8192            /dev/dsk/c0t0d0s7

#  

系统之所以会崩溃,是因为它无法再检查 /dev/dsk/c1t1d0s0 片上的状态数据库副本。该片位于出现故障的磁盘上或者该片已附加到出现故障的控制器。第一个 metadb - i 命令将该片上的副本标识为主块有问题。

当您删除过时的状态数据库副本时,根 (/) 文件系统是只读的。可以忽略所显示的 mddb.cf 错误消息。

此时,系统将重新正常工作,尽管它的状态数据库副本数目有可能比应有的少。如果卷使用已出现故障的存储器的一部分,则其状态同样为有故障的、有错误的或热备用的。这些问题应当立即解决。