複数Portable Storage上で構築したLVM論理ボリュームの移行方法

# はじめに
IBMではClassic環境の仮想サーバーで利用可能な補助ストレージとしてPortable Storage Volume(PSV)があります。このストレージは仮想サーバー上に最大３つまで取り付けることが可能です。

PSVの特徴として仮想サーバー上にアタッチしてあるものを別の仮想サーバーへ移行できるように切り離すことができます。
しかし、PSVを移行する際に複数PSVでLVM論理ボリュームを構築していた場合、そのままデタッチしてしまうと論理ボリューム情報が失われてしまう可能性があります。
そのため本記事ではPSV移行時にLVM論理ボリュームを保存し、移行先で再び構築する方法を記載します。

手順として以下の記事を参考に作成しました。

https://qiita.com/harmegiddo/items/e3cb5f2c2be72f9bd8d1

# 作業手順

本記事で実施した作業内容は以下の通りです。

1. 論理ボリューム情報のエクスポート
1. PSVの付け替え
1. 論理ボリューム情報のインポート


## 使用する環境

本記事で使用する環境は以下の通りです。

- PSV移行前/後の仮想サーバー：Virtual Server for Classic(東京リージョン, OS:CentOS, 2Core, 4GB)２台
- LVM論理ボリューム構築済みのPSV：Portable SAN Storage10GB3台
  - 30GBのVolume Groupから15GB, 10GB, 4GBのLogical Volumeに分割

![スクリーンショット 2024-04-01 9.30.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/ee8b5acd-0b4a-da7f-4cc2-5ea42278a580.png)

本記事でのPV,LV,VGは以下の通りに名前をつけています。
- Pysical Volume - PV1:xvdc, PV2:xvde, PV3:xvdf
- Logical Volume - LV1:lv-15g, LV2:lv-10g, LV3:lv-5g
- Volume Group - example-vg
```:デバイス一覧
$ sudo lsblk
xvda                  202:0    0  25G  0 disk
├─xvda1               202:1    0   1G  0 part /boot
└─xvda2               202:2    0  24G  0 part /
xvdb                  202:16   0   2G  0 disk
└─xvdb1               202:17   0   2G  0 part
xvdc                  202:32   0  10G  0 disk
└─example--vg-lv--15g 253:0    0  15G  0 lvm
xvde                  202:64   0  10G  0 disk
├─example--vg-lv--15g 253:0    0  15G  0 lvm
├─example--vg-lv--10g 253:1    0  10G  0 lvm  /mnt
└─example--vg-lv--4g  253:2    0   4G  0 lvm
xvdf                  202:80   0  10G  0 disk
└─example--vg-lv--10g 253:1    0  10G  0 lvm  /mnt
xvdh                  202:112  0  64M  0 disk 
```

```:portable storage一覧
$ pvs
  PV         VG         Fmt  Attr PSize   PFree
  /dev/xvdc  example-vg lvm2 a--  <10.00g       0
  /dev/xvde  example-vg lvm2 a--  <10.00g 1012.00m
  /dev/xvdf  example-vg lvm2 a--  <10.00g       0
```

```:logical volume一覧
$ lvs
  LV     VG         Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv-10g example-vg -wi-ao---- 10.00g
  lv-15g example-vg -wi-a----- 15.00g
  lv-4g  example-vg -wi-a-----  4.00g
```
また、LVM論理ボリューム内にテストの為テキストファイルを保存しておきます。
```
$ cat /mnt/sample.txt
hello
```

## 1. 論理ボリューム情報のエクスポート

移行前にまずはアンマウントを実施します。
```
$ umount /dev/example-vg/lv-10g
$ lsblk
NAME                  MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
xvda                  202:0    0  25G  0 disk
├─xvda1               202:1    0   1G  0 part /boot
└─xvda2               202:2    0  24G  0 part /
xvdb                  202:16   0   2G  0 disk
└─xvdb1               202:17   0   2G  0 part
xvdc                  202:32   0  10G  0 disk
└─example--vg-lv--15g 253:0    0  15G  0 lvm
xvde                  202:64   0  10G  0 disk
├─example--vg-lv--15g 253:0    0  15G  0 lvm
├─example--vg-lv--10g 253:1    0  10G  0 lvm
└─example--vg-lv--4g  253:2    0   4G  0 lvm
xvdf                  202:80   0  10G  0 disk
└─example--vg-lv--10g 253:1    0  10G  0 lvm
xvdh                  202:112  0  64M  0 disk
```

