以下各节描述了如何执行下列任务:
由于以下原因,您可能需要替换根池中的磁盘:
根池太小,您想使用较大的磁盘替换较小的磁盘。
根池磁盘发生故障。在非冗余池中,如果磁盘发生故障导致系统无法引导,则必须在替换根池磁盘前从备用介质(如 CD 或网络)进行引导。
在镜像根池配置中,您可以尝试替换磁盘而不必从备用介质引导。可以使用 zpool replace 命令替换发生故障的磁盘。或者,如果有额外的磁盘,可以使用 zpool attach 命令。有关附加额外磁盘和分离根池磁盘的示例,请参见本节中的过程。
有些硬件要求您在尝试通过 zpool replace 操作替换故障磁盘之前使磁盘脱机并取消其配置。例如:
# zpool offline rpool c1t0d0s0 # cfgadm -c unconfigure c1::dsk/c1t0d0 <Physically remove failed disk c1t0d0> <Physically insert replacement disk c1t0d0> # cfgadm -c configure c1::dsk/c1t0d0 # zpool replace rpool c1t0d0s0 # zpool online rpool c1t0d0s0 # zpool status rpool <Let disk resilver before installing the boot blocks> SPARC# installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t0d0s0 x86# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t9d0s0 |
对于一些硬件,插入替代磁盘后不必使其联机并进行配置。
必须标识当前磁盘和新磁盘的引导设备路径名,以便从替换磁盘测试引导,而且如有必要,在替换磁盘发生故障时也可手动从现有磁盘引导。在以下过程的示例中,当前根池磁盘 (c1t10d0s0) 的路径名为:
/pci@8,700000/pci@3/scsi@5/sd@a,0 |
替换引导磁盘 c1t9d0s0 的路径名为:
/pci@8,700000/pci@3/scsi@5/sd@9,0 |
物理连接替换磁盘或新磁盘。
确认新磁盘具有 SMI 标签和分片 0。
有关对要用于根池的磁盘进行重新标记的信息,请参见以下站点:
http://www.solarisinternals.com/wiki/index.php/ZFS_Troubleshooting_Guide
将新磁盘连接到根池。
例如:
# zpool attach rpool c1t10d0s0 c1t9d0s0 |
确认根池状态。
例如:
# zpool status rpool pool: rpool state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scrub: resilver in progress, 25.47% done, 0h4m to go config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c1t10d0s0 ONLINE 0 0 0 c1t9d0s0 ONLINE 0 0 0 errors: No known data errors |
完成重新同步后,将引导块应用到新磁盘。
使用类似以下的语法:
SPARC:
# installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t9d0s0 |
x86:
# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t9d0s0 |
验证您是否可以从新磁盘引导。
例如,在基于 SPARC 的系统上,应使用类似以下的语法:
ok boot /pci@8,700000/pci@3/scsi@5/sd@9,0 |
如果系统从新磁盘引导,则分离旧磁盘。
例如:
# zpool detach rpool c1t10d0s0 |
通过使用 SPARC 引导 PROM 中的 eeprom 命令和 setenv 命令,将系统设置为从新磁盘自动引导,或重新配置 PC BIOS。
可以创建根池快照以便进行恢复。创建根池快照的最好方法是对根池执行递归快照。
下面的过程将创建递归根池快照,并将快照以文件的形式存储到远程系统上的池中。如果根池失败,可以使用 NFS 挂载远程数据集,快照文件可以放入重新创建的池中。或者,您也可以将根池快照以实际快照的形式存储到远程系统上的池中。从远程系统发送和接收快照比较复杂,因为在从 Solaris OS miniroot 引导要修复的系统时,您必须配置 ssh 或使用 rsh。
有关远程存储和恢复根池快照的信息和有关根池恢复的最新信息,请访问以下站点:
http://www.solarisinternals.com/wiki/index.php/ZFS_Troubleshooting_Guide
在根池恢复中,以文件或快照形式验证远程存储的快照是一个重要步骤。无论何种方法,都应按照常规重新创建快照,例如在池配置更改或 Solaris OS 升级时。
在以下过程中,系统从 zfsBE 引导环境引导。
在远程系统上创建池和文件系统以存储快照。
例如:
remote# zfs create rpool/snaps |
与本地系统共享文件系统。
例如:
remote# zfs set sharenfs='rw=local-system,root=local-system' rpool/snaps # share -@rpool/snaps /rpool/snaps sec=sys,rw=local-system,root=local-system "" |
创建根池的递归快照。
local# zfs snapshot -r rpool@0804 local# zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 6.17G 60.8G 98K /rpool rpool@0804 0 - 98K - rpool/ROOT 4.67G 60.8G 21K /rpool/ROOT rpool/ROOT@0804 0 - 21K - rpool/ROOT/zfsBE 4.67G 60.8G 4.67G / rpool/ROOT/zfsBE@0804 386K - 4.67G - rpool/dump 1.00G 60.8G 1.00G - rpool/dump@0804 0 - 1.00G - rpool/swap 517M 61.3G 16K - rpool/swap@0804 0 - 16K - |
将根池快照发送到远程系统。
例如:
local# zfs send -Rv rpool@0804 > /net/remote-system/rpool/snaps/rpool.0804 sending from @ to rpool@0804 sending from @ to rpool/swap@0804 sending from @ to rpool/ROOT@0804 sending from @ to rpool/ROOT/zfsBE@0804 sending from @ to rpool/dump@0804 |
在此过程中,假设下列条件存在:
无法恢复 ZFS 根池。
ZFS 根池快照存储在远程系统上并通过 NFS 共享。
在本地系统上执行所有步骤。
从 CD/DVD 或网络引导。
SPARC:选择以下引导方法之一:
ok boot net -s ok boot cdrom -s |
如果您未使用 -s 选项,则需要退出安装程序。
x86:选择用于从 DVD 或网络进行引导的选项。然后,退出安装程序。
挂载远程快照数据集。
例如:
# mount -F nfs remote-system:/rpool/snaps /mnt |
如果您尚未配置网络服务,则可能需要指定 remote-system 的 IP 地址。
如果根池磁盘被替换,并且不包含 ZFS 可用的磁盘标号,则必须对磁盘重新进行标号。
有关对磁盘进行重新标号的更多信息,请访问以下站点:
http://www.solarisinternals.com/wiki/index.php/ZFS_Troubleshooting_Guide
重新创建根池。
例如:
# zpool create -f -o failmode=continue -R /a -m legacy -o cachefile= /etc/zfs/zpool.cache rpool c1t1d0s0 |
恢复根池快照。
此步骤可能会花费一些时间。例如:
# cat /mnt/rpool.0804 | zfs receive -Fdu rpool |
使用 -u 选项表示 zfs receive 操作完成时不挂载恢复的归档文件。
验证根池数据集是否已恢复。
例如:
# zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 6.17G 60.8G 98K /a/rpool rpool@0804 0 - 98K - rpool/ROOT 4.67G 60.8G 21K /legacy rpool/ROOT@0804 0 - 21K - rpool/ROOT/zfsBE 4.67G 60.8G 4.67G /a rpool/ROOT/zfsBE@0804 398K - 4.67G - rpool/dump 1.00G 60.8G 1.00G - rpool/dump@0804 0 - 1.00G - rpool/swap 517M 61.3G 16K - rpool/swap@0804 0 - 16K - |
设置根池 BE 上的 bootfs 属性。
例如:
# zpool set bootfs=rpool/ROOT/zfsBE rpool |
在新磁盘上安装引导块。
SPARC:
# installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t1d0s0 |
x86:
# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t1d0s0 |
重新引导系统。
# init 6 |
此过程假设现有根池快照可用。在本例中,本地系统提供这些根池快照。
# zfs snapshot -r rpool@0804 # zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 6.17G 60.8G 98K /rpool rpool@0804 0 - 98K - rpool/ROOT 4.67G 60.8G 21K /rpool/ROOT rpool/ROOT@0804 0 - 21K - rpool/ROOT/zfsBE 4.67G 60.8G 4.67G / rpool/ROOT/zfsBE@0804 398K - 4.67G - rpool/dump 1.00G 60.8G 1.00G - rpool/dump@0804 0 - 1.00G - rpool/swap 517M 61.3G 16K - rpool/swap@0804 0 - 16K - |