xfsで新しいディスクを追加する

よくやるくせにすぐ忘れるので、備忘のためのメモ。

大まかな手順は、右下の目次を見ていただければ。

### 環境

Windows上のVirtualBox

```bash
[root@localhost ~]# cat /etc/redhat-release
Rocky Linux release 8.7 (Green Obsidian)
[root@localhost ~]#
```

#### デバイスの準備

HDDをマウントできる状態にフォーマットする。

##### 追加したデバイスが見えるのを確認。

```bash
[asdf@localhost ~]$ su -
[root@localhost ~]# parted -l

モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sda: 53.7GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  1075MB  1074MB  primary  xfs               boot
 2    1075MB  53.7GB  52.6GB  primary                    lvm


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

[root@localhost ~]#
```

##### `/dev/sdb`を新しいディスク領域として使えるようにする。

```bash
[root@localhost ~]# parted /dev/sdb
GNU Parted 3.2
/dev/sdb を使用
GNU Parted へようこそ！ コマンド一覧を見るには 'help' と入力してください。
(parted)
(parted)
(parted) p
エラー: /dev/sdb: ディスクラベルが認識できません。
モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sdb: 558GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: unknown
ディスクフラグ:
(parted)
```

##### パーティションテーブルを追加。

```bash
(parted) mklabel gpt
(parted)
(parted) p
モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sdb: 558GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始  終了  サイズ  ファイルシステム  名前  フラグ

(parted)
```

##### 使用する領域を定義。今回は全部丸ごと１個にする。

```bash
(parted)
(parted) mkpart
パーティションの名前?  []? test
ファイルシステムの種類?  [ext2]? xfs
開始? 0%
終了? 100%
(parted)
(parted)
(parted) p
モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sdb: 558GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了   サイズ  ファイルシステム  名前  フラグ
 1    1049kB  558GB  558GB   xfs               test

(parted)
```

##### partedの実行直後の状態。

```bash
[root@localhost ~]# parted -l
モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sda: 53.7GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  1075MB  1074MB  primary  xfs               boot
 2    1075MB  53.7GB  52.6GB  primary                    lvm

モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sdb: 558GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

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

[root@localhost ~]#
```

##### xfsでフォーマット

いつもやる間違いだが、`/dev/sdb`じゃなくて、作ったパーティションをフォーマットするので
`/dev/sdb1`をフォーマット対象とする。

```bash
[root@localhost ~]#
[root@localhost ~]# mkfs.xfs /dev/sdb
sdb   sdb1
[root@localhost ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=34078592 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0
data     =                       bsize=4096   blocks=136314368, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=66559, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]#
```

#### linux側でマウントする設定を追加する。

##### fstabの修正

```bash
[root@localhost ~]#
[root@localhost ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Dec  1 13:27:22 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rl-root     /                       xfs     defaults        0 0
UUID=aiueokakikukekosas /boot                   xfs     defaults        0 0
/dev/mapper/rl-swap     none                    swap    defaults        0 0
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# echo "/dev/sdb1   /test      xfs   defaults     0 0" >> /etc/fstab
[root@localhost ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Dec  1 13:27:22 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rl-root     /                       xfs     defaults        0 0
UUID=aiueokakikukekosas /boot                   xfs     defaults        0 0
/dev/mapper/rl-swap     none                    swap    defaults        0 0
/dev/sdb1   /test      xfs   defaults     0 0
[root@localhost ~]#
```


##### systemd経由でmountユニットを生成

```bash
[root@localhost ~]#
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# ll /run/systemd/generator
合計 16
-rw-r--r--. 1 root root 215  5月 13 18:22  -.mount
-rw-r--r--. 1 root root 254  5月 13 18:22  boot.mount
-rw-r--r--. 1 root root 228  5月 13 18:22 'dev-mapper-rl\x2dswap.swap'
drwxr-xr-x. 2 root root 100  5月 13 18:22  local-fs.target.requires
drwxr-xr-x. 2 root root  60  5月 13 18:22  swap.target.requires
-rw-r--r--. 1 root root 209  5月 13 18:22  test.mount
[root@localhost ~]#
```

##### いざ、マウント

```bash
[root@localhost ~]#
[root@localhost ~]# systemctl start test.mount
[root@localhost ~]#
[root@localhost ~]# df -kh
ファイルシス        サイズ  使用  残り 使用% マウント位置
devtmpfs              3.9G     0  3.9G    0% /dev
tmpfs                 3.9G     0  3.9G    0% /dev/shm
tmpfs                 3.9G  8.7M  3.9G    1% /run
tmpfs                 3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/mapper/rl-root    44G   14G   31G   32% /
/dev/sda1            1014M  245M  770M   25% /boot
overlay                44G   14G   31G   32% /var/lib/docker/overlay2/f9b2e44d7c8948cba8b1f746a391226a8f465a85404ab2cb6d7076bec6a7e008/merged
overlay                44G   14G   31G   32% /var/lib/docker/overlay2/1f4f0128b4c1875ddabbc61004aedfe6e8579b3e2e47e538c1c2a87368e6c709/merged
overlay                44G   14G   31G   32% /var/lib/docker/overlay2/d0f3ea2fcbb995750d974b293b91355b1e013df69691ded012955eb49b42ce59/merged
tmpfs                 796M     0  796M    0% /run/user/1000
/dev/sdb1             520G  3.7G  517G    1% /test
[root@localhost ~]#
```

※はじめ`mount -a`と書いていたが、せっかくsystemd管理にしているので`systemctl start test.mount`に修正。

### 追記

ディスクラベル名`/dev/sdb1`だと、なぜか再起動すると名前が変わって起動に失敗し、エマージェンシーモードに入ってしまう。
大昔のCentOSが復活した気分だが、原因がわからないので、とりあえずfstabの記述をUUIDに変更して再度systemdからgenerateする。

```bash
[root@localhost ~]#
[root@localhost ~]# ll /dev/disk/by-uuid/ | grep sdb1
lrwxrwxrwx. 1 root root 10  5月 13 18:46 ad5d7f46-2f2f-488a-b3c5-c790cd664f7f -> ../../sdb1
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Thu Dec  1 13:27:22 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rl-root                       /       xfs   defaults        0 0
UUID=569f42c6-e46f-456a-afe2-5ec786d9eb18 /boot   xfs   defaults        0 0
/dev/mapper/rl-swap                       none    swap  defaults        0 0
UUID=ad5d7f46-2f2f-488a-b3c5-c790cd664f7f /test   xfs   defaults        0 0
[root@localhost ~]#
```

こういう公開記事の時って、UUIDってマスクとかしたほうがいいんですかね？