はじめに
Oracle Cloud の勉強の一環で、公式のチュートリアルを基に進めていきます。公式のチュートリアルでは日本語、かつ、GUI操作の内容となっています。わかりやすく書かれているので、基本はこちらを参照していただけるとよいと思います。
このQiitaの記事は、上記のチュートリアルを CLI であえて実施した備忘録として書きます。
CLI の理由は、GUIと比べて再現性や再実行性が高いのと、なんとなくかっこいいから
今回のテーマ
Block Volume を instance に接続
https://community.oracle.com/docs/DOC-1019345
前提作業
oci cliの導入
oci cli と jq コマンドを使用可能なこと。次のQiita記事で導入した手順を書いています
https://qiita.com/sugimount/items/63a8cfe1163030ae8804
Block Volume の作成
以下のコマンドで Block Volume を作成します
oci bv volume create --display-name tutorial_volume1 --size-in-gbs 50 --availability-domain AJtg:US-ASHBURN-AD-1
作成した Block Volume の OCID を取得して変数に設定します
set volume_ocid (oci bv volume list --display-name tutorial_volume1 | jq -r '.data[0].id')
Volumeの接続タイプについて
Block Volume を Instance に接続するときに、2個の接続Type を選択できます
- iSCSI方式
- device path 無し
- device path 有り
- 準仮想化方式
- device path 無し
- device path 有り
iSCSIは設定が若干面倒ですが、パフォーマンスが良いと記載されているので、基本的にはこちらを選択するのが良いのかなと思います。
また、 「device path 無し」パターンは fstabの指定がめんどくさいので、基本的にはdevice path 有りでアタッチするのが良いと思います。
※ Imageのバージョンや構成によってdevice path が使用できない場合があるので注意
パターン1 iSCSI方式 + device path無し
Block Volume を Instance へ接続(iSCSI)
iSCSIに接続する前の状態で、BlockDeviceの状態を確認します
[opc@ins-oralinux-1 ~]$ lsblk --pairs
NAME="sda" MAJ:MIN="8:0" RM="0" SIZE="46.6G" RO="0" TYPE="disk" MOUNTPOINT=""
NAME="sda2" MAJ:MIN="8:2" RM="0" SIZE="8G" RO="0" TYPE="part" MOUNTPOINT="[SWAP]"
NAME="sda3" MAJ:MIN="8:3" RM="0" SIZE="38.4G" RO="0" TYPE="part" MOUNTPOINT="/"
NAME="sda1" MAJ:MIN="8:1" RM="0" SIZE="200M" RO="0" TYPE="part" MOUNTPOINT="/boot/efi"
[opc@ins-oralinux-1 ~]$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
|-sda2 swap 10f7b32d-47ad-4fa1-96ea-2e38bef56f17 [SWAP]
|-sda3 xfs 5dfe1823-ab77-4d85-a0e9-3c4602c5f518 /
`-sda1 vfat 4A01-26AE /boot/efi
[opc@ins-oralinux-1 ~]$ lsblk -tS
NAME ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE RA WSAME NAME HCTL TYPE VENDOR MODEL REV TRAN
sda 0 4096 1048576 4096 512 1 mq-deadline 256 128 32M sda 2:0:0:1 disk ORACLE BlockVolume 1.0
次に、前回作成したInstance の OCID を取得します
set instance1_ocid (oci compute instance list --display-name ins_oralinux_1 --lifecycle-state RUNNING | jq -r '.data[0].id')
Instance に iSCSI方式で volume を接続します (OCI上で設定のみ。実際にはまだ接続されていない)
oci compute volume-attachment attach --instance-id $instance1_ocid --type iscsi --volume-id $volume_ocid --display-name turorial-attach-iscsi --is-read-only false
OCIの以下コマンドを実行すると、iSCSI接続に必要な情報が表示されます
> oci compute volume-attachment get --volume-attachment-id ocid1.volumeattachment.oc1.iad.abuwcljtlfcq7ptzrlfqii5vwrzhponit6ragvqh6h42zsy56q4t3c4sdx6q
{
"data": {
"attachment-type": "iscsi",
"availability-domain": "AJtg:US-ASHBURN-AD-1",
"chap-secret": null,
"chap-username": null,
"compartment-id": "secret",
"device": null,
"display-name": "turorial-attach-iscsi",
"id": "ocid1.volumeattachment.oc1.iad.abuwcljtlfcq7ptzrlfqii5vwrzhponit6ragvqh6h42zsy56q4t3c4sdx6q",
"instance-id": "ocid1.instance.oc1.iad.abuwcljtdvomlbvcqhgkj4t7wbwuwbi5enafwg62zoifemtbvwbpfjsmyavq",
"ipv4": "169.254.2.2", <---これ
"iqn": "iqn.2015-12.com.oracleiaas:4314905c-7fa9-4514-b520-ceded0a5310a", <---これ
"is-pv-encryption-in-transit-enabled": false,
"is-read-only": false,
"lifecycle-state": "ATTACHED",
"port": 3260, <---これ
"time-created": "2019-02-03T16:53:34.880000+00:00",
"volume-id": "ocid1.volume.oc1.iad.abuwcljt72zzqmi2pozqgpdoj33nefjooqygqvotviyzmoae774rkulpplbq"
},
"etag": "6cea6868b4565775dfba9efd1e2f942687d5cd905bf976033a5f213850029a45"
}
なお、上記コマンドから iscsiadm のコマンドを生成するのは面倒なので、OCIのコンソール画面からコマンドをコピペすることが出来ます
# iSCSI ターゲットを新たに定義します
sudo iscsiadm -m node -o new -T iqn.2015-12.com.oracleiaas:4314905c-7fa9-4514-b520-ceded0a5310a -p 169.254.2.2:3260
# Instance再起動時に自動的にターゲットを構成するように設定
sudo iscsiadm -m node -o update -T iqn.2015-12.com.oracleiaas:4314905c-7fa9-4514-b520-ceded0a5310a -n node.startup -v automatic
# iSCSIのターゲットにlogin
sudo iscsiadm -m node -T iqn.2015-12.com.oracleiaas:4314905c-7fa9-4514-b520-ceded0a5310a -p 169.254.2.2:3260 -l
実行例
[opc@ins-oralinux-1 ~]$ sudo iscsiadm -m node -o new -T iqn.2015-12.com.oracleiaas:4314905c-7fa9-4514-b520-ceded0a5310a -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:4314905c-7fa9-4514-b520-ceded0a5310a] added
[opc@ins-oralinux-1 ~]$ sudo iscsiadm -m node -o update -T iqn.2015-12.com.oracleiaas:4314905c-7fa9-4514-b520-ceded0a5310a -n node.startup -v automatic
[opc@ins-oralinux-1 ~]$
[opc@ins-oralinux-1 ~]$ sudo iscsiadm -m node -T iqn.2015-12.com.oracleiaas:4314905c-7fa9-4514-b520-ceded0a5310a -p 169.254.2.2:3260 -l
Logging in to [iface: default, target: iqn.2015-12.com.oracleiaas:4314905c-7fa9-4514-b520-ceded0a5310a, portal: 169.254.2.2,3260] (multiple)
Login to [iface: default, target: iqn.2015-12.com.oracleiaas:4314905c-7fa9-4514-b520-ceded0a5310a, portal: 169.254.2.2,3260] successful.
実行後の Block Device の状況を確認すると、正常に iSCSI 経由で50GBの /dev/sdb
を認識していることを確認できます。再起動後も正常に認識しています
[opc@ins-oralinux-1 ~]$ lsblk --pairs
NAME="sdb" MAJ:MIN="8:16" RM="0" SIZE="50G" RO="0" TYPE="disk" MOUNTPOINT=""
NAME="sda" MAJ:MIN="8:0" RM="0" SIZE="46.6G" RO="0" TYPE="disk" MOUNTPOINT=""
NAME="sda2" MAJ:MIN="8:2" RM="0" SIZE="8G" RO="0" TYPE="part" MOUNTPOINT="[SWAP]"
NAME="sda3" MAJ:MIN="8:3" RM="0" SIZE="38.4G" RO="0" TYPE="part" MOUNTPOINT="/"
NAME="sda1" MAJ:MIN="8:1" RM="0" SIZE="200M" RO="0" TYPE="part" MOUNTPOINT="/boot/efi"
[opc@ins-oralinux-1 ~]$
[opc@ins-oralinux-1 ~]$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sdb
sda
|-sda2 swap 10f7b32d-47ad-4fa1-96ea-2e38bef56f17 [SWAP]
|-sda3 xfs 5dfe1823-ab77-4d85-a0e9-3c4602c5f518 /
`-sda1 vfat 4A01-26AE /boot/efi
[opc@ins-oralinux-1 ~]$
[opc@ins-oralinux-1 ~]$ lsblk -tS
NAME ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE RA WSAME NAME HCTL TYPE VENDOR MODEL REV TRAN
sdb 0 4096 1048576 4096 512 1 deadline 128 128 32M sdb 3:0:0:1 disk ORACLE BlockVolume 1.0 iscsi
sda 0 4096 1048576 4096 512 1 mq-deadline 256 128 32M sda 2:0:0:1 disk ORACLE BlockVolume 1.0
[opc@ins-oralinux-1 ~]$
Block Device(iSCSI) を使用してマウント
まずは、id を使用した device のpath を確認します。これを確認する理由は、 /dev/sdX
のデバイスファイルは、再起動をトリガーにタイミングによって認識順が変化するため、再起動しても変化しないid を意識して利用したほうがよいからです。 /dev/sdX
を指定してfstabを構成してしまうと、再起動するとデータが見えなくなることがあります。怖い
[opc@ins-oralinux-1 by-id]$ ls -la /dev/disk/by-id
total 0
drwxr-xr-x. 2 root root 240 Feb 3 19:13 .
drwxr-xr-x. 7 root root 140 Feb 3 19:13 ..
lrwxrwxrwx. 1 root root 9 Feb 3 19:13 scsi-3606ae1fbd32f42cb832249ed3a5f2e21 -> ../../sda
lrwxrwxrwx. 1 root root 10 Feb 3 19:13 scsi-3606ae1fbd32f42cb832249ed3a5f2e21-part1 -> ../../sda1
lrwxrwxrwx. 1 root root 10 Feb 3 19:13 scsi-3606ae1fbd32f42cb832249ed3a5f2e21-part2 -> ../../sda2
lrwxrwxrwx. 1 root root 10 Feb 3 19:13 scsi-3606ae1fbd32f42cb832249ed3a5f2e21-part3 -> ../../sda3
lrwxrwxrwx. 1 root root 9 Feb 3 19:13 scsi-3608c0ac31e5d4aceb9badd44663871ac -> ../../sdb
lrwxrwxrwx. 1 root root 9 Feb 3 19:13 wwn-0x606ae1fbd32f42cb832249ed3a5f2e21 -> ../../sda
lrwxrwxrwx. 1 root root 10 Feb 3 19:13 wwn-0x606ae1fbd32f42cb832249ed3a5f2e21-part1 -> ../../sda1
lrwxrwxrwx. 1 root root 10 Feb 3 19:13 wwn-0x606ae1fbd32f42cb832249ed3a5f2e21-part2 -> ../../sda2
lrwxrwxrwx. 1 root root 10 Feb 3 19:13 wwn-0x606ae1fbd32f42cb832249ed3a5f2e21-part3 -> ../../sda3
lrwxrwxrwx. 1 root root 9 Feb 3 19:13 wwn-0x608c0ac31e5d4aceb9badd44663871ac -> ../../sdb
device file を使用して XFSファイルシステムを作成
sudo mkfs -t xfs /dev/disk/by-id/wwn-0x608c0ac31e5d4aceb9badd44663871ac
実行例
[opc@ins-oralinux-1 by-id]$ sudo mkfs -t xfs /dev/disk/by-id/wwn-0x608c0ac31e5d4aceb9badd44663871ac
meta-data=/dev/disk/by-id/wwn-0x608c0ac31e5d4aceb9badd44663871ac isize=256 agcount=4, agsize=3276800 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=0 finobt=0, sparse=0, rmapbt=0, reflink=0
data = bsize=4096 blocks=13107200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=6400, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
ファイルシステムに label を付与します (念のため。これを指定することで、/dev/disk/by-label にシンボリックリンクが生成される)
sudo xfs_admin -L tutorial_label1 /dev/disk/by-id/wwn-0x608c0ac31e5d4aceb9badd44663871ac
mount pointの作成
sudo mkdir /mnt/tutorial1
fstabの作成。以下の1行を /etc/fstab に追記する。(optionや、fsckの番号などはsample。任意に変更してもよいですが、_netdevとnofailは指定は必須です)
sudo vim /etc/fstab
/dev/disk/by-id/wwn-0x608c0ac31e5d4aceb9badd44663871ac /mnt/tutorial1 xfs defaults,noatime,_netdev,nofail 0 2
fstab の記載方法の確認のため、mount を行う (device fileを指定していないため、fstabの記載が参照されてmountされる)
sudo mount /mnt/tutorial1
確認
[opc@ins-oralinux-1 by-id]$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 7.2G 0 7.2G 0% /dev
tmpfs tmpfs 7.3G 0 7.3G 0% /dev/shm
tmpfs tmpfs 7.3G 8.6M 7.3G 1% /run
tmpfs tmpfs 7.3G 0 7.3G 0% /sys/fs/cgroup
/dev/sda3 xfs 39G 1.8G 37G 5% /
/dev/sda1 vfat 200M 9.6M 191M 5% /boot/efi
tmpfs tmpfs 1.5G 0 1.5G 0% /run/user/1000
/dev/sdb xfs 50G 33M 50G 1% /mnt/tutorial1 <==== mountされている
再起動しても問題なくmountされていることを確認します。
アンマウント
fstabの削除
sudo vim /etc/fstab
追記した下記の記載をコメントアウトします
# /dev/disk/by-id/wwn-0x608c0ac31e5d4aceb9badd44663871ac /mnt/tutorial1 xfs defaults,noatime,_netdev 0 2
アンマウント
sudo umount /mnt/tutorial1/
iSCSIターゲットも削除
sudo iscsiadm -m node -T iqn.2015-12.com.oracleiaas:4314905c-7fa9-4514-b520-ceded0a5310a -p 169.254.2.2:3260 -u
sudo iscsiadm -m node -o delete -T iqn.2015-12.com.oracleiaas:4314905c-7fa9-4514-b520-ceded0a5310a -p 169.254.2.2:3260
念のため再起動
sudo shutdown -r now
OCI コンソールから、Block Volume の detachをする
パターン2 iSCSI方式 + device path有り
Block Volume を Instance へ接続(iSCSI)
パターン1で使用したvolumeを使いまわして、Instance に iSCSI方式 + device path 有り で volume を接続します (OCI上で設定のみ。実際にはまだ接続されていない)
device path は、 --device
optionで指定します。
oci compute volume-attachment attach --instance-id $instance1_ocid --type iscsi --volume-id $volume_ocid --display-name turorial-attach-iscsi --is-read-only false --device /dev/oracleoci/oraclevdb
iSCSI接続
sudo iscsiadm -m node -o new -T iqn.2015-12.com.oracleiaas:4314905c-7fa9-4514-b520-ceded0a5310a -p 169.254.2.7:3260
sudo iscsiadm -m node -o update -T iqn.2015-12.com.oracleiaas:4314905c-7fa9-4514-b520-ceded0a5310a -n node.startup -v automatic
sudo iscsiadm -m node -T iqn.2015-12.com.oracleiaas:4314905c-7fa9-4514-b520-ceded0a5310a -p 169.254.2.7:3260 -l
device path を有効にしているため、このタイミングで /dev/oracleoci/oraclevdb
にデバイスファイルへのシンボリックリンクが自動生成されています (便利~)
[opc@ins-oralinux-1 oracleoci]$ ls -la /dev/oracleoci/
total 0
drwxr-xr-x. 2 root root 140 Feb 3 20:25 .
drwxr-xr-x. 20 root root 3140 Feb 3 20:25 ..
lrwxrwxrwx. 1 root root 6 Feb 3 20:18 oraclevda -> ../sda
lrwxrwxrwx. 1 root root 7 Feb 3 20:18 oraclevda1 -> ../sda1
lrwxrwxrwx. 1 root root 7 Feb 3 20:18 oraclevda2 -> ../sda2
lrwxrwxrwx. 1 root root 7 Feb 3 20:18 oraclevda3 -> ../sda3
lrwxrwxrwx. 1 root root 6 Feb 3 20:25 oraclevdb -> ../sdb <========= これ!便利!
Block Device(iSCSI) を使用してマウント
fstabの作成。以下の1行を /etc/fstab に追記する。(optionや、fsckの番号などはsample。任意に変更してもよいですが、_netdev,nofailは指定は必須です)。device path を指定できるのが便利です
sudo vim /etc/fstab
/dev/oracleoci/oraclevdb /mnt/tutorial1 xfs defaults,noatime,_netdev,nofail 0 2
fstab の記載方法の確認のため、mount を行う (device fileを指定していないため、fstabの記載が参照されてmountされる)
sudo mount /mnt/tutorial1
確認
[opc@ins-oralinux-1 by-id]$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 7.2G 0 7.2G 0% /dev
tmpfs tmpfs 7.3G 0 7.3G 0% /dev/shm
tmpfs tmpfs 7.3G 8.6M 7.3G 1% /run
tmpfs tmpfs 7.3G 0 7.3G 0% /sys/fs/cgroup
/dev/sda3 xfs 39G 1.8G 37G 5% /
/dev/sda1 vfat 200M 9.6M 191M 5% /boot/efi
tmpfs tmpfs 1.5G 0 1.5G 0% /run/user/1000
/dev/sdb xfs 50G 33M 50G 1% /mnt/tutorial1 <==== mountされている
再起動しても問題なくmountされていることを確認します。
アンマウント
fstabの削除
sudo vim /etc/fstab
追記した下記の記載をコメントアウトします
# /dev/oracleoci/oraclevdb /mnt/tutorial1 xfs defaults,noatime,_netdev 0 2
アンマウント
sudo umount /mnt/tutorial1/
iSCSIターゲットも削除
sudo iscsiadm -m node -T iqn.2015-12.com.oracleiaas:4314905c-7fa9-4514-b520-ceded0a5310a -p 169.254.2.7:3260 -u
sudo iscsiadm -m node -o delete -T iqn.2015-12.com.oracleiaas:4314905c-7fa9-4514-b520-ceded0a5310a -p 169.254.2.7:3260
念のため再起動
sudo shutdown -r now
OCI コンソールから、Block Volume の detachをする
パターン3 準仮想化方式 + device path有り
Block Volume を Instance へ接続(準仮想化方式)
パターン1で使用したvolumeを使いまわして、Instance に 準仮想化方式で volume を接続します
oci compute volume-attachment attach --instance-id $instance1_ocid --type paravirtualized --volume-id $volume_ocid --display-name turorial-attach-iscsi --is-read-only false --device /dev/oracleoci/oraclevdb
上記コマンドにより、Online状態のまま Oracle Linux 7.6 の Instance に /dev/sdb
の device file が自動認識されています
[opc@ins-oralinux-1 dev]$ lsblk --pair
NAME="sdb" MAJ:MIN="8:16" RM="0" SIZE="50G" RO="0" TYPE="disk" MOUNTPOINT=""
NAME="sda" MAJ:MIN="8:0" RM="0" SIZE="46.6G" RO="0" TYPE="disk" MOUNTPOINT=""
NAME="sda2" MAJ:MIN="8:2" RM="0" SIZE="8G" RO="0" TYPE="part" MOUNTPOINT="[SWAP]"
NAME="sda3" MAJ:MIN="8:3" RM="0" SIZE="38.4G" RO="0" TYPE="part" MOUNTPOINT="/"
NAME="sda1" MAJ:MIN="8:1" RM="0" SIZE="200M" RO="0" TYPE="part" MOUNTPOINT="/boot/efi"
また、device path を有効にしているため、/dev/oracleoci
以下にも シンボリックリングが自動認識されています
[opc@ins-oralinux-1 dev]$ ls -la /dev/oracleoci/
total 0
drwxr-xr-x. 2 root root 140 Feb 3 20:37 .
drwxr-xr-x. 20 root root 3120 Feb 3 20:37 ..
lrwxrwxrwx. 1 root root 6 Feb 3 20:32 oraclevda -> ../sda
lrwxrwxrwx. 1 root root 7 Feb 3 20:32 oraclevda1 -> ../sda1
lrwxrwxrwx. 1 root root 7 Feb 3 20:32 oraclevda2 -> ../sda2
lrwxrwxrwx. 1 root root 7 Feb 3 20:32 oraclevda3 -> ../sda3
lrwxrwxrwx. 1 root root 6 Feb 3 20:37 oraclevdb -> ../sdb
Block Device(準仮想化方式) を使用してマウント
fstabの作成。以下の1行を /etc/fstab に追記する。(optionや、fsckの番号などはsample。任意に変更してもよいですが、_netdev,nofailは指定は必須です)。device path を指定できるのが便利です
sudo vim /etc/fstab
/dev/oracleoci/oraclevdb /mnt/tutorial1 xfs defaults,noatime,_netdev,nofail 0 2
fstab の記載方法の確認のため、mount を行う (device fileを指定していないため、fstabの記載が参照されてmountされる)
sudo mount /mnt/tutorial1
確認
[opc@ins-oralinux-1 by-id]$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 7.2G 0 7.2G 0% /dev
tmpfs tmpfs 7.3G 0 7.3G 0% /dev/shm
tmpfs tmpfs 7.3G 8.6M 7.3G 1% /run
tmpfs tmpfs 7.3G 0 7.3G 0% /sys/fs/cgroup
/dev/sda3 xfs 39G 1.8G 37G 5% /
/dev/sda1 vfat 200M 9.6M 191M 5% /boot/efi
tmpfs tmpfs 1.5G 0 1.5G 0% /run/user/1000
/dev/sdb xfs 50G 33M 50G 1% /mnt/tutorial1 <==== mountされている
再起動しても問題なくmountされていることを確認します。
アンマウント
fstabの削除
sudo vim /etc/fstab
追記した下記の記載をコメントアウトします
# /dev/oracleoci/oraclevdb /mnt/tutorial1 xfs defaults,noatime,_netdev 0 2
アンマウント
sudo umount /mnt/tutorial1/
念のため再起動
sudo shutdown -r now
OCI コンソールから、Block Volume の detachをする