Linux上の論理ボリューム(LVM):ストレージスペースのための柔軟なソリューション
Linuxサーバーに慣れていない方にとって、ディスクスペースの管理は戸惑うことが多いかもしれません。物理ディスクや従来のパーティションが固定サイズに制限されるのに対し、LVM(Logical Volume Manager)は全く異なる世界、つまり卓越した柔軟性を提供します。LVMを物理ハードディスクとオペレーティングシステム間の仲介層として想像してみてください。これにより、複雑な物理構造を気にすることなく、仮想「パーティション」を簡単に管理できます。
私がまだ新人だった頃、会社の古いCentOS 7サーバーで、望ましいパフォーマンスを達成するために最適化に多くの労力を費やしたのを覚えています。特に、大量のストレージスペースを必要とし、絶えず変化するサービスにおいてはそうでした。
その時、LVMはまさに「救世主」でした。サーバーを停止したり、面倒なディスクの再フォーマットをすることなく、/var/logや/homeのような重要なディレクトリの容量を拡張するのに役立ちました。LVMのおかげで、私は何時間ものダウンタイムを節約し、不必要なデータ損失のリスクを回避できました。
クイックスタート:5分でLVMを始める
すぐにLVMを始めたいですか?その気持ちは分かります!これは、数ステップで基本的なLVMパーティションを作成、フォーマット、マウントするための超高速ガイドです。/dev/sdbという未パーティションの空きディスクがあると仮定します。
ステップ1:ディスクの準備
まず、新しいディスクにLVMタイプのパーティションを作成する必要があります。私はfdiskを使用しますが、より慣れている場合はpartedを選択しても構いません。
sudo fdisk /dev/sdb
fdiskで、次の手順を実行します。
nを押して新しいパーティションを作成します。- プライマリパーティションとして
pを選択します。 - パーティション番号(通常は
1)を入力します。 - ディスク全体を使用するために、最初と最後のセクタのデフォルト値を受け入れます。
tを押してパーティションタイプを変更します。- コード
8e(Linux LVM)を入力します。 wを押して変更を書き込み、終了します。
fdiskを終了した後、カーネルが新しいパーティションを認識するようにpartprobeを実行する必要がある場合があります。
sudo partprobe
ステップ2:物理ボリューム(PV)の作成
LVMが管理できるように、パーティション/dev/sdb1を物理ボリューム(PV)に変換します。
sudo pvcreate /dev/sdb1
ステップ3:ボリュームグループ(VG)の作成
次に、作成したPVをボリュームグループ(VG)にまとめます。例えば、vg_dataという名前を付けます。
sudo vgcreate vg_data /dev/sdb1
ステップ4:論理ボリューム(LV)の作成
次に、VG vg_dataから論理ボリューム(LV)を作成しましょう。lv_storageという名前で10GBのLVを作成します。
sudo lvcreate -L 10G -n lv_storage vg_data
ステップ5:LVのフォーマットとマウント
最後に、作成したLVをext4ファイルシステムでフォーマットし、/mnt/dataディレクトリにマウントします。
sudo mkfs.ext4 /dev/mapper/vg_data-lv_storage
sudo mkdir /mnt/data
sudo mount /dev/mapper/vg_data-lv_storage /mnt/data
再起動時にLVが自動的にマウントされるようにするには、/etc/fstabファイルに次の行を追加する必要があります。
sudo echo "/dev/mapper/vg_data-lv_storage /mnt/data ext4 defaults 0 0" | sudo tee -a /etc/fstab
完了です!これで、使用可能なLVMパーティションができました。
詳細な説明:LVMとは何か、なぜ私たちに必要なのか?
このように想像してみてください。私たちの物理ハードディスクは、固定された棚を持つ大きなキャビネットのようなものです。従来のパーティション(/dev/sda1、/dev/sda2など)を作成するとき、あなたはキャビネットをあらかじめ決められたサイズの棚に分割しています。ある棚がいっぱいになった場合、隣の空いている棚からスペースを増やすことはほとんど不可能です。あなたはすべてのものを移動させ、仕切りを取り壊してから再構築しなければならず、非常に複雑です。
LVMは、この制約を根本的に解決するために登場しました。それは、ディスクスペースをはるかに柔軟に管理する方法を提供します。LVMは、キャビネットを厳格な棚に分割するのではなく、複数のディスクから「共通のスペース」(プール)を作成することを可能にします。そこから、あなたは自由にサイズの仮想棚(論理ボリューム)を簡単に「切り出す」ことができます。素晴らしいのは、これらの仮想棚をいつでも拡張または縮小できることであり、データやキャビネット全体の構造に影響を与えることはありません。
LVMの基本概念
より分かりやすくするために、LVMの核となるコンポーネントを説明します。
- Physical Volume (PV – 物理ボリューム): これは、LVMに管理させたい物理ディスクまたは従来のパーティションです。LVMはこれらを、使用可能なブロックに「変換」します。PVは、LVMが構築に使う基本的な「レンガ」と考えることができます。
- Volume Group (VG – ボリュームグループ): VGはPVの集合です。これは、複数の「レンガ」をまとめて巨大な「原材料倉庫」を作成するようなものです。VG内のPVからの全スペースは、大きなプールを形成し、そこから論理ボリュームに割り当てることができます。
- Logical Volume (LV – 論理ボリューム): これは、VGのスペースから作成される仮想「パーティション」です。オペレーティングシステムはLVを通常のディスクとして認識し、使用します(例:
/dev/mapper/myvg-mylv)。最大の利点は、ハードディスクの物理構造に触れることなく、このLVのサイズを簡単に変更できることです。
LVMの優れた利点
なぜLVMが多くのシステム管理者にとって最優先の選択肢となるのでしょうか?以下に最も顕著な利点を示します。
- 柔軟なスペース管理:システムを再起動したり、複雑なデータ移行を行ったりすることなく、パーティション(LV)を簡単に拡張または縮小できます。これは、ストレージ要件が絶えず変化する場合に非常に役立ちます。
- 複数のディスクの組み合わせ:LVMを使用すると、複数の小さな物理ディスクからスペースを統合して、単一の大きなVGを作成できます。このVGから、必要に応じてLVに分割し、リソースの使用を最適化できます。
- 即時スナップショット:LVMは、LVの「スナップショット」(ポイントインタイムコピー)を作成する機能を提供します。これは、データのバックアップやシステム変更のテストに非常に役立つ機能です。
上級編:LVMの拡張、縮小、管理操作
基本概念を理解したところで、LVMが提供する重要な管理タスクについて詳しく見ていきましょう。
論理ボリューム(LV)の拡張
これは私が実務で最も頻繁に使用するタスクです。lv_storageがいっぱいになりかけていて、さらに5GB拡張したいと仮定します。まず、あなたのVG(vg_data)に十分な空き容量があるか確認してください。
sudo vgs
十分なスペースがある場合は、次のようにLVを拡張できます。
sudo lvextend -L +5G /dev/mapper/vg_data-lv_storage
LVを拡張した後、新しいスペース全体を使用できるように、内部のファイルシステムを拡張する必要があります。ext4ファイルシステムの場合、次のコマンドを使用します。
sudo resize2fs /dev/mapper/vg_data-lv_storage
XFS(CentOS/RHEL 7以降で一般的)を使用している場合、コマンドは次のようになります。
sudo xfs_growfs /mnt/data # またはそのLVのマウントポイントディレクトリ
最後に、変更が適用されたことを確認するために結果をチェックします。
df -h /mnt/data
論理ボリューム(LV)の縮小
LVの縮小は、拡張よりもはるかに複雑でリスクを伴う操作です。したがって、実行する前に必ずすべてのデータをバックアップしてください。最初にファイルシステムを縮小し、その後にLVを縮小する必要があります。
# 1. データ安全性を確保するために論理ボリュームをアンマウントします
sudo umount /mnt/data
# 2. ファイルシステムの破損をチェックします(この手順は非常に重要です!)
sudo e2fsck -f /dev/mapper/vg_data-lv_storage
# 3. ファイルシステムを縮小します(例:8GBに)。この容量が既存のデータ量よりも小さくならないように注意してください。
sudo resize2fs /dev/mapper/vg_data-lv_storage 8G
# 4. 論理ボリュームを縮小します。サイズは縮小されたファイルシステムのサイズと一致するか、それより大きくする必要があります。
sudo lvreduce -L 8G /dev/mapper/vg_data-lv_storage
# 5. 再マウントし、縮小後の容量を確認します
sudo mount /dev/mapper/vg_data-lv_storage /mnt/data
df -h /mnt/data
重要事項:XFSファイルシステムでは、直接的な縮小はサポートされていません。この場合、データをバックアップし、より小さいサイズのLVを再作成し、その後バックアップしたデータを復元する必要があります。
物理ボリューム(PV)をボリュームグループ(VG)に追加する
現在のVGの容量が不足しており、新しいディスク(例:/dev/sdc1)を追加する場合、新しいPVを追加することでVGを簡単に拡張できます。
# 1. /dev/sdc1ディスクから新しい物理ボリュームを作成します
sudo pvcreate /dev/sdc1
# 2. このPVを既存のボリュームグループ(vg_data)に追加します
sudo vgextend vg_data /dev/sdc1
# 3. VGのスペースをチェックして変更を確認します
sudo vgs
これで、あなたのVG vg_dataには/dev/sdc1からの追加スペースができました。この容量を使用して、既存のLVを拡張したり、新しいLVを作成したりできます。
LVMスナップショットの作成と管理
LVMのスナップショットは、元のLVの「瞬間コピー」(point-in-time copy)です。スナップショット作成以降に発生した変更のみを保存するため、ディスクスペースを節約できます。これは、データのバックアップやシステム変更のテストに非常に役立つ機能です。
sudo lvcreate --size 1G --snapshot --name lv_storage_snap /dev/mapper/vg_data-lv_storage
このスナップショットをマウントして、スナップショット作成時点のデータにアクセスできます。
sudo mkdir /mnt/snapshot
sudo mount /dev/mapper/vg_data-lv_storage_snap /mnt/snapshot
元のLVをスナップショットの状態に復元(ロールバック)するには:
# 復元する前に、元のLVとスナップショットの両方をアンマウントします
sudo umount /mnt/data
sudo umount /mnt/snapshot
# 復元を実行します
sudo lvconvert --merge /dev/mapper/vg_data-lv_storage_snap
# 復元が成功した後、元のLVを再マウントします
sudo mount /dev/mapper/vg_data-lv_storage /mnt/data
スナップショットが不要になったら、削除できます。
sudo lvremove /dev/mapper/vg_data-lv_storage_snap
実践的なヒントと個人的な経験
LVMの確認と管理
LVMのステータスを素早く確認できるコマンドが常にあります。
pvs:物理ボリュームの概要情報を表示します。vgs:ボリュームグループの概要情報を表示します。lvs:論理ボリュームの概要情報を表示します。- より詳細な情報を確認するには、それぞれ
pvdisplay、vgdisplay、lvdisplayを使用できます。
sudo pvs
sudo vgs
sudo lvs
LVMを使用すべき状況
- 開発/テストサーバー:ディスクスペースのサイズを頻繁に変更する必要があるが、作業を中断させたくない場合。
- 大量のログを生成するサービス:例えば、トラフィックの多いWebサーバーはログファイルを非常に速く生成します。LVMは、容量不足を心配することなく
/var/logパーティションを簡単に拡張するのに役立ちます。 - データベース:データベースのサイズが予測不能に増大する可能性がある場合、LVMは容量管理に理想的なソリューションです。
- ホームラボ/個人VPS:小さなディスクを最大限に活用し、ストレージ構成を自由に調整したい場合。
縮小時の注意
もう一度強調したいのは、論理ボリュームを縮小する前に、常にデータを徹底的にバックアップしてください!このプロセスでのわずかな誤りが、回復不能なデータ損失につながる可能性があります。このステップを決して軽視しないでください。本番環境で適用する前に、時間をかけてドキュメントをよく読み、各ステップを完全に理解してください。
この記事を通じて、あなたがLinuxシステムでのLVM管理について全体像を把握し、より自信を持てるようになったことを願っています。LVMは高い効率性を提供します。正しく使用すれば、ストレージスペースの管理とシステム最適化において、多くの時間と労力を節約できるでしょう。
