警告:デバイス名を取り違えるとデータを失う

以下のpartedmkfspvcreateは、対象デバイスの既存データを利用できなくする操作です。本記事では説明用に新しいNVMe SSDを/dev/nvme1n1としますが、実環境の名前に読み替えて無条件に実行してはいけません。

実行条件:重要データをバックアップし、対象SSDのモデル・シリアル・容量・既存署名を複数のコマンドで確認し、復旧手段を準備してから進めます。

最初に利用方法を決める

構成向く場合概要
直接ファイルシステム/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が成功した
  • マウント後の所有者と権限を確認した
  • バックアップと復元手順を更新した

参考資料

著者について

intrajp。Linux、クラウドインフラ、Kubernetesなどの技術情報を発信しています。この記事では、操作方法より対象デバイスの確認と再起動前の検証を優先しています。

運営者情報と記事の方針を見る