OCI の Block Volume を Linux Compute に Attach して xfsファイルシステム でマウントする。(Oracle Cloud Infrastructure)

恐ろしくベーシックな内容やけど、OCI の Block Volume を Linux Compute に Attach して xfsファイルシステム でマウントしてみるやで。
彡(ﾟ)(ﾟ)

# 1. 環境

前回 Terraform で作成／廃棄できるようにした環境を使います。Private Compute に xfs をマウントします。

> 検証によく使う Oracle Cloud Infrastructure(OCI)環境を Terraform で作成してみる。
> https://qiita.com/ora_gonsuke777/items/8651c4075ec6bf436c4f

![blcok00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/0bc0554d-5023-c76d-63c5-ac993a300e83.jpeg)

# 2. 参考情報(マニュアル)

以下のマニュアル＆他エントリを参照しています。@yamada-hakase さん、いつもお世話になります。
(｀･ω･)ゞ

> ブロック・ボリュームの概要
> https://docs.cloud.oracle.com/ja-jp/iaas/Content/Block/Concepts/overview.htm
> 
> ブロック・ボリュームをiSCSIでアタッチする
> https://qiita.com/yamada-hakase/items/eb2ca44a112b3b18164e


# 3. Block Volume作成＆Attach

Block Volume を作成して Compute に Attach します。Attach のオプションは iSCSI と 準仮想化(Paravirtualized) が有りますが、今回は SLA が適用される iSCSI を選択します。

> ブロック・ボリューム・パフォーマンス
> https://docs.cloud.oracle.com/ja-jp/iaas/Content/Block/Concepts/blockvolumeperformance.htm
> ボリューム・パフォーマンスSLAは、iSCSIボリューム・アタッチメントのみに適用され、準仮想化アタッチメントには適用されません。

* Block Volumeの作成画面
![blcok01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/4f9ff340-179e-dc25-12e6-7447d10cddb6.jpeg)

* Block VolumeのAttach画面
![blcok02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/c106d2c0-ae16-bf03-7e3d-8292eddea271.jpeg)

# 4. Block Volume への接続(Compute上でiscsiadm実行)

iSCSI の場合、Compute Instance上 でiscsiadmコマンドを実行して、ボリュームに接続する必要が有ります。この操作をしないと OS上で Block Device として認識されません。

> ボリュームへの接続
> https://docs.cloud.oracle.com/ja-jp/iaas/Content/Block/Tasks/connectingtoavolume.htm

Block Volume のコンソールから iscsiadm のコマンドを取得できます。これらのコマンドを Private Compute上で実行します。

![block04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/f8dc13a9-7c81-d18c-a6a1-cd6a7aca6233.jpeg)
![blcok03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/2f3dc1f6-7155-15c0-9c29-b949b200e9ff.jpeg)

* コンソールから取得したiscsiadmコマンド

```shell
sudo iscsiadm -m node -o new -T iqn.2015-12.com.oracleiaas:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p xxx.xxx.xxx.xxx:3260
sudo iscsiadm -m node -o update -T iqn.2015-12.com.oracleiaas:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -n node.startup -v automatic
sudo iscsiadm -m node -T iqn.2015-12.com.oracleiaas:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p xxx.xxx.xxx.xxx:3260 -l
```

実行結果は以下の通り

```shell
$ sudo iscsiadm -m node -o new -T iqn.2015-12.com.oracleiaas:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p xxx.xxx.xxx.xxx:3260
New iSCSI node [tcp:[hw=,ip=,net_if=,iscsi_if=default] xxx.xxx.xxx.xxx,3260,-1 iqn.2015-12.com.oracleiaas:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] added
$ sudo iscsiadm -m node -o update -T iqn.2015-12.com.oracleiaas:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -n node.startup -v automatic
$ sudo iscsiadm -m node -T iqn.2015-12.com.oracleiaas:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -p xxx.xxx.xxx.xxx:3260 -l
Logging in to [iface: default, target: iqn.2015-12.com.oracleiaas:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: xxx.xxx.xxx.xxx,3260] (multiple)
Login to [iface: default, target: iqn.2015-12.com.oracleiaas:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, portal: xxx.xxx.xxx.xxx,3260] successful.

$ ls -la /dev/oracleoci/*
lrwxrwxrwx. 1 root root 6 Jun 14 07:11 /dev/oracleoci/oraclevda -> ../sda
lrwxrwxrwx. 1 root root 7 Jun 14 07:11 /dev/oracleoci/oraclevda1 -> ../sda1
lrwxrwxrwx. 1 root root 7 Jun 14 07:11 /dev/oracleoci/oraclevda2 -> ../sda2
lrwxrwxrwx. 1 root root 7 Jun 14 07:11 /dev/oracleoci/oraclevda3 -> ../sda3
lrwxrwxrwx. 1 root root 6 Jun 14 07:29 /dev/oracleoci/oraclevdb -> ../sdb ★この Block Device が認識
$
```

# 5. パーティション作成(fdisk)

fdiskコマンドでパーティションを作成します。特別な事は無いのでつらつらと彡(ﾟ)(ﾟ)

