第一部分:准备系统

  1. 任何时候进行重大系统更改时,明智的做法是将系统备份到磁带,即使我们将数据的磁盘副本放在一边。

  2. 收集 metastat -pmetadb -i的输出并将它们放在另一个系统上。
    在此过程中不会使用它们,但如果由于完全灾难而需要重建 Solaris Volume Manager 配置,这些输出将启用该功能。

  3. 分离位于 disk2 上的所有元设备片。
    为引导磁盘上的每个镜像元设备运行以下命令:

# metadetach [top level mirror] [sub mirror]

例如,如果 d0 是根切片的镜像,并且它包含 d1(在磁盘 1 上)和 d2(在磁盘 2 上),我们将运行“metadetach d0 d2”。
如果我们还有 d10,它是 /var 的镜像,带有子镜像 d11 和 d12,我们还可以运行 metadetach d10 d12
元设备 d2 和 d12 将与镜像分离,并将包含处于原始状态的系统副本。

  1. 继续进行系统更改。
    请注意,如果我们在此过程中需要处于单用户模式(例如安装补丁集时),建议一直到 ok 提示符,然后重新启动到单用户模式:
# init 0

确保从 disk1(SVM 中的活动磁盘)引导。
不要从与 SVM 镜像分离的 disk2 启动!

ok> boot -s

如果在系统更改过程中必须删除位于 disk1 上的元设备(如在 Solaris 升级的情况下),则需要在继续之前重新创建它们。
请参阅上面提到的 SVM 文档以获得这方面的帮助。

  1. 如果系统更改需要回滚,请跳过步骤 6 并按照本文档第二部分中的步骤操作。

  2. 更改成功并确认系统不需要恢复到其原始状态后,我们可以重新添加驻留在 disk2 上的所有元设备切片:

# metattach [top level mirror] [sub mirror]

继续步骤 3中的示例,我们将运行“metatach d0 d2”。
这将重新连接被搁置的子镜像,并将系统更改传播到镜像的两侧。
在此之后,无法再使用镜像返回到较旧的系统状态,因此请确保我们已准备就绪。

Solaris Volume Manager (SVM):如何使用镜像回滚系统更改

在许多情况下对系统进行重大更改,例如补丁集安装或者操作系统升级,如果出现问题,可以选择撤消这些更改并恢复到以前的系统状态会很好。

通过软件卷管理和一些准备,可以保留引导磁盘的临时副本并在需要时回滚到它。
启动盘需要镜像。

在下面的示例中,将被更新的磁盘是“disk1”,用于镜像它的磁盘是“disk2”。

www. On IT Road .com

第二部分:回滚更改

要在第 I 部分的步骤 2之后随时回滚到原始系统状态:

  1. 否则将其降到 ok 提示符
# init 0
  1. 将 Solaris CD 插入 CD 驱动器并引导至 cdrom:
ok> boot cdrom -s

当然,也可以从网络启动。

  1. 为 disk2 上的文件系统运行 fsck。
    请注意,交换分区不能(也不需要)被 fscked。

  2. 将disk2的根分区挂载到/a目录。
    例如,如果 disk2 是 c0t1d0 并且根在切片 0 上:

# mount /dev/dsk/c0t1d0s0 /a
  1. 在disk2 的根片上制作vfstab 和system 的副本。
# cd /a/etc
# cp vfstab vfstab.orig
# cp system system.orig
  1. 在/a/etc/vfstab 文件中,将系统元设备的行替换为disk2 上的底层分区。
    我们只需要更改 root (/) 和位于引导磁盘上的其他文件系统的行。
    例如,将行从:
/dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no

到:

/dev/dsk/c0t1d0s0 /dev/rdsk/c0t1d0s0 / ufs 1 no
  1. 编辑 /a/etc/system 文件,并删除“rootdev”行,这将类似于:
rootdev:/pseudo/md@0:0,0,blk

8、卸载disk2,回到ok提示符:

# cd /; umount /a
# init 0
  1. 启动到disk2.
    如果设置了别名,则可以直接输入 boot。
    我们可以在 ok 提示符下使用 devalias 命令查看配置了哪些设备别名。
    否则,我们必须输入设备的完整设备路径。

  2. 删除引导盘的旧顶级镜像。
    例如,如果 d0 过去以 root 身份挂载,d10 过去以 /var 身份挂载,而 d30 过去是交换空间,我们将执行以下操作:

# metaclear d0
# metaclear d10
# metaclear d30

此时,我们应该有一个从 disk2 上的底层 c#t#d#s# 分区启动的系统。
我们可以通过查看“df -k”的输出来确认这一点。
如果我们查看“metastat”输出,我们应该会看到 disk1 和 disk2 上的片的简单串联元设备,在它们之上没有构建镜像。

  1. 使用 disk2 上的元设备重新创建顶级镜像:
# metainit [top level mirror] -m [sub mirror]

例如,“metainit d0 -m d2”。
“metastat”命令现在应该显示当前作为根安装的切片(在本例中为 c0t1d0s0)已初始化为元设备 (d2),并且该元设备是只有一侧 (d0) 的镜像的一部分。

  1. 现在我们已准备好将 vfstab 和 /etc/system 改回,以便系统从包含原始系统状态的元设备启动。
    复制当前文件,例如cp /etc/system /etc/system.temp以防万一,然后将步骤 4中的 vfstab.orig 和 system.orig 作为活动的 vfstab 和系统文件复制回原位。

  2. 重新启动系统。

# init 6
  1. 现在我们可以重新添加磁盘 1 上的元设备,以便消除不需要的系统更改,并将磁盘 2 中保留的数据放在其位置。
    对于启动磁盘上的每个镜像,我们需要运行以下命令:
# metattach [top level mirror] [sub mirror]

例如,“metatach d0 d1”。
这将启动同步数据的过程,我们可以通过 metastat 命令监控进度。
完成后,系统应该恢复到原始状态。

日期:2020-09-17 00:15:14 来源:oir作者:oir