OCIブロックボリュームのアタッチ・リストア

はじめに

OCIのブロックボリュームのアタッチ・リストアを試す。

以下の順に進める。

・ブロックボリュームを作成、インスタンスにアタッチ ・lv・ファイルシステムを作成のうえ、OSからマウント ・ブロックボリュームのバックアップ・リストアを実行 ・元のブロックボリュームを一度OSからデタッチ ・リストアしたブロックボリュームをアタッチ

ブロックボリューム作成・インスタンスにアタッチ

コンソールからブロックボリュームを作成

作成できたら、「インスタンスのアタッチ」のボタンで 既存のインスタンスにブロックボリュームをアタッチする。 今回はiSCSI接続を使用する。

アタッチが完了後、OSでiSCSI接続のコマンド打鍵が必要。 コンソールの「iSCSIコマンドおよび情報」から必要な情報を確認して打鍵する。(画像を取り忘れたので添付はイメージのみ)

# まだ何も接続されていない状態
[root@my-instance ~]# iscsiadm --mode session
iscsiadm: No active sessions.


# コンソールで表示された3コマンドを打鍵し、作成したBVとiSCSI接続する
[root@my-instance ~]# sudo iscsiadm -m node -o new -T iqn.2015-12.com.oracleiaas:b95d1766-a8c6-490d-8c22-899a3330ce87 -p 169.254.2.2:3260
New iSCSI node [tcp:[hw=,ip=,net_if=,iscsi_if=default] 169.254.2.2,3260,-1 iqn.2015-12.com.oracleiaas:b95d1766-a8c6-490d-8c22-899a3330ce87] added

[root@my-instance ~]# sudo iscsiadm -m node -o update -T iqn.2015-12.com.oracleiaas:b95d1766-a8c6-490d-8c22-899a3330ce87 -n node.startup -v automatic

[root@my-instance ~]# sudo iscsiadm -m node -T iqn.2015-12.com.oracleiaas:b95d1766-a8c6-490d-8c22-899a3330ce87 -p 169.254.2.2:3260 -l
Logging in to [iface: default, target: iqn.2015-12.com.oracleiaas:b95d1766-a8c6-490d-8c22-899a3330ce87, portal: 169.254.2.2,3260] (multiple)
Login to [iface: default, target: iqn.2015-12.com.oracleiaas:b95d1766-a8c6-490d-8c22-899a3330ce87, portal: 169.254.2.2,3260] successful.

# iSCSI接続が認識された
[root@my-instance ~]# iscsiadm --mode session
tcp: [1] 169.254.2.2:3260,1 iqn.2015-12.com.oracleiaas:b95d1766-a8c6-490d-8c22-899a3330ce87 (non-flash)

lv・ファイルシステムを作成のうえ、OSからマウント

https://dev.classmethod.jp/articles/eetann-use-lvm-ebs/

上記を参考にlvmの設定を行う。 パーティション→pv→vg→lv→ファイルシステム→マウント の順に作業する

初期状態

iSCSI接続を行った最初の状態では、以下のような状態。

lsblkにはsdbとして表示される

