备份 Solaris ZFS root池
- 复制在 rpool 和所有文件系统中设置的属性,以及与其关联的卷:
# zpool get all rpool # zfs get -rHpe all rpool
- 保存此数据以备日后需要时参考。
现在使用合适的快照名称对 rpool 进行快照:
# zfs snapshot -r rpool@backup
这将创建所有后代的递归快照,包括 rpool/export、rpool/export/home 以及 rpool/dump 和 rpool/swap(卷)。
- swap 和 dump 不需要包含在备份中,所以它们应该被销毁:
# zfs destroy rpool/swap@backup # zfs destroy rpool/dump@backup
- 然后对于每个数据集,将数据发送到备份文件/位置。
确保备份位置有足够的容量,因为如果目的地变满(例如:多卷磁带),“zfs send”将失败。
在这个例子中,/backup 是一个来自一个合适的容量服务器的 NFS 挂载文件系统:
# zfs send -v rpool@backup > /backup/rpool.dump # zfs send -v rpool/ROOT@backup > /backup/rpool.ROOT.dump # zfs send -vR rpool/ROOT/s10u7@backup > /backup/rpool.ROOT.s10u7.dump # zfs send -v rpool/export@backup > /backup/rpool.export.dump # zfs send -v rpool/export/home@backup > /backup/rpool.export.home.dump
然后可以将这些转储文件存档到非易失性存储器以安全保存,例如:磁带。
以下过程可用于使用 Solaris 10 及更高版本中提供的工具备份和恢复 ZFS root池 (rpool)。
建议系统管理员熟悉此过程并在将其部署到生产环境之前尝试恢复。
在此过程中,假设root池将被称为“rpool”,这是安装期间给定的标准。
我们还将使用以下示例文件系统作为 rpoo 的一部分。
rpool rpool/ROOT rpool/ROOT/s10u7 rpool/export rpool/export/home
这可能需要根据作为 Solaris 安装的一部分创建的文件系统进行调整。
此外,它不考虑任何 Live Upgrade 创建的引导环境或者克隆的文件系统。
已决定单独发送每个文件系统,在可能的情况下,只需要从流文件中恢复一个文件系统。
恢复 Solaris ZFS root池
如果需要重建/恢复root池,请找到本文备份部分中创建的 zfs 流的已知良好副本,并确保这些副本随时可用。
为了恢复root池,首先从 Solaris 10 DVD 或者网络 (jumpstart) 引导到单用户模式。
根据引导的根文件系统是否可写,可能需要告诉 ZFS 使用挂载点的临时位置。
准备工作
在撰写本文时,root池必须:
- 存在于带有 SMI 磁盘标签的磁盘上
- 由单个切片组成,而不是整个磁盘(使用 cXtYdZs0 语法,而不是使用整个磁盘和 EFI 标签的 cXtYdZ)
- 确保使用与原始 rpool 相同的版本创建池。我们可以从 zpool upgrade version 输出中找到池版本。在 zpool create 命令中使用“-o version=[value]”。
- 在本例中,磁盘 c3t1d0s0 包含一个 SMI 标签,其中分片 0 使用了磁盘的全部容量。
相应地更改控制器和目标编号。
# zpool create -fo altroot=/var/tmp/rpool -o cachefile=/etc/zfs/zpool.cache -m legacy rpool c3t1d0s0
确保转储文件可供读取。
如果这些文件存在于磁带上,则可能的位置是 /dev/rmt/0n,但是在本示例中,通过从 NFS 服务器安装备份文件系统,可以使用转储文件。转储文件可用后,恢复构成root池的文件系统。
以正确的层次顺序恢复这些很重要:
# zfs receive -Fd rpool < /backup/rpool.dump # zfs receive -Fd rpool < /backup/rpool.ROOT.dump # zfs receive -Fd rpool < /backup/rpool.ROOT.s10u7.dump # zfs receive -Fd rpool < /backup/rpool.export.dump # zfs receive -Fd rpool < /backup/rpool.export.home.dump
这将恢复文件系统,但请记住,rpool 也会有一个转储和交换设备,由 zvol 组成。
我们需要手动创建交换和转储。
根据要恢复的系统的配置调整转储和交换卷的大小
- 现在要使磁盘 ZFS 可引导,必须在 SPARC 中安装引导块,在 x86 中安装正确的 GRUB,因此根据要恢复的平台选择以下之一:
# installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c3t1d0s0 (SPARC) # installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c3t1d0s0 (x86)
- 一旦安装了引导块,就需要在这个 rpool 中设置可引导的数据集/文件系统。
为此,请运行以下 zpool 命令(使 rpool/ROOT/s10u7 成为可引导数据集):
# zpool set bootfs=rpool/ROOT/s10u7 rpool
- 设置rpool 的failmode 属性以继续。
这与默认使用等待的“数据”zfs 池不同,因此正确设置它很重要:
# zpool set failmode=continue rpool
- 查看canmount是否设置为noauto,如果没有设置:
# zfs get canmount rpool/ROOT/s10u7 # zfs set canmount=noauto rpool/ROOT/s10u7
- 暂时禁用以下文件系统的 canmount 属性,以防止在设置 mountpoint 属性时挂载它们:
# zfs set canmount=noauto rpool # zfs set canmount=noauto rpool/export
- 为各种文件系统设置挂载点属性:
# zfs set mountpoint=/ rpool/ROOT/s10u7 # zfs set mountpoint=/rpool rpool
- 正确设置转储设备:
# dumpadm -d /dev/zvol/dsk/rpool/dump