1TBのSSDが余り始めた...
最近、yoctoで自前のLinuxディストリビュージョンをビルドするときなど、広いストレージが必要になることが増えてきました。ここ最近は2TBのNVMe-SSDもかなり安価になっており、そちらを買うことが多いと思いますが、すると1TBのNVMe-SSDが余り始め...とはいえビルド環境は常に容量が必要で...
それなら、mdadmで2TBのパーティションを作ろう
mdadm
はソフトウェアRAIDを構築できるLinuxの機能です。mdadm
は物理パーティションを複数束ねてmd
と呼ばれる論理パーティションを作成することができます。複数のNVMe-SSD上の物理パーティションを、デバイスをまたいで結合できますので、余った1TB-SSDを2本使って2TBのパーティションを作ることができます。
その他の解決方法
実はソフトウェアRAIDを使わなくても、Intelの「インテルVMD(ボリューム・マネジメント・デバイス)」を使えばチップセットでハードウェアRAIDが組めるので、より簡単に解決することができます。ただし、安価なマザーボードはVMD対応のチップセットが載っていませんので、どこにお金をかけるか悩みどころですね。
Ubuntu18.04でmdadmを使ってみた
多くの方々のQiitaを参考に1TB NVMe-SSD 2本から2TBのetx4パーティションを作成し、自身のホームディレクトリ以下/home/shino/yocto
にマウントしてみました。
mdadmのインストール
$ sudo apt update
... (パッケージが格納されているサーバ情報を更新する)
$ sudo apt upgrade
... (パッケージをすべて最新にする)
$ sudo apt install mdadm
... (mdadmパッケージをインストールする)
まとめるための物理パーティションを作成する
今回は/dev/nvme0n1
と/dev/nvme1n1
上に物理パーティションを作成して結合しました。
$ sudo fdisk /dev/nvme0n1
p
... パーティションテーブルを表示
n
... パーティションを作成
w
... パーティションを保存
$ sudo fdisk /dev/nvme1n1
p
... パーティションテーブルを表示
n
... パーティションを作成
w
... パーティションを保存
$ ls /dev/nvme?n1*
/dev/nvme0n1 /dev/nvme0n1p1 /dev/nvme0n1p2 /dev/nvme1n1 /dev/nvme1n1p1
... 今回は「/dev/nvme0n1p2」と「/dev/nvme1n1p1」を結合します
mdadmコマンドで論理パーティションを作成する
$ mdadm --create /dev/md0 --level=raid0 --raid-devices=2 /dev/nvme0n1p2 /dev/nvme1n1p1
... 論理パーティション「/dev/md0」を作成する
$ sudo mkfs.ext4 /dev/md0
... 論理パーティションをext4でフォーマットする
$ mkdir -p /home/shino/yocto
... マウントするディレクトリを作成する
$ sudo mount /dev/md0 /home/shino/yocto
... マウントする
$ ls /home/shino/yocto
$ mount
/dev/md0 on /home/shino/yocto type ext4 (rw,relatime,stripe=256)
再起動後も自動でRAIDが組まれるよう設定ファイルに追記する
$ sudo mdadm --detail --scan
ARRAY /dev/md/shino-Ubu18:0 metadata=1.2 name=shino-Ubu18:0 UUID=6b0193ab:61df0053:7f03ae60:4cb82e2b
... 現在の設定情報を確認する
$ sudo vi /etc/mdadm/mdadm.conf
# mdadm.conf
# ...
# This configuration was auto-generated on Sat, 09 Nov 2024 13:08:54 +0900 by mkconf
ARRAY /dev/md/shino-Ubu18:0 metadata=1.2 name=shino-Ubu18:0 UUID=6b0193ab:61df0053:7f03ae60:4cb82e2b
... 最後の行に設定情報を追記する
再起動してmdを確認する
$ sudo reboot
... 再起動
$ sudo mdadm --detail --scan
ARRAY /dev/md/shino-Ubu18:0 metadata=1.2 name=shino-Ubu18:0 UUID=6b0193ab:61df0053:7f03ae60:4cb82e2b
... /dev/md/shino-Ubu18:0 という論理パーティションが作られている
/etc/fstabで自動マウント
$ sudo vi /etc/fstab
... 以下を追記
/dev/md/shino-Ubu18:0 /home/shino/yocto ext4 defaults 0 0
$ sudo reboot
... 再起動
$ mount | grep "/home/shino/yocto"
/dev/md127 on /home/shino/yocto type ext4 (rw,relatime,stripe=256)
... マウントされていることを確認できます
まとめ
以上がソフトウェアRAIDを使った、物理デバイスよりも大きな論理パーティションを作る方法です。手順自体は簡単なのですがハマりやすいポイントとしては、RAIDの名前のエイリアスがたくさんできることでしょうか(/dev/md127
とか/dev/md/shino-Ubu18:0
とか)。少し設定したら再起動してどうなっているか調べる...と進めていくことと手戻りは少なそうですね。
またこのあたりがクリアになりましたら更新しようと思います。