はじめに
先日、「growpart エラー "NOCHANGE: partition 1 is size 4294965248. it cannot be grown" について」 という記事を書かせていただきました。
今回はその際の対応について書いています。
対応
/opt/data
で利用しているボリュームの空きがなくなってしまったため、3TiB の EBS を新たに用意し、データを移し替えると言ったことを行います。
新しいボリューム(例:/dev/nvme1n1)をアタッチ
まずは新しい EBS ボリュームを作成しますあ。
作成が完了したら対象のインスタンスにボリュームをアタッチします。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 3T 0 disk
└─nvme0n1p1 259:1 0 2T 0 part /
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 3T 0 disk
└─nvme0n1p1 259:1 0 2T 0 part /
nvme1n1 259:2 0 3T 0 disk
パーティション作成
次に実際に利用できる状態にしていきます。
まずはパーティションの作成です。今回は 2TB を超えるボリュームの作成にるため parted コマンドを利用するのがポイントです。
$ sudo parted /dev/nvme1n1
GNU Parted 3.1
/dev/nvme1n1 を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) mklabel gpt
(parted) mkpart primary xfs 1MiB 100%
(parted) quit
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。
無事に作成ができると lsblk コマンドで確認できます。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 3T 0 disk
└─nvme0n1p1 259:1 0 2T 0 part /
nvme1n1 259:2 0 3T 0 disk
└─nvme1n1p1 259:3 0 3T 0 part
フォーマット(ファイルシステム作成)
作成ができたためフォーマットを行います。
$ sudo mkfs.xfs /dev/nvme1n1p1
meta-data=/dev/nvme1n1p1 isize=512 agcount=4, agsize=196607872 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=786431488, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=383999, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
マウントポイント作成 & マウント
それではマウントポイントを作成しマウントをを行います。
$ sudo mkdir -p /data
マウントできているか分かりやすくするため nomount などの空ファイルを作成します。
$ sudo touch /data/nomount
$ ls /data/
nomount
このようにしておくことで、意図せずマウントが外れている場合に気付きやすくなります。
ではマウントを行います。
$ sudo mount /dev/nvme1n1p1 /data
以下のように指定したボリュームが指定したマウントポイントにマウントされていれば大丈夫です。
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/nvme0n1p1 2.0T 1.7T 367G 83% /
devtmpfs 63G 0 63G 0% /dev
tmpfs 63G 0 63G 0% /dev/shm
tmpfs 63G 138M 63G 1% /run
tmpfs 63G 0 63G 0% /sys/fs/cgroup
tmpfs 13G 0 13G 0% /run/user/1000
tmpfs 13G 0 13G 0% /run/user/0
/dev/nvme1n1p1 3.0T 33M 3.0T 1% /data
同期
マウントができたのでデータの同期を行ないます。
まずはオプションに --dry-run
を付けて同期テストをします。
$ sudo rsync -aAXv --progress /opt/data /data/ --dry-run
sending incremental file list
sent 382 bytes received 50 bytes 864.00 bytes/sec
total size is 9,512,745 speedup is 22,020.24 (DRY RUN)
問題なければオプションを外して実際に同期を行います。
$ sudo rsync -aAXv --progress /opt/data /data/
sending incremental file list
sent 9,515,830 bytes received 221 bytes 19,032,102.00 bytes/sec
total size is 9,512,745 speedup is 1.00
/etc/fstab に登録して永続化
マウントを行うため、ボリュームの UUID を確認します。
$ sudo blkid /dev/nvme1n1p1
/dev/nvme1n1p1: UUID="********-****-****-****-************" TYPE="xfs" PARTLABEL="primary" PARTUUID="********-****-****-****-************"
確認した UUID を /etc/fstab
に追記します。
$ vim /etc/fstab
UUID=********-****-****-****-************ /data xfs defaults,nofail 0 2
現在のマウントポイントからボリュームをアンマウントし、自動マウントを実行します。
$ sudo umount /data
$ sudo mount -a
fstab に記載したポイントにマウントされていれば成功です。
$ df -hT | grep /data
/dev/nvme1n1p1 xfs 3.0T 1.7T 1.3T 57% /data
おわりに
今回の対応で、2TiB を超えるボリュームを利用する場合は parted
を利用するということがわかり勉強になりました。
今後、data ボリュームとして新規の EBS を用意する際は初めから parted
で用意しておくと良さそうです。