```shell
sudo fdisk /dev/oracleoci/oraclevdb
```

実行結果は以下の通りです。

```shell
$ sudo fdisk /dev/oracleoci/oraclevdb
Welcome to fdisk (util-linux 2.23.2).
:

Command (m for help): n　★n を入力(新規パーティション作成)
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p　★p を入力(Primaryパーティション作成)
Partition number (1-4, default 1): 1 　★1 を入力
First sector (2048-1256194047, default 2048): ★default
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-1256194047, default 1256194047): ★default
Using default value 1256194047
Partition 1 of type Linux and of size 599 GiB is set

Command (m for help): w ★w を入力(パーティション情報を書き込み)
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

$ ls -la /dev/oracleoci/*
lrwxrwxrwx. 1 root root 6 Jun 14 07:11 /dev/oracleoci/oraclevda -> ../sda
:
lrwxrwxrwx. 1 root root 6 Jun 14 07:35 /dev/oracleoci/oraclevdb -> ../sdb
lrwxrwxrwx. 1 root root 7 Jun 14 07:35 /dev/oracleoci/oraclevdb1 -> ../sdb1 ★このパーティションが作成
$
```

追加した Block Device にパーティションが作成されました。


# 6. ファイルシステム・フォーマット(mkfs) + UUID確認(blkid)

mkfsコマンドでフォーマットして、blkidコマンドで UUID を確認します。UUID は後で fstab に記述します。

```shell
sudo mkfs -t xfs /dev/oracleoci/oraclevdb1
blkid /dev/oracleoci/oraclevdb1
```

実行結果は以下の通りです。

```shell
$ sudo mkfs -t xfs /dev/oracleoci/oraclevdb1
meta-data=/dev/oracleoci/oraclevdb1 isize=256    agcount=4, agsize=39256000 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=0        finobt=0, sparse=0, rmapbt=0, reflink=0
data     =                       bsize=4096   blocks=157024000, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=76671, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

$ blkid /dev/oracleoci/oraclevdb1
/dev/oracleoci/oraclevdb1: UUID="92bf7e5d-5492-4d7d-8d41-19cf2a87e4c7" TYPE="xfs"

```


# 7. マウント用ディレクトリ作成、fstab編集、マウント実行

マウント用のディレクトリを作成して、/etc/fstab にマウント用情報を追記した後にマウントします。
ディレクトリはどこでも良いのですが、/mnt配下に xfs1 というディレクトリを作成します。

```shell
cd /mnt
sudo mkdir xfs1
sudo vi /etc/fstab
cat /etc/fstab
```

fstab のオプションは Example の記載をそのまま流用します。

```shell
#
# /etc/fstab
# Created by anaconda on Fri Apr 17 01:03:26 2020
:
## Example:
## UUID="94c5aade-8bb1-4d55-ad0c-388bb8aa716a"   /data1    xfs       defaults,noatime,_netdev      0      2
:

UUID="92bf7e5d-5492-4d7d-8d41-19cf2a87e4c7"    /mnt/xfs1    xfs    defaults,noatime,_netdev      0      2
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^これを追記
```

mountコマンドでマウントして、dfコマンドでファイルシステムとして認識されているか確認します。

```shell
sudo mount /mnt/xfs1
df -k
```

実行結果は以下の通り、上手く行ってますやね！彡(^)(^)

```shell
$ sudo mount /mnt/xfs1
$ df -k
Filesystem     1K-blocks    Used Available Use% Mounted on
:
/dev/sda3       40223552 2006140  38217412   5% /
:
/dev/sdb1      627789316   33024 627756292   1% /mnt/xfs1 ★コレ
$
```

念のために Compute を再起動してもマウントされるか確認、大丈夫なもよう彡(ﾟ)(ﾟ)

```shell
$ df -k
Filesystem     1K-blocks    Used Available Use% Mounted on
:
/dev/sda3       40223552 2009320  38214232   5% /
:
/dev/sdb1      627789316   33024 627756292   1% /mnt/xfs1 ★コレ
:
$
```
opcユーザーで書き込みできるように、chown で owner:group を変更して読み書きしてみます。

```shell
sudo chown opc:opc /mnt/xfs1
cd /mnt/xfs1
vmstat 1 > vmstat.log
cat vmstat.log
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 7192392   3112 345484    0    0   103    34   74  107  2  1 97  0  0
 0  0      0 7192392   3112 345520    0    0     0     0   77  141  0  0 100  0  0
 0  0      0 7141820   3112 345520    0    0     0     0  608  416 15  5 81  0  0
 0  0      0 7192176   3112 345524    0    0     0  1440  152  196  1  1 99  0  0
```

読み書きも出来ました。

# 8. まとめ

Block Volume を Linux Compute に xfsファイルシステムとしてマウントできたで！彡(^)(^)
さて、今度はこれを Terraform & Ansible で IaC化 したいんやけど、ボリュームの接続辺りで OCI CLI が要るんかしら。。。
彡(ﾟ)(ﾟ)