【LVM完全マスター第6回】危険度MAX!? ディスク容量の縮小とHDD交換(pvmove)完全運用マニュアル

「増やす」のは天国。「減らす」のは地獄。

こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回は、稼働中のサーバーを止めることなくディスク容量を増やす「オンライン拡張」を学びました。あれは魔法のように簡単で楽しい作業でしたね。

しかし、インフラエンジニアには時として、その逆のオーダーが舞い込みます。
「ディスク容量の縮小」「物理ディスクの交換」です。

コウ君

先生、また相談です…。
前回 /data を70GBに増やしましたけど、実は勘違いで、そんなに使わないことが判明しました。
逆に /home の容量が足りなくなっちゃって…。
/data を20GBに戻して、浮いた50GBを /home に回したいんですけど、チャチャッとコマンド一発でいけますよね?

リナックス先生

コウ君、それはLVMで最も危険な作業よ。
「増やす」時は中身(データ)には影響しないけど、「減らす」時はデータの尻尾を切り落としてしまう可能性があるの。
一歩間違えれば全データ消失。
それに、もし君がファイルシステムに「XFS」を選んでいたら…残念ながら「縮小」は不可能なのよ。

今回は、LVM運用における「撤退戦」の技術。
データ消失のリスクを回避しながらLVを縮小する手順と、古くなったHDDを新しいHDDに入れ替えるためのデータ移行技術(pvmove)を徹底解説します。

📚 LVM完全マスター(全8回)目次

現在地:【第6回】ディスク容量の縮小と物理ディスクの交換


第1章:縮小作業の鉄則と「XFSの壁」

作業に入る前に、絶対に理解しておくべき「物理法則」があります。

1. 縮小の順序を間違えると死ぬ

拡張の時は「LVM枠拡大」→「中身(ファイルシステム)拡大」の順でした。
縮小の時はその逆…ではありません!

正しい縮小順序:

  1. 中身(ファイルシステム)を先に縮める
    (例:70GB → 20GBに圧縮して、後ろ50GBを空っぽにする)
  2. 外枠(LV)を縮める
    (例:70GB → 20GBの枠にする)

もし逆に「先に枠(LV)を縮めて」しまうと、入り切らなくなったデータ(お尻の部分)が強制的に切り落とされ、ファイルシステムが破損します。
二度とマウントできなくなる、恐怖の事態です。

2. XFSファイルシステムは「縮小不可」

第4回で「XFSは縮小できない」と言ったのを覚えていますか?
RHEL/CentOS/AlmaLinuxなどで標準採用されている XFS は、仕様上、パーティションの縮小(shrink)機能をサポートしていません。

resize2fs に相当する縮小コマンドが存在しないのです。
もし現在 XFS を使っている場合は、「第3章:XFS環境での縮小(作り直し)」へ進んでください。コマンドでの縮小は諦めるしかありません。


第2章:ext4環境での縮小手順(lvreduce)

UbuntuやDebianで標準の ext4 を使っている場合は、コマンドで縮小が可能です。
ただし、拡張と違って「アンマウント(オフライン)」が必須です。
つまり、サービスを停止する必要があります。

手順1:バックアップを取る

どれだけ自信があっても、縮小作業前は必ずバックアップを取ってください。
人間は計算ミスをします。

手順2:アンマウントする

sudo umount /data

手順3:ファイルシステムのチェック(e2fsck)

整合性が取れていない状態でサイズ変更するのは自殺行為です。
必ずチェックを行い、クリーンな状態にします。

sudo e2fsck -f /dev/vg_storage/lv_data

「Pass 5…」まで進み、エラーがなければOKです。

手順4:ファイルシステムの縮小(resize2fs)

ここが一番緊張する瞬間です。
まず「中身」を目標サイズ(例:20GB)まで縮めます。

sudo resize2fs /dev/vg_storage/lv_data 20G

出力例:

Resizing the filesystem on /dev/vg_storage/lv_data to 5242880 (4k) blocks.
The filesystem on ... is now 5242880 (4k) blocks long.

手順5:論理ボリュームの縮小(lvreduce)

中身が小さくなったので、外枠も同じサイズ(20GB)まで縮めます。
※注意:絶対にresize2fsで指定したサイズより小さくしてはいけません!

sudo lvreduce -L 20G /dev/vg_storage/lv_data

「データが失われる可能性がありますが続けますか? [y/n]」と聞かれます。
震える手で y を押します。

手順6:再マウントと確認

sudo mount /data
df -h /data

サイズが20GBになり、中のデータが読めれば成功です!
これでVGに50GBの空きが戻ってきました。

💡 プロの技:lvreduceの -r オプション
拡張時と同じく、縮小時も -r オプションを使えば、resize2fslvreduce を連携させて安全に縮小してくれます。
sudo lvreduce -L 20G -r /dev/vg_storage/lv_data
計算ミスを防ぐため、実務ではこちらを推奨します(ext4の場合のみ有効)。


第3章:XFS環境での縮小(作り直し作戦)

