SVM:如何解封装root磁盘

有时我们可能希望通过分离一个子镜像从未封装的 SVM 根磁盘启动。
术语解封装是指在保留其内容的同时使磁盘脱离 SVM 控制的方法。
这样做的原因可能有很多 用于打补丁或者在 SVM 下系统无法启动时(此过程在多用户环境中无法完成,需要我们在单用户模式下启动系统。
过程保持不变在这种情况下也是)

我们执行解封装的设置如下:

www. On IT Road .com

解包程序

让我们从解封装过程开始。

步骤 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
日期:2020-09-17 00:15:25 来源:oir作者:oir