有时我们可能希望通过分离一个子镜像从未封装的 SVM 根磁盘启动。
术语解封装是指在保留其内容的同时使磁盘脱离 SVM 控制的方法。
这样做的原因可能有很多 用于打补丁或者在 SVM 下系统无法启动时(此过程在多用户环境中无法完成,需要我们在单用户模式下启动系统。
过程保持不变在这种情况下也是)
我们执行解封装的设置如下:
解包程序
让我们从解封装过程开始。
步骤 1:使用 metadetach 和 metaclear 分离和移除 c0t1d0 上的子镜像。
(如果子镜像已经被分离,不要重复 metadetach 命令;只需使用 metaclear 删除它们。
)
# metadetach d10 d12 d10: submirror d12 is detached # metadetach d20 d22 d20: submirror d22 is detached # metaclear d12 d22 d12: Concat/Stripe is cleared d22: Concat/Stripe is cleared # metastat -p d10 d20 d10 -m d11 1 d11 1 1 c0t0d0s0 d20 -m d21 1 d21 1 1 c0t0d0s1
步骤 2:从 c0t1d0 中删除状态数据库副本。
(这一步在技术上是不必要的,因为即使它不受 SVM 控制,副本也可以存在于该磁盘上。
我们将其包含在此处是为了删除 c0t1d0 上的所有 SVM 痕迹。
)
# metadb -d c0t1d0s7 # metadb flags first blk block count a m p luo 16 8192 /dev/dsk/c0t0d0s7 a p luo 8208 8192 /dev/dsk/c0t0d0s7 a p luo 16400 8192 /dev/dsk/c0t0d0s7
步骤 3:在 /mnt 上的 c0t1d0 上挂载根文件系统。
# mount /dev/dsk/c0t1d0s0 /mnt
步骤 4:编辑 /mnt/etc/system 以删除以下几行:
* Begin MDD root info (do not edit) rootdev:/pseudo/md@0:0,10,blk * End MDD root info (do not edit)
步骤 5:编辑 /mnt/etc/vfstab 以将条目从元设备更改为 Solaris 片:
Before: /dev/md/dsk/d20 - - swap - no /dev/md/dsk/d10 /dev/md/rdsk/d10 / ufs 1 no After: /dev/dsk/c0t1d0s1 - - swap - no /dev/dsk/c0t1d0s0 /dev/rdsk/c0t1d0s0 / ufs 1 no
步骤 6:使用“init 0”然后从 OBP 启动以重新启动系统。
由于已对挂载在 /mnt 上的根文件系统进行了更改,这将更新该磁盘的引导归档文件 /mnt/platform/sun4u/boot_archive。
# init 0 Creating boot_archive for /mnt updating /mnt/platform/sun4u/boot_archive … ok> boot mirrordisk
请参阅上面的“如何识别主引导磁盘和备用引导磁盘以识别altername rootdisk (mirrordisk)”一文。
第七步:验证系统从非镜像盘c0t1d0s0启动
# df -h Filesystem size used avail capacity Mounted on /dev/dsk/c0t1d0s0 29G 8.2G 20G 29% / # swap -l swapfile dev swaplo blocks free /dev/dsk/c0t1d0s1 32,33 16 8389632 8389632
设置
我们从一个系统开始,其中根文件系统和交换在 c0t0d0 和 c0t1d0 上进行镜像。
在此过程结束时,c0t0d0 将保持不变,仍将在 SVM 控制下启动,而 c0t1d0 将直接从切片启动。
镜像 SVM 配置下的两个磁盘是:
# echo | format Searching for disks...done AVAILABLE DISK SELECTIONS: 0. c0t0d0 [SUN36G cyl 24620 alt 2 hd 27 sec 107] /pci@1c,600000/scsi@2/sd@0,0 1. c0t1d0 [SUN36G cyl 24620 alt 2 hd 27 sec 107] /pci@1c,600000/scsi@2/sd@1,0
SVM 镜像的 /etc/fstab 条目是:
# cat /etc/vfstab #device device mount FS fsck mount mount #to mount to fsck point type pass at boot options … /dev/md/dsk/d20 - - swap - no /dev/md/dsk/d10 /dev/md/rdsk/d10 / ufs 1 no
我们有 6 个状态元数据库副本(每个磁盘 3 个):
# metadb flags first blk block count a m p luo 16 8192 /dev/dsk/c0t0d0s7 a p luo 8208 8192 /dev/dsk/c0t0d0s7 a p luo 16400 8192 /dev/dsk/c0t0d0s7 a p luo 16 8192 /dev/dsk/c0t1d0s7 a p luo 8208 8192 /dev/dsk/c0t1d0s7 a p luo 16400 8192 /dev/dsk/c0t1d0s7
根和交换分区及其 SVM 镜像:
# metastat -p d20 -m d21 d22 1 d21 1 1 c0t0d0s1 d22 1 1 c0t1d0s1 d10 -m d11 d12 1 d11 1 1 c0t0d0s0 d12 1 1 c0t1d0s0 # df -h / Filesystem size used avail capacity Mounted on /dev/md/dsk/d10 29G 8.2G 20G 29% / # swap -l swapfile dev swaplo blocks free /dev/md/dsk/d20 85,20 16 8389632 8389632
重新建立镜像
如果我们想在 SVM 下拥有镜像根目录的原始设置,请执行以下操作。
在此示例中,d10/d11 上的数据将被复制到 d12,而 d20/21 数据将分别复制到 d22.
首先,从 SVM 子镜像磁盘(别名为 rootdisk)启动:
ok> boot rootdisk (I assume that this is still a SVM root mirror which have one submirror active)
创建子镜像 d12(根)、d22(交换)并将它们分别添加到现有镜像 d10 和 d20:
# metainit d12 1 1 c0t1d0s0 d12: Concat/Stripe is setup # metainit d22 1 1 c0t1d0s1 d22: Concat/Stripe is setup # metattach d10 d12 d10: submirror d12 is attached # metattach d20 d22 d20: submirror d22 is attached
检查重新同步过程是否已开始:
# metastat d10 d20 | grep Resync (to monitor the resyncing process) State: Resyncing Resync in progress: 1 % done State: Resyncing State: Resyncing Resync in progress: 12 % done State: Resyncing
如果在步骤 2 中删除了元数据库,则将其添加回:
# metadb -a -c 3 c0t1d0s7