XFSでは resize2fs のような縮小コマンドが使えません。
そのため、「データを別の場所に退避して、LVを作り直し、データを戻す」という物理的なアプローチが必要です。

手順フロー

  1. バックアップ: 別のディスクやサーバーにデータをコピーする(rsyncやtar)。
  2. LV削除: lvremove で現在のLV(70GB)を消す。
  3. LV再作成: lvcreate で小さいサイズ(20GB)のLVを新規作成する。
  4. フォーマット: mkfs.xfs でフォーマットする。
  5. リストア: バックアップからデータを書き戻す。

「なんだ、ただの引越しじゃないか」と思うかもしれませんが、これが唯一の解です。
XFSを採用する場合は、「大は小を兼ねる」で最初から大きめに確保しておくか、VGに余裕を持たせておく設計が重要になります。


第4章:物理ディスクの交換とデータ移動「pvmove」

さて、ここからは「容量」の話ではなく「物理的なハードウェア」の話です。
長年サーバーを運用していると、HDDから「カシュン、カシュン」と異音がし始めたり、SMARTエラーが出たりして、故障の予兆を感じることがあります。

LVMには、「稼働中のディスクから、新しいディスクへ、データを透明に移動させる」という神機能があります。
それが pvmove です。

シナリオ:故障寸前のHDDを交換する

  • 現状: /dev/sdb (20GB) が故障寸前。データが入っている。
  • 目標: 新しい /dev/sdc (20GB以上) にデータを移し、sdb を廃棄する。
  • 条件: サーバーは止めない(オンライン)。

手順1:新しいディスクをVGに追加する

まず、交換用の新ディスク(sdc)を接続し、PV作成〜VG追加まで行います(第2・3回の復習)。

sudo pvcreate /dev/sdc
sudo vgextend vg_storage /dev/sdc

これで、vg_storage の中に「古いsdb」と「新しいsdc」が同居している状態になりました。

手順2:データを移動させる(pvmove)

古いディスク(sdb)に入っているPE(データの断片)を、VG内の空いている場所(つまりsdc)に移動させます。

sudo pvmove /dev/sdb

実行結果:

  /dev/sdb: Moved: 10.0%
  /dev/sdb: Moved: 45.0%
  ...
  /dev/sdb: Moved: 100.0%

この処理中も、サーバーは普通に読み書きが可能です。
LVMが裏側で、データのコピーとアクセスの切り替えをリアルタイムで行ってくれます。
データ量によっては数時間かかりますが、完了すると /dev/sdb は「空っぽ」になります。

手順3:古いディスクをVGから切り離す

空になった sdb はもう不要です。VGから追い出しましょう。

sudo vgreduce vg_storage /dev/sdb

手順4:PVラベルを剥がして廃棄

sudo pvremove /dev/sdb

これで /dev/sdb はLVMから完全に解放されました。
あとはサーバーの電源を切って物理的に取り外すだけです。


第5章:トラブルシューティング Q&A

Q1. pvmove中に電源が落ちたらどうなる?

A. 再起動後に再開されます(が、怖いです)。
pvmove はチェックポイント機能を備えており、中断しても途中から再開できるようになっています。
再起動後、pvmove --background などで再開できますが、ファイルシステムの整合性が崩れるリスクもあるため、UPS(無停電電源装置)がある環境で行うのが鉄則です。

Q2. “Extents not found” でpvmoveできない

A. 移動先に十分な空き容量がありません。
移動元のディスク(sdb)の使用量が15GBなら、VG内に(sdc側に)15GB以上の空き領域(Free PE)が必要です。
vgs コマンドでVFreeを確認してください。

Q3. resize2fsで “New size smaller than minimum” エラー

A. 縮小しようとしているサイズが、現在入っているデータ量より小さいです。
例えば15GBのデータが入っているのに「10GBにしろ」と命令しても無理です。
不要なファイルを削除して空きを作るか、縮小サイズを見直してください。


まとめ:撤退戦を制する者が運用を制す

お疲れ様でした!
今回は、LVM運用の中でも難易度の高い「縮小」と「交換」をマスターしました。

今回の重要ポイント:

  • 縮小順序は「中身(FS)」→「外枠(LV)」が鉄則。
  • XFSは縮小できない。作り直しが必要。
  • pvmove を使えば、稼働中にHDD交換・データ移行ができる。
  • 作業前には必ずバックアップを取る。

これで、ディスクが増えても減っても、壊れかけても、あなたは冷静に対処できるスキルを身につけました。
LVMの基本操作はこれでほぼコンプリートです。

次回、第7回は「スナップショット機能で一瞬でバックアップを取る」です。
LVMのもう一つの強力な武器、タイムマシンのようなバックアップ機能について解説します。
OSのアップデート前に「保険」をかける技術、必見です!

▼ エンジニアとしてのキャリアを加速させる ▼

LVMを実践練習
「VPS」で環境構築

おすすめVPSを見る

インフラ技術を仕事に
「ITエンジニア転職」

転職エージェントを見る

コメント