警告:デバイス名を取り違えるとデータを失う
以下のparted、mkfs、pvcreateは、対象デバイスの既存データを利用できなくする操作です。本記事では説明用に新しいNVMe SSDを/dev/nvme1n1としますが、実環境の名前に読み替えて無条件に実行してはいけません。
最初に利用方法を決める
| 構成 | 向く場合 | 概要 |
|---|---|---|
| 直接ファイルシステム | /dataなど独立した領域が欲しい | パーティションへext4などを作成してマウント |
| LVMへ追加 | 既存VGのLVを拡張したい | 新SSDをPV化し、VGへ追加してLVを拡張 |
購入前の場合は、先にLinux用SSDのフォームファクターと接続方式を確認してください。
新しいSSDを識別する
lsblk -d -o NAME,MODEL,SERIAL,SIZE,ROTA,TRAN
sudo fdisk -l
sudo wipefs --no-act /dev/nvme1n1
wipefs --no-actは署名を消さずに確認します。新品として購入したディスクに既存のパーティションやファイルシステム署名が見える場合は、操作を止めて対象と用途を再確認します。
GPTパーティションを作成する
対象が確実に/dev/nvme1n1で、全領域を新しいデータ用として使う例です。
sudo parted /dev/nvme1n1 --script -- \
mklabel gpt \
mkpart primary 1MiB 100%
sudo partprobe /dev/nvme1n1
lsblk /dev/nvme1n1
NVMeの最初のパーティションは通常/dev/nvme1n1p1になります。SATAディスクでは/dev/sdb1のような名前です。
ext4ファイルシステムを作成する
通常のデータ領域として使う場合の例です。ここからLVMへ追加する場合は実行せず、後述のLVM手順へ進みます。
sudo mkfs.ext4 -L data /dev/nvme1n1p1
lsblk -f /dev/nvme1n1
既存のファイルシステムがあるデバイスへmkfsを実行するとデータを失います。XFSなど別形式を選ぶ場合は、バックアップ、拡張・縮小要件、利用ディストリビューションのサポートを確認します。
一時的にマウントして確認する
sudo mkdir -p /data
sudo mount /dev/nvme1n1p1 /data
findmnt --target /data
df -hT /data
所有者と権限は用途に合わせて設定します。安易に全ユーザーへ書き込み権限を与えず、サービス用ユーザーやグループを決めます。
UUIDで永続マウントを設定する
sudo blkid /dev/nvme1n1p1
lsblk --fs /dev/nvme1n1p1
表示されたUUIDを使い、/etc/fstabへ次の形式で追加します。下記UUIDは例です。
UUID=11111111-2222-3333-4444-555555555555 /data ext4 defaults 0 2
保存後、現在のシェルを閉じる前に構文とマウントを検証します。
sudo systemctl daemon-reload
sudo findmnt --verify --verbose
sudo umount /data
sudo mount /data
findmnt --target /data
検証に失敗した状態で再起動しないでください。リモートサーバーでは、起動失敗時にコンソールへ接続できる手段も確認します。
既存LVMへSSDを追加する場合
先にPV・VG・LVの構成を確認してください。次は説明用にvg_dataへ追加する例です。
# 対象パーティションを再確認
lsblk -f /dev/nvme1n1
sudo pvs
sudo vgs
# ここから書き込み操作
sudo parted /dev/nvme1n1 --script set 1 lvm on
sudo pvcreate /dev/nvme1n1p1
sudo vgextend vg_data /dev/nvme1n1p1
# 追加後の確認
sudo pvs
sudo vgs
LVへ20GiB追加し、対応するファイルシステムも拡張する例です。対象LVのパスと形式を必ず確認します。
findmnt --target /data
sudo lvextend --resizefs --size +20G /dev/vg_data/lv_data
sudo lvs
df -hT /data
VGの全空きを一度に割り当てると、別LVやスナップショットへ利用できる余地がなくなります。必要量を見積もって割り当てます。
TRIMの状態を確認する
lsblk --discard
systemctl status fstrim.timer
多くのディストリビューションでは定期的なfstrimが利用されます。接続方式や暗号化、仮想化層によってdiscardの伝達状況が異なるため、確認せずマウントオプションを変更しません。
作業後のチェックリスト
- モデル・シリアル・容量で対象を確認した
- 既存署名の有無を記録した
- パーティションとファイルシステムを確認した
- UUIDでfstabを設定した
findmnt --verifyが成功した- マウント後の所有者と権限を確認した
- バックアップと復元手順を更新した