# 
[root@my-instance ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   0   50G  0 disk
sda      8:0    0 46.6G  0 disk
├─sda2   8:2    0    8G  0 part [SWAP]
├─sda3   8:3    0 38.4G  0 part /
└─sda1   8:1    0  200M  0 part /boot/efi

parted で確認すると、unknownの状態。

[root@my-instance ~]# parted -l
モデル: ORACLE BlockVolume (scsi)
ディスク /dev/sda: 50.0GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了    サイズ  ファイルシステム  名前                  フラグ
 1    1049kB  211MB   210MB   fat16             EFI System Partition  boot
 2    211MB   8801MB  8590MB  linux-swap(v1)
 3    8801MB  50.0GB  41.2GB  xfs


エラー: /dev/sdb: ディスクラベルが認識できません。
モデル: ORACLE BlockVolume (scsi)
ディスク /dev/sdb: 53.7GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: unknown
ディスクフラグ:

パーティション作成

[root@my-instance ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.     # 何もないのでパーティションを作るよう促される

Command (? for help): ?        # コマンド確認
b       back up GPT data to a file
c       change a partition's name
d       delete a partition
i       show detailed information on a partition
l       list known partition types
n       add a new partition
o       create a new empty GUID partition table (GPT)
p       print the partition table
q       quit without saving changes
r       recovery and transformation options (experts only)
s       sort partitions
t       change a partition's type code
v       verify disk
w       write table to disk and exit
x       extra functionality (experts only)
?       print this menu

Command (? for help): n      # n : 新しいパーティションを作成
Partition number (1-128, default 1):
First sector (34-104857566, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-104857566, default = 104857566) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): L      # OS固有のHex Code入力を求められる。確認の上 8e00 (Linux LVM) を選択
0700 Microsoft basic data  0c01 Microsoft reserved    2700 Windows RE
3000 ONIE boot             3001 ONIE config           4100 PowerPC PReP boot
4200 Windows LDM data      4201 Windows LDM metadata  7501 IBM GPFS
7f00 ChromeOS kernel       7f01 ChromeOS root         7f02 ChromeOS reserved
8200 Linux swap            8300 Linux filesystem      8301 Linux reserved
8302 Linux /home           8400 Intel Rapid Start     8e00 Linux LVM
a500 FreeBSD disklabel     a501 FreeBSD boot          a502 FreeBSD swap
a503 FreeBSD UFS           a504 FreeBSD ZFS           a505 FreeBSD Vinum/RAID
a580 Midnight BSD data     a581 Midnight BSD boot     a582 Midnight BSD swap
a583 Midnight BSD UFS      a584 Midnight BSD ZFS      a585 Midnight BSD Vinum
a800 Apple UFS             a901 NetBSD swap           a902 NetBSD FFS
a903 NetBSD LFS            a904 NetBSD concatenated   a905 NetBSD encrypted
a906 NetBSD RAID           ab00 Apple boot            af00 Apple HFS/HFS+
af01 Apple RAID            af02 Apple RAID offline    af03 Apple label
af04 AppleTV recovery      af05 Apple Core Storage    be00 Solaris boot
bf00 Solaris root          bf01 Solaris /usr & Mac Z  bf02 Solaris swap
bf03 Solaris backup        bf04 Solaris /var          bf05 Solaris /home
bf06 Solaris alternate se  bf07 Solaris Reserved 1    bf08 Solaris Reserved 2
bf09 Solaris Reserved 3    bf0a Solaris Reserved 4    bf0b Solaris Reserved 5
c001 HP-UX data            c002 HP-UX service         ea00 Freedesktop $BOOT
eb00 Haiku BFS             ed00 Sony system partitio  ed01 Lenovo system partit
Press the <Enter> key to see more codes: 

Hex code or GUID (L to show codes, Enter = 8300): 8e00    # OS固有のHex Code入力を求められる。確認の上 8e00 (Linux LVM) を選択
Changed type of partition to 'Linux LVM'

Command (? for help): p       #  p : 情報表示。パーティションが作成された。
Disk /dev/sdb: 104857600 sectors, 50.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 6C169F02-9F66-4E80-A226-768DCE2974D9
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 104857566
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048       104857566   50.0 GiB    8E00  Linux LVM

Command (? for help): w     # w: write table to disk and  exit   この処理をもってパーティション作成完了となる?

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

パーティションを作成したことで、lsblkの表示にもsdb1の名前で表れるようになる。

[root@my-instance ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   0   50G  0 disk
└─sdb1   8:17   0   50G  0 part      #★先ほど作成したパーティション
sda      8:0    0 46.6G  0 disk
├─sda2   8:2    0    8G  0 part [SWAP]
├─sda3   8:3    0 38.4G  0 part /
└─sda1   8:1    0  200M  0 part /boot/efi

partedの表示にも、指定した通りlinux LVMとして認識される。

[root@my-instance ~]# parted /dev/sdb print
モデル: ORACLE BlockVolume (scsi)
ディスク /dev/sdb: 53.7GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了    サイズ  ファイルシステム  名前       フラグ
 1    1049kB  53.7GB  53.7GB                    Linux LVM  lvm

pv・vg・lvの作成

pv作成

[root@my-instance ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.

[root@my-instance ~]# pvs
  PV         VG Fmt  Attr PSize   PFree
  /dev/sdb1     lvm2 ---  <50.00g <50.00g

[root@my-instance ~]# pvdisplay
  "/dev/sdb1" is a new physical volume of "<50.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               <50.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               NYFPWF-ue2C-QAra-nL2Y-E5g5-a2xr-R8572M

vg作成

[root@my-instance ~]# vgcreate myvg1 /dev/sdb1
  Volume group "myvg1" successfully created

[root@my-instance ~]# vgs
  VG    #PV #LV #SN Attr   VSize   VFree
  myvg1   1   0   0 wz--n- <50.00g <50.00g

lv作成

[root@my-instance ~]# lvcreate --size 5G --name mylv1 myvg1
WARNING: ext4 signature detected on /dev/myvg1/mylv1 at offset 1080. Wipe it? [y/n]: y
  Wiping ext4 signature on /dev/myvg1/mylv1.
  Logical volume "mylv1" created.

[root@my-instance ~]# lvs
  LV    VG    Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv1 myvg1 -wi-a----- 5.00g

[root@my-instance ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/myvg1/mylv1
  LV Name                mylv1
  VG Name                myvg1
  LV UUID                XqEIvG-owlZ-lhoJ-M30g-7Uwd-hI6w-TQwhFC
  LV Write Access        read/write
  LV Creation host, time my-instance, 2024-12-30 13:17:51 +0900
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

ファイルシステム作成

[root@my-instance ~]# mkfs -t ext4 /dev/myvg1/mylv1
mke2fs 1.45.4 (23-Sep-2019)
Discarding device blocks: done
Creating filesystem with 1310720 4k blocks and 327680 inodes
Filesystem UUID: b6b2a0f7-1562-4211-8eea-618c559d96b4
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks):
done
Writing superblocks and filesystem accounting information: done

マウント

[root@my-instance ~]# df -h       #事前状態ではdfの結果に何も乗ってこない
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         294M     0  294M    0% /dev
tmpfs            335M   12K  335M    1% /dev/shm
tmpfs            335M   35M  301M   11% /run
tmpfs            335M     0  335M    0% /sys/fs/cgroup
/dev/sda3         39G   19G   20G   49% /
/dev/sda1        200M  7.4M  193M    4% /boot/efi
tmpfs             67M     0   67M    0% /run/user/1000
tmpfs             67M     0   67M    0% /run/user/993
overlay           39G   19G   20G   49% /var/lib/docker/overlay2/e58ec42d0354623fcf4abbb1cfec8a402619b988e5c6316037521c325ebc4611/merged
overlay           39G   19G   20G   49% /var/lib/docker/overlay2/0aab146f51b1f57f957bd4d000ead990c297ebc7753f6b3f986df1a43de7c6c8/merged

[root@my-instance ~]# mkdir /mountdir-for-mylv1    # マウントポイント用ディレクトリ作成

[root@my-instance ~]# vi /etc/fstab      # マウント設定を追加
[root@my-instance ~]# cat /etc/fstab
(略)
/dev/myvg1/mylv1 /mountdir-for-mylv1 ext4 defaults 0 0    #★viで追加した行

[root@my-instance ~]# mount -a

[root@my-instance ~]# df -h
ファイルシス            サイズ  使用  残り 使用% マウント位置
devtmpfs                  294M     0  294M    0% /dev
tmpfs                     335M   12K  335M    1% /dev/shm
tmpfs                     335M   35M  301M   11% /run
tmpfs                     335M     0  335M    0% /sys/fs/cgroup
/dev/sda3                  39G   19G   20G   49% /
/dev/sda1                 200M  7.4M  193M    4% /boot/efi
tmpfs                      67M     0   67M    0% /run/user/1000
tmpfs                      67M     0   67M    0% /run/user/993
overlay                    39G   19G   20G   49% /var/lib/docker/overlay2/e58ec42d0354623fcf4abbb1cfec8a402619b988e5c6316037521c325ebc4611/merged
overlay                    39G   19G   20G   49% /var/lib/docker/overlay2/0aab146f51b1f57f957bd4d000ead990c297ebc7753f6b3f986df1a43de7c6c8/merged
/dev/mapper/myvg1-mylv1   4.9G   24K  4.6G    1% /mountdir-for-mylv1        #★マウントできた

[root@my-instance mountdir-for-mylv1]# dd if=/dev/urandom of=/mountdir-for-mylv1/testfile bs=1M count=100      #★書き込み確認もOK
100+0 レコード入力
100+0 レコード出力
104857600 バイト (105 MB) コピーされました、 2.98914 秒、 35.1 MB/秒
[root@my-instance mountdir-for-mylv1]# ll
合計 102416
drwx------. 2 root root     16384 12月 30 13:19 lost+found
-rw-r--r--. 1 root root 104857600 12月 30 13:29 testfile

ブロックボリュームのバックアップ・リストアを実行

この断面で、ブロックボリュームのバックアップを取得・リストアを実行する。

コンソールから「手動バックアップの作成」を選択。

名前だけ決めて作成。

作成されたバックアップからリストアを実行。

ブロックボリュームのバックアップからリストアが作成された。

元のブロックボリュームを一度OSからデタッチ

リストアの確認として、この時点で、先ほど元のブロックボリューム上に作成したテストファイルは削除しておく。

[root@my-instance mountdir-for-mylv1]# rm testfile
rm: 通常ファイル `testfile' を削除しますか? y

元のブロックボリュームはいったんデタッチする。

デタッチしようとすると、事前に ・fstabからは抜いておくこと ・(アンマウントしておくこと) ・iscsiのデタッチのコマンドを打つこと が求められる。(画像を取り忘れたため表記はイメージのみ)

横着して、 ・(アンマウントしておくこと) ・iscsiのデタッチのコマンドを打つこと だけ実施したのち(以下)、「デタッチの続行」を押下。

[root@my-instance /]# umount /mountdir-for-mylv1  #アンマウント

[root@my-instance /]# iscsiadm --mode session
tcp: [1] 169.254.2.2:3260,1 iqn.2015-12.com.oracleiaas:b95d1766-a8c6-490d-8c22-899a3330ce87 (non-flash)

[root@my-instance /]# sudo iscsiadm -m node -T iqn.2015-12.com.oracleiaas:b95d1766-a8c6-490d-8c22-899a3330ce87 -p 169.254.2.2:3260 -u     # ociから言われたコマンドを実施
Logging out of session [sid: 1, target: iqn.2015-12.com.oracleiaas:b95d1766-a8c6-490d-8c22-899a3330ce87, portal: 169.254.2.2,3260]
Logout of [sid: 1, target: iqn.2015-12.com.oracleiaas:b95d1766-a8c6-490d-8c22-899a3330ce87, portal: 169.254.2.2,3260] successful.
[root@my-instance /]# sudo iscsiadm -m node -o delete -T iqn.2015-12.com.oracleiaas:b95d1766-a8c6-490d-8c22-899a3330ce87 -p 169.254.2.2:3260

[root@my-instance /]# iscsiadm --mode session    # iSCSI接続がデタッチされた
iscsiadm: No active sessions.

この時点でlsblkに表示されなくなる。(デバイスの接続を外したので当然)

[root@my-instance /]# pvs
[root@my-instance /]# vgs
[root@my-instance /]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0 46.6G  0 disk
├─sda2   8:2    0    8G  0 part [SWAP]
├─sda3   8:3    0 38.4G  0 part /
└─sda1   8:1    0  200M  0 part /boot/efi

リストアしたブロックボリュームをアタッチ

先ほどと同じ要領で、リストアしたブロックボリュームをインスタンスにアタッチする。 コンソールでアタッチの操作を実行後、コンソール上で指示される以下を打鍵する。

[root@my-instance /]# sudo iscsiadm -m node -o new -T iqn.2015-12.com.oracleiaas:7c079e04-c57a-4133-9bfb-fac5c65d2d12 -p 169.254.2.3:3260
New iSCSI node [tcp:[hw=,ip=,net_if=,iscsi_if=default] 169.254.2.3,3260,-1 iqn.2015-12.com.oracleiaas:7c079e04-c57a-4133-9bfb-fac5c65d2d12] added
[root@my-instance /]# sudo iscsiadm -m node -o update -T iqn.2015-12.com.oracleiaas:7c079e04-c57a-4133-9bfb-fac5c65d2d12 -n node.startup -v automatic
[root@my-instance /]# sudo iscsiadm -m node -T iqn.2015-12.com.oracleiaas:7c079e04-c57a-4133-9bfb-fac5c65d2d12 -p 169.254.2.3:3260 -l
Logging in to [iface: default, target: iqn.2015-12.com.oracleiaas:7c079e04-c57a-4133-9bfb-fac5c65d2d12, portal: 169.254.2.3,3260] (multiple)
Login to [iface: default, target: iqn.2015-12.com.oracleiaas:7c079e04-c57a-4133-9bfb-fac5c65d2d12, portal: 169.254.2.3,3260] successful.

この時点でpvs, lvs等の表示が復活する。 UUIDが以前と同じものであることに注意。これが同じだからか特に設定せずとも以前のvgの情報を思い出してくれる?

[root@my-instance /]# iscsiadm --mode session
tcp: [2] 169.254.2.3:3260,1 iqn.2015-12.com.oracleiaas:7c079e04-c57a-4133-9bfb-fac5c65d2d12 (non-flash)

[root@my-instance /]# pvs
  PV         VG    Fmt  Attr PSize   PFree
  /dev/sdc1  myvg1 lvm2 a--  <50.00g <45.00g

[root@my-instance /]# vgs
  VG    #PV #LV #SN Attr   VSize   VFree
  myvg1   1   1   0 wz--n- <50.00g <45.00g

[root@my-instance /]# lvs
  LV    VG    Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv1 myvg1 -wi-a----- 5.00g

[root@my-instance /]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/myvg1/mylv1
  LV Name                mylv1
  VG Name                myvg1
  LV UUID                XqEIvG-owlZ-lhoJ-M30g-7Uwd-hI6w-TQwhFC    #ブロックボリュームをリストアすると、UUIDは以前と同じものを引きつぐ
  LV Write Access        read/write
  LV Creation host, time my-instance, 2024-12-30 13:17:51 +0900
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

ただし、マウントには失敗している。前の情報が何かしら残ってしまっている?

[root@my-instance /]# df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         294M     0  294M    0% /dev
tmpfs            335M   12K  335M    1% /dev/shm
tmpfs            335M   35M  301M   11% /run
tmpfs            335M     0  335M    0% /sys/fs/cgroup
/dev/sda3         39G   19G   20G   48% /
/dev/sda1        200M  7.4M  193M    4% /boot/efi
tmpfs             67M     0   67M    0% /run/user/1000
tmpfs             67M     0   67M    0% /run/user/993
overlay           39G   19G   20G   48% /var/lib/docker/overlay2/e58ec42d0354623fcf4abbb1cfec8a402619b988e5c6316037521c325ebc4611/merged
overlay           39G   19G   20G   48% /var/lib/docker/overlay2/0aab146f51b1f57f957bd4d000ead990c297ebc7753f6b3f986df1a43de7c6c8/merged

[root@my-instance /]# mount -a
mount: wrong fs type, bad option, bad superblock on /dev/mapper/myvg1-mylv1,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

仕方ないのでコンソールからサーバをリブートしたところ解消。 リブート後は問題なくマウントできていた。

[opc@my-instance ~]$ df -h
ファイルシス            サイズ  使用  残り 使用% マウント位置
devtmpfs                  294M     0  294M    0% /dev
tmpfs                     335M     0  335M    0% /dev/shm
tmpfs                     335M  4.9M  330M    2% /run
tmpfs                     335M     0  335M    0% /sys/fs/cgroup
/dev/sda3                  39G   19G   20G   48% /
/dev/sda1                 200M  7.4M  193M    4% /boot/efi
/dev/mapper/myvg1-mylv1   4.9G  101M  4.5G    3% /mountdir-for-mylv1   #マウントできている
tmpfs                      67M     0   67M    0% /run/user/993
tmpfs                      67M     0   67M    0% /run/user/1000

おわりに

UUIDが同じだと・・違うと・・・という話が毎回もやもやするポイント。 次回は横着せずにfstabからも一度外してリブートする。