続いてVGである```example-vg```の不活性化をします。
```
$ vgchange -a n example-vg
  0 logical volume(s) in volume group "example-vg" now active
$ lvs
  LV     VG         Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv-10g example-vg -wi------- 10.00g
  lv-15g example-vg -wi------- 15.00g
  lv-4g  example-vg -wi-------  4.00g
```
```lvs```で確認するとAttrの項目のaがなくなっている(活性ではない)ことが確認できます。

そして、VG情報のエクスポートを実施します。

```
$ vgexport example-vg
  Volume group "example-vg" successfully exported
$ pvscan
  PV /dev/xvdc    is in exported VG example-vg [<10.00 GiB / 0    free]
  PV /dev/xvde    is in exported VG example-vg [<10.00 GiB / 1012.00 MiB free]
  PV /dev/xvdf    is in exported VG example-vg [<10.00 GiB / 0    free]
```
確認のため、```pvscan```を実施するとVGがエクスポートされていることが確認できます。

## 2. PVSの付け替え
VGのエクスポートが完了したため、次にPVSを移行先のサーバーに付け替えます。
IBM Cloudのポータル画面の仮想サーバーの画面から**ストレージ**→**ポータブル・ストレージ**の右側のアクションメニューから**スワップ**を選択します。

![スクリーンショット_2024-04-01_9_22_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/7016f599-4ba0-586c-bee9-e33497f85f36.png)

スワップ先としてデバイス一覧が表示されるのでスワップしたいサーバーに対し、**スワップ**ボタンを選択します。

![スクリーンショット_2024-04-01_9_21_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/e2297f05-6dcb-faa9-3efa-4b9f1df79cf7.png)

数分待つとスワップが完了し、移行先のサーバーにportable storageが移行できていることが確認できます。

## 3. 論理ボリューム情報のインポート

最後に移行先のサーバーで論理ボリューム情報をインポートします。
はじめに移行先のサーバーでもLVMが認識できているかを確認します。
```
$ pvscan
  PV /dev/xvdc    is in exported VG example-vg [<10.00 GiB / 0    free]
  PV /dev/xvde    is in exported VG example-vg [<10.00 GiB / 1012.00 MiB free]
  PV /dev/xvdf    is in exported VG example-vg [<10.00 GiB / 0    free]
  Total: 3 [<29.99 GiB] / in use: 3 [<29.99 GiB] / in no VG: 0 [0   ]
```

VGのインポートを実行します。
```
$ vgimport example-vg
$ pvscan
  PV /dev/xvdc   VG example-vg   lvm2 [<10.00 GiB / 0    free]
  PV /dev/xvde   VG example-vg   lvm2 [<10.00 GiB / 1012.00 MiB free]
  PV /dev/xvdf   VG example-vg   lvm2 [<10.00 GiB / 0    free]
  Total: 3 [<29.99 GiB] / in use: 3 [<29.99 GiB] / in no VG: 0 [0   ]
```
VGの活性化を実施します。
```
$ lvchange --available y example-vg
$ lvscan 
  ACTIVE            '/dev/example-vg/lv-15g' [15.00 GiB] inherit
  ACTIVE            '/dev/example-vg/lv-10g' [10.00 GiB] inherit
  ACTIVE            '/dev/example-vg/lv-4g' [4.00 GiB] inherit
```
最後にマウントを実施し、保存したテキストファイルを確認します。
```
$ mount /dev/example-vg/lv-10g /mnt
$ lsblk
  NAME                  MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
  xvda                  202:0    0  25G  0 disk
  ├─xvda1               202:1    0   1G  0 part /boot
  └─xvda2               202:2    0  24G  0 part /
  xvdb                  202:16   0   2G  0 disk
  └─xvdb1               202:17   0   2G  0 part
  xvdc                  202:32   0  10G  0 disk
  └─example--vg-lv--15g 253:0    0  15G  0 lvm
  xvde                  202:64   0  10G  0 disk
  ├─example--vg-lv--15g 253:0    0  15G  0 lvm
  ├─example--vg-lv--10g 253:1    0  10G  0 lvm  /mnt
  └─example--vg-lv--4g  253:2    0   4G  0 lvm
  xvdf                  202:80   0  10G  0 disk
  └─example--vg-lv--10g 253:1    0  10G  0 lvm  /mnt
  xvdh                  202:112  0  64M  0 disk

$ cat /mnt/sample.txt
  hello
```
保存していたファイルが無事確認できました。
以上でLVM論理ボリュームの移行は完了です。