[AIX] splitvg  コマンドの確認

#### はじめに

ミラーリングしたVG(ボリューム・グループ) を分割する AIX の splitvg コマンドの挙動を確認しました。


![スクリーンショット 2023-04-11 13.19.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/03886be1-d500-0fd6-e06e-ca591c8966ff.png)


[AIX : splitvg コマンド](https://www.ibm.com/docs/ja/aix/7.2?topic=s-splitvg-command)


---

#### 環境

AIX 7.2 TL3 SP3

```
# oslevel -s
7200-03-03-1914
```


---
#### ミラーリング環境作成

testvg1 にhdisk2 を追加して hdisk0 (testvg1) と hdisk2 のミラーリングを行います。

```
# lspv
hdisk0          00cc20e05a989b2e                    testvg1         active
hdisk1          00f6db0a6c7aece5                    rootvg          active
hdisk2          none                                None
```

extendvg コマンドで hdisk2 を testvg1 に追加。

```
# extendvg testvg1 hdisk2
0516-1254 extendvg: Changing the PVID in the ODM.
```

追加されたことを確認。

```
# lspv
hdisk0          00cc20e05a989b2e                    testvg1         active
hdisk1          00f6db0a6c7aece5                    rootvg          active
hdisk2          00cc1b506e201e4f                    testvg1         active
```

testvg1 のミラーリング実施。-s オプションで同期は行われていません。

```
# mirrorvg -s testvg1
0516-1804 chvg: The quorum change takes effect immediately.
```

tsetvg1 を確認。PPs は LPs の２倍に増えています。同期されていないため、open/stale 状態です。

```
# lsvg -l testvg1
testvg1:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
test1               jfs2       20      40      2    open/stale    /test1
loglv00             jfs2log    1       2       2    open/stale    N/A
```

queue depth を確認。

```
# lsattr -El hdisk2  | grep queue
queue_depth     20                                                  Queue DEPTH                      True+
```

syncvg で同期を実行。queue depth の半分以下の値を -P オプションに指定します。

```
# syncvg -P 10 -v testvg1
```

testvg1 を確認。

```
# lsvg -l testvg1
testvg1:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
test1               jfs2       20      40      2    open/syncd    /test1
loglv00             jfs2log    1       2       2    open/syncd    N/A
```

PPs が 2 倍となり、ミラーリング状態であることが確認できました。


参考：　[Power Systems AIX: FAQ集 - LVM -](https://www.ibm.com/support/pages/power-systems-aix-faq%E9%9B%86-lvm)


---

#### splitvg の実行

##### 確認①-1  splitvg -i オプションなしで実行

-i オプションをつけると 再結合(joinvg) ができなくなりますが、確認①では再結合可能を確認します。

[splitvg](https://www.ibm.com/docs/ja/aix/7.2?topic=s-splitvg-command)
> -i オプション
> ボリューム・グループのミラー・コピーを、オリジナルに再結合できない新規ボリューム・グループに分割します。


```
# splitvg testvg1
# echo $?
0
```

確認。vg00 が作成されました。


```
# lspv
hdisk0          00cc20e05a989b2e                    testvg1         active
hdisk1          00f6db0a6c7aece5                    rootvg          active
hdisk2          00cc1b506e201e4f                    vg00            active
```

testvg1 は PVs 2 の状態です。

```
# lsvg -l testvg1
testvg1:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
test1               jfs2       20      40      2    open/syncd    /test1
loglv00             jfs2log    1       2       2    open/syncd    N/A
```

vg00 は PVs 1。

```
# lsvg -l vg00
vg00:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
fstest1             jfs2       20      20      1    closed/syncd  /fs/test1
fsloglv00           jfs2log    1       1       1    closed/syncd  N/A
#
```

testvg1 では hdisk2 が snapshotpv として認識。


```
# lsvg -p testvg1
testvg1:
PV_NAME           PV STATE          TOTAL PPs   FREE PPs    FREE DISTRIBUTION
hdisk0            active            639         618         128..107..127..128..128
hdisk2            snapshotpv        127         106         26..04..25..25..26
```

```
# lsvg -p vg00
vg00:
PV_NAME           PV STATE          TOTAL PPs   FREE PPs    FREE DISTRIBUTION
hdisk2            active            127         106         26..04..25..25..26
```

testvg1 では SNAPSHOT VG として vg00 が表示。

```
# lsvg testvg1
VOLUME GROUP:       testvg1                  VG IDENTIFIER:  00cc1b5000004b00000001876e167f50
VG STATE:           active                   PP SIZE:        8 megabyte(s)
VG PERMISSION:      read/write               TOTAL PPs:      766 (6128 megabytes)
MAX LVs:            256                      FREE PPs:       724 (5792 megabytes)
LVs:                2                        USED PPs:       42 (336 megabytes)
OPEN LVs:           2                        QUORUM:         1 (Disabled)
TOTAL PVs:          2                        VG DESCRIPTORS: 2
STALE PVs:          1                        STALE PPs:      1
ACTIVE PVs:         1                        AUTO ON:        yes
MAX PPs per VG:     32512
MAX PPs per PV:     1016                     MAX PVs:        32
LTG size (Dynamic): 512 kilobyte(s)          AUTO SYNC:      no
HOT SPARE:          no                       BB POLICY:      relocatable
SNAPSHOT VG:        vg00
PV RESTRICTION:     none                     INFINITE RETRY: no
DISK BLOCK SIZE:    512                      CRITICAL VG:    no
FS SYNC OPTION:     no                       CRITICAL PVs:   no
```

vg00 では SNAPSHOT VG: yes が表示。

```
# lsvg vg00
VOLUME GROUP:       vg00                     VG IDENTIFIER:  00cc1b5000004b00000001876e31f010
VG STATE:           active                   PP SIZE:        8 megabyte(s)
VG PERMISSION:      read/write               TOTAL PPs:      127 (1016 megabytes)
MAX LVs:            256                      FREE PPs:       106 (848 megabytes)
LVs:                2                        USED PPs:       21 (168 megabytes)
OPEN LVs:           0                        QUORUM:         1 (Disabled)
TOTAL PVs:          1                        VG DESCRIPTORS: 2
STALE PVs:          0                        STALE PPs:      0
ACTIVE PVs:         1                        AUTO ON:        yes
MAX PPs per VG:     32512
MAX PPs per PV:     1016                     MAX PVs:        32
LTG size (Dynamic): 512 kilobyte(s)          AUTO SYNC:      no
HOT SPARE:          no                       BB POLICY:      relocatable
SNAPSHOT VG:        yes                      PRIMARY VG:     testvg1
PV RESTRICTION:     none                     INFINITE RETRY: no
DISK BLOCK SIZE:    512                      CRITICAL VG:    no
FS SYNC OPTION:     no                       CRITICAL PVs:   no
#
```


vg00 を使用可能にします。
testvg1 の test1 というLVは、vg00 では fstest1 というLV名、/fs/test1 というマウントポイントに置き換わっています。


```
# lsvg -l vg00
vg00:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
fstest1             jfs2       20      20      1    closed/syncd  /fs/test1
fsloglv00           jfs2log    1       1       1    closed/syncd  N/A
```

/fs/test1 をマウントしてみます。

```
# mount /fs/test1
Replaying log for /dev/fstest1.
```


問題なくマウントが完了。

```
# lsvg -l vg00
vg00:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
fstest1             jfs2       20      20      1    open/syncd    /fs/test1
fsloglv00           jfs2log    1       1       1    open/syncd    N/A
# ls -l /fs/test1
total 0
drwxr-xr-x    2 root     system          256 Apr 10 21:16 lost+found
-rw-r--r--    1 root     system            0 Apr 10 21:17 testtext
```

---

##### 確認①-2 testvg1 と vg00 のマウント先が相互に影響を及ぼさないかを確認

testvg1 のマウント・ポイントにある testtext ファイルを確認します。

```
# ls -l /test1/testtext
-rw-r--r--    1 root     system            0 Apr 10 21:17 testtext
```

testvg1 にマウントしている /test1 下のファイル /test1/testtext を編集。

```
# vi /test1/testtext
# ls -l /test1/testtext
-rw-r--r--    1 root     system            7 Apr 10 21:49 /test1/testtext
```

vg00 にマウントしている /fs/test1/testtext は変更されていないことが確認できました。

```
# ls -l /fs/test1
total 0
drwxr-xr-x    2 root     system          256 Apr 10 21:16 lost+found
-rw-r--r--    1 root     system            0 Apr 10 21:17 testtext
```

---

##### 確認①-3 joinvg を実行し作成された vg00 を元の testvg1 に戻す

joinvg を実行したところ、vg00 が open 状態のため失敗しました。

```
# joinvg testvg1
0516-012 : Logical volume must be closed.  If the logical
        volume contains a filesystem, the umount command will close
        the LV device.
0516-1402 joinvg: Unable to join the volume group.
```

vg00 の /fs/test1 をアンマウントします。

```
# umount /fs/test1
```

joinvg を実行。今度は成功しました。

参考：[joinvg](https://www.ibm.com/docs/ja/aix/7.2?topic=j-joinvg-command) コマンド


```
# joinvg testvg1
# echo $?
0
```

vg00 がなくなっています。

```
# lsvg
rootvg
testvg1
```

```
# lspv
hdisk0          00cc20e05a989b2e                    testvg1         active
hdisk1          00f6db0a6c7aece5                    rootvg          active
hdisk2          00cc1b506e201e4f                    testvg1         active
```

testvg1 は最初のミラーリング状態に戻っています。

```
# lsvg -l testvg1
testvg1:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
test1               jfs2       20      40      2    open/syncd    /test1
loglv00             jfs2log    1       2       2    open/syncd    N/A
```

SNAPSHOT VG の表記もなくなっています。

```
# lsvg testvg1
VOLUME GROUP:       testvg1                  VG IDENTIFIER:  00cc1b5000004b00000001876e167f50
VG STATE:           active                   PP SIZE:        8 megabyte(s)
VG PERMISSION:      read/write               TOTAL PPs:      766 (6128 megabytes)
MAX LVs:            256                      FREE PPs:       724 (5792 megabytes)
LVs:                2                        USED PPs:       42 (336 megabytes)
OPEN LVs:           2                        QUORUM:         1 (Disabled)
TOTAL PVs:          2                        VG DESCRIPTORS: 3
STALE PVs:          0                        STALE PPs:      0
ACTIVE PVs:         2                        AUTO ON:        yes
MAX PPs per VG:     32512
MAX PPs per PV:     1016                     MAX PVs:        32
LTG size (Dynamic): 512 kilobyte(s)          AUTO SYNC:      no
HOT SPARE:          no                       BB POLICY:      relocatable
PV RESTRICTION:     none                     INFINITE RETRY: no
DISK BLOCK SIZE:    512                      CRITICAL VG:    no
FS SYNC OPTION:     no                       CRITICAL PVs:   no
```


joinvg 前は /fs/test1/testtext と /test1/testtext は中身が異なる不整合な状態でした。
joinvg 後を確認すると、元の testvg1 で使用していた /test1/testtext の状態でした。
primary vg (testvg1) の内容が同期される挙動の様子です。

```
# ls -l /test1

total 8
drwxr-xr-x    2 root     system          256 Apr 10 21:16 lost+found
-rw-r--r--    1 root     system            7 Apr 10 22:01 testtext
```

---

##### 確認②-1 splitvg -i オプションあり


testvg1 を newvg という名前の vg に分割します。
splitvg の -i オプションを実施すると joinvg は実行できず、新たな独立した vg として認識されます。


```
# lspv
hdisk0          00cc20e05a989b2e                    testvg1         active
hdisk1          00f6db0a6c7aece5                    rootvg          active
hdisk2          00cc1b506e201e4f                    testvg1         active
```

実行。

```
# splitvg -y newvg -i testvg1
```

作成確認。

```
# lspv
hdisk0          00cc20e05a989b2e                    testvg1         active
hdisk1          00f6db0a6c7aece5                    rootvg          active
hdisk2          00cc1b506e201e4f                    newvg           active
```

```
# lsvg testvg1
VOLUME GROUP:       testvg1                  VG IDENTIFIER:  00cc1b5000004b00000001876e167f50
VG STATE:           active                   PP SIZE:        8 megabyte(s)
VG PERMISSION:      read/write               TOTAL PPs:      639 (5112 megabytes)
MAX LVs:            256                      FREE PPs:       618 (4944 megabytes)
LVs:                2                        USED PPs:       21 (168 megabytes)
OPEN LVs:           2                        QUORUM:         1 (Disabled)
TOTAL PVs:          1                        VG DESCRIPTORS: 2
STALE PVs:          0                        STALE PPs:      0
ACTIVE PVs:         1                        AUTO ON:        yes
MAX PPs per VG:     32512
MAX PPs per PV:     1016                     MAX PVs:        32
LTG size (Dynamic): 512 kilobyte(s)          AUTO SYNC:      no
HOT SPARE:          no                       BB POLICY:      relocatable
PV RESTRICTION:     none                     INFINITE RETRY: no
DISK BLOCK SIZE:    512                      CRITICAL VG:    no
```

SNAPSHOT VG の表記はありません。

```
# lsvg newvg
VOLUME GROUP:       newvg                    VG IDENTIFIER:  00cc1b5000004b00000001876e515ce5
VG STATE:           active                   PP SIZE:        8 megabyte(s)
VG PERMISSION:      read/write               TOTAL PPs:      127 (1016 megabytes)
MAX LVs:            256                      FREE PPs:       106 (848 megabytes)
LVs:                2                        USED PPs:       21 (168 megabytes)
OPEN LVs:           0                        QUORUM:         1 (Disabled)
TOTAL PVs:          1                        VG DESCRIPTORS: 2
STALE PVs:          0                        STALE PPs:      0
ACTIVE PVs:         1                        AUTO ON:        yes
MAX PPs per VG:     32512
MAX PPs per PV:     1016                     MAX PVs:        32
LTG size (Dynamic): 512 kilobyte(s)          AUTO SYNC:      no
HOT SPARE:          no                       BB POLICY:      relocatable
PV RESTRICTION:     none                     INFINITE RETRY: no
DISK BLOCK SIZE:    512                      CRITICAL VG:    no
FS SYNC OPTION:     no                       CRITICAL PVs:   no
```

```
# lsvg -p testvg1
testvg1:
PV_NAME           PV STATE          TOTAL PPs   FREE PPs    FREE DISTRIBUTION
hdisk0            active            639         618         128..107..127..128..128
```

snapshotpv の表記もありません。


```
# lsvg -p newvg
newvg:
PV_NAME           PV STATE          TOTAL PPs   FREE PPs    FREE DISTRIBUTION
hdisk2            active            127         106         26..04..25..25..26
```

LV を確認。

```
# lsvg -l testvg1
testvg1:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
test1               jfs2       20      20      1    open/syncd    /test1
loglv00             jfs2log    1       1       1    open/syncd    N/A
```

newvg は fstest1 のLVが定義されていることを確認。

```
# lsvg -l newvg
newvg:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
fstest1             jfs2       20      20      1    closed/syncd  /fs/test1
fsloglv00           jfs2log    1       1       1    closed/syncd  N/A
```

---

##### 確認②-2 testvg1 と newvg のマウント先が相互に影響を及ぼさないかを確認


newvg のLV fstest1 をマウントします。

```
# mount /fs/test1
Replaying log for /dev/fstest1.
```


LV名、マウント・ポイントは変更されていますが、testvg1 と同じ中身です。

```
# ls -l /fs/test1
total 8
drwxr-xr-x    2 root     system          256 Apr 10 21:16 lost+found
-rw-r--r--    1 root     system            7 Apr 10 22:01 testtext
```

newvg の /fs/test1/testtext を編集しても、testvg1 の /test1/testtext には影響は及ぼされておらず、相互独立していることが確認できます。

```
# cat /dev/null > /fs/test1/testtext
# ls -l /fs/test1/testtext
-rw-r--r--    1 root     system            0 Apr 10 22:29 /fs/test1/testtext
# ls -l /test1/testtext
-rw-r--r--    1 root     system            7 Apr 10 22:01 /test1/testtext
#
```

---

#### おわりに



新しく分割されたvgをexport してディスク削除、別のVMに認識させて VG インポートなどを実施して、別VMへ移行させるという方法を検討することが可能です。
(LV名、マウント・ポイントの修正を行うことで元のVGと同様に使用することも可能です。)


参考：
[Using splitvg in AIX to make a copy of a volume group](https://www.ibm.com/support/pages/node/670103)



以上です。