Linuxでは、ストレージとファイルシステムの管理が非常に難しい場合があります。 また、データを移動するために多くの異なるコマンドが必要になることがよくあります。
従来のストレージは通常、3つの異なるレイヤーで構成されています:物理ディスク (HDDまたはSSDのどちらでも)、論理パーティション その上に作成され、ファイルシステム パーティションでフォーマットされています。
ただし、これらの3つのレイヤーは通常、緊密に結合されています。既存のパーティションを縮小して新しいパーティションを作成するのは非常に難しい場合があります。
同様に、システムに新しいディスクを追加する場合、ファイルシステムを拡張することは非常に困難です。あるディスクから別のディスクにデータを移動する必要があり、データの損失につながることがあります。 。
幸いなことに、Linuxでストレージを管理するために使用できるツールまたは抽象化があります: LVM 。
LVM 、論理ボリューム管理の略 は、システムの実行中に既存のボリュームを拡張、縮小したり、既存のディスクを交換したりできるツールのセットとして提供されます。
このチュートリアルでは、 LVMについて学習します。 そして、それらをシステムに簡単に実装する方法。
LVMレイヤーの説明
始める前に、システム上でLVMがどのように設計されているかを十分に理解することが重要です。 。
以前に通常のストレージデバイスを扱ったことがある場合は、ディスクとファイルシステムの関係をすでに知っています。
Linuxでは、物理ディスクがあります これは、最初に挿入されたときにudevによって自動的に検出および管理されます。
これらのディスクでは、パーティションを作成できます 利用可能な人気のあるユーティリティ(fdisk、partedまたはgparted)の1つを使用します。
最後に、あなたは フォーマットファイルシステム ファイルを保存するためにそれらのパーティションに。
LVMを使用すると、ストレージの設計が少し異なります。
パーティションとファイルシステムの間には、物理ボリューム、ボリュームグループ、論理ボリュームの3つの追加レイヤーがあります。
物理ボリューム
LVMを使用する場合、物理ボリュームはハードドライブにすでに存在するパーティションを表すことを意味します。
システム管理者が「物理ボリューム」と呼ぶ場合、多くの場合、システムにデータを保存している実際の物理デバイスを意味します。
物理ボリュームには、物理パーティションと同じ方法で名前が付けられます : / dev / sda1 最初のハードドライブの最初のパーティションの場合、 / dev / sdb1 2番目のドライブの最初のパーティションなど。
ボリュームグループ
物理ボリュームのすぐ上にあるボリュームグループは、複数の物理ボリュームがグループ化されて1つの単一ボリュームを形成していると見なすことができます。
比喩的に言えば、ボリュームグループはストレージバケットと見なすことができます :これらは、既存の論理ボリュームを拡張したり、新しい論理ボリュームを作成したりするために使用できるさまざまな物理ボリュームのプールです。
ボリュームグループには命名規則はありませんが、前に「vg」プレフィックス(「 vg-storage 」が付いていることが一般的に認められています。 「、「 vg-drives 」など)
論理ボリューム
最後に、論理ボリュームは、ボリュームグループとデバイスでフォーマットされたファイルシステム間の直接リンクを意味します。
1対1 ファイルシステムとの関係であり、それらは基本的にボリュームグループのパーティションを表します。
論理ボリュームにマウントポイントと同じ名前が付けられている場合でも、それらは2つの異なる概念であり、論理ボリュームはファイルシステムとはまったく異なるエンティティです。
注 :論理ボリュームを拡張しても、たとえばファイルシステムが自動的に拡張されるわけではありません。
標準のディスク管理に対するLVMの利点
論理ボリューム管理は、Linuxでの通常のディスク管理に関連するほとんどの欠点を修正するために最初に構築されました。
LVMの主な利点の1つは、システムの実行中にスペースを再構築できることです。
ライブストレージの変更
過去にお気づきかもしれませんが、ホスト上のストレージは緊密に結合されています ディスクに書き込まれたパーティションに。
その結果、パーティションを再フォーマットしたり、ファイルシステムを別のパーティションに再アセンブルしたりすると、システム管理者はシステムを再起動する必要がありました。 。
これは主に、カーネルがパーティションテーブルをライブで読み取ることができず、システムのさまざまなパーティションをプローブできるようにするために完全に再起動する必要があるためです。
実稼働サーバーを使用している場合、これは明らかに大きな問題になる可能性があります。Webサイトがこのサーバーで実行されている場合、Webサイトがダウンしないと再起動できません。
ウェブサイトがダウンしている場合、それはおそらく顧客のニーズに応えることができず、お金の損失につながることを意味します。
LVMは、通常のパーティションの上に抽象化レイヤーを構築することで、この問題を解決します。 :通常のパーティションを処理していない場合は、パーティションテーブルを再度読み取る必要はなく、デバイスのマッピングを更新するだけです。
この設計上の選択により、ストレージ管理はソフトウェア間になります。 問題があり、少なくとも直接ではなく、ハードウェアに結び付けられていません。
複数のディスクにスペースを広げる
LVMのもう1つの優れた点は、複数のディスクにデータを簡単に分散できることです。 。
前に示した図を見ると、ファイルシステムとパーティションの間に強い結合があることがわかります。その結果、データを複数のディスクに保存することは非常に困難です。
LVMは、この問題の優れたソリューションとして提供されます。論理ボリュームは中央のボリュームグループに属しています 。
ボリュームグループが複数のディスクで構成されている場合でも、自分で管理する必要はありません。デバイスマッパーが自動的に管理します。
これは、ファイルシステムを拡張する場合だけでなく、ファイルシステムを縮小する場合や、ある物理デバイスから別の物理デバイスにデータを転送する場合にも当てはまります。
LVM物理ボリュームの管理
このセクションでは、システム上の物理ボリュームを表示、作成、または削除するためにコマンドを使用します。
既存の物理ボリュームを表示する
Linuxで既存のストレージデバイスを表示するには、「lvmdiskscan」コマンドを使用する必要があります。
$ sudo lvmdiskscan
注 :LVMユーティリティがホストにインストールされていない場合、たとえば「コマンドが見つかりません」エラーが発生した場合は、rootとして「apt-getinstalllvm2」を実行してLVMプログラムをインストールする必要があります。
「lvmdiskscan」を実行すると、ホストで使用可能なさまざまなディスクが表示されます。
それらのディスクには、それらのディスクに既に作成されているパーティションも表示されます。
最後に、おそらく最も重要な情報です。システム上に作成されたLVM物理ボリュームの数がわかります。
注 :これはLVMの柔軟性の重要なポイントです:ディスク全体またはそれらのディスクのパーティションから物理ボリュームを作成できます。
この場合、LVM物理ボリュームが作成されていない新しいサーバーから始めています。
ホストに存在する既存の物理ボリュームを表示するには、「pvs」コマンドを使用することもできます 。
$ pvs
新しい物理ボリュームを作成する
Linuxでの新しい物理ボリュームの作成は非常に簡単です。「pvcreate」を実行し、作成する基盤となる物理デバイスを指定する必要があります。
$ pvcreate <device_1> <device_2> ... <device_n>
この例では、ホストに接続されている2番目のディスク(「sdb」)の物理ボリュームを作成するとします。
$ pvcreate /dev/sdb
注 :システムにすでにマウントされているデバイスから物理ボリュームを作成することはできません。結果として、「sda1」(通常はルートパーティションを格納する)をLVMに簡単に移行することはできません。
「lvmdiskscan」コマンドを再度実行すると、最初のセクションとは非常に異なる出力が表示されます。
$ lvmdiskscan
ご覧のとおり、ホストは、ディスク全体がLVM物理ボリュームとしてフォーマットされており、ボリュームグループに追加する準備ができていることを自動的に検出します。
同様に、「pvs」コマンドの出力も異なります。新しいディスクが、ホストで使用可能な物理ボリュームのリストに追加されました。
$ pvs
最初のボリュームグループが正常に作成されたので、次は最初のボリュームグループを作成します。
LVMボリュームグループの管理
システムがLVMボリュームで事前構成されていない限り、システム上にボリュームグループを作成しないでください。
ホスト上の既存のボリュームグループを一覧表示するには、引数なしで「vgs」コマンドを使用する必要があります。
$ vgs
vgcreateを使用してボリュームグループを作成する
ボリュームグループを作成する最も簡単な方法は、「vgcreate」を使用して、作成するボリュームグループの名前と、それに含める物理ボリュームを指定することです。
$ vgcreate <volume_name> <physical_volume_1> <physical_volume_2> ... <physical_volume_n>
この場合、「vg_1」ボリュームグループを作成するために使用される物理ボリューム(/ dev / sdb)はホスト上に1つだけあります。
$ vgcreate vg_1 /dev/sdb
既存のボリュームグループの一覧表示と表示
「vgs」を使用してシステム上の既存のボリュームグループを一覧表示すると、作成したばかりの「vg_1」ボリュームグループが表示されます。
$ vgs
引数がない場合、7つの異なる列が表示されます:
- VG :ホスト上のボリュームグループ名の説明;
- #PV :ボリュームグループで使用可能な物理ボリュームの数を表示します;
- #LV :同様に、ボリュームグループから作成された論理ボリュームの数;
- #SN :論理ボリュームから作成されたスナップショットの数;
- 属性 :ボリュームグループの属性を説明します(書き込み可能の場合はw、サイズ変更可能の場合はz、「通常」の場合はn)。
- VSize :ボリュームグループのGB単位のボリュームサイズ;
- VFree :ボリュームグループで使用可能なスペース
既存のボリュームグループに関する詳細情報を取得する場合は、「vgdisplay」コマンドを使用できます。
$ vgdisplay
$ vgdisplay <volume_group>
お気づきかもしれませんが、「vgdisplay」は単純な「vgs」コマンドよりもはるかに多くの情報を表示します。
出力の終わり近くに、「PhysicalExtentsSize」と「TotalPhysicalExtents」の略である「PESize」と「TotalPE」という名前の2つの列が表示されます。
内部的には、LVMは、パーティションのブロックサイズの概念と非常によく似たデータのチャンクである物理エクステントを管理します。
この場合、LVMは4.00 MiBの大きさのこのボリュームグループの物理エクステントを管理し、ボリュームグループには511の異なる物理エクステントがあります。計算により、明らかにサイズが2.00 GiBスペースになります(4 * 511 =2.044MiBまたは2.00GiB)。
実際には、物理エクステントについてあまり心配する必要はありません。LVMは、物理エクステントと論理ボリュームの間のマッピングが保持されていることを常に確認します。
最初のボリュームグループを作成したので、データを格納するための最初の論理ボリュームを作成します。
LVM論理ボリュームの管理
ボリュームグループに論理ボリュームを作成するには、「lvcreate」コマンドを使用して、論理ボリュームの名前とそれが属するボリュームグループを指定する必要があります。
使用するスペースを指定するには、「 -L」を使用する必要があります 」オプションを選択し、サイズを指定します(数値とその単位で構成されます)
$ lvcreate -L <size> <volume_group>
論理ボリュームに名前を付ける場合は、「-n」オプションを使用できます。
$ lvcreate -n <name> -L <size> <volume_group>
ここでも、「lvs」コマンドをsudoとして実行することで、新しく作成した論理ボリュームを一覧表示できます。
$ lvs
「lvs」コマンドを実行すると、さまざまな列が表示されます:
- LV :論理ボリュームの名前を表示します;
- VG :論理ボリュームが属するボリュームグループの説明;
- 属性 :論理ボリュームの属性を一覧表示します(書き込み可能の場合は「w」、継承の場合は「i」、割り当て済みの場合は「a」)。
- LSize :自明で、GiBで論理ボリュームのサイズを説明します;
他の列では、ミラー化されたスペースやストライプ化されたスペースの設定など、LVMの高度な使用法について説明しています。この基本的なチュートリアルでは、それらについては説明せず、より高度なチュートリアルで説明します。
論理ボリュームを作成したときに、気付かないうちにカーネルによっていくつかのアクションが実行されました:
- /devの下に仮想デバイスが作成されました :ボリュームグループ名(「vg_1」)にちなんで名付けられたフォルダに、論理ボリューム(「lv_1」)の名前にちなんで名付けられた仮想論理デバイスが作成されました
- 仮想デバイスは、/devで使用可能な「dm-0」デバイスへのソフトリンクです :「dm-0」は、論理ボリュームと実際のハードディスク間のマッピングを保持する仮想デバイスです。 (/ dev / sda、/ dev / sdbなど)
LVM論理ボリュームのフォーマットとマウント
新しく作成したスペースの使用を開始するための最後のステップは、論理ボリュームをフォーマットしてマウントすることです。
するために 論理ボリュームをフォーマットする 、「mkfs」コマンドを使用して、使用するファイルシステムを指定する必要があります。
$ mkfs -t <filesystem_type> <logical_volume>
この場合、論理ボリュームを「ext4」ファイルシステムとしてフォーマットしたい場合は、次のコマンドを実行します
$ mkfs -t ext4 /dev/vg_1/lv_1
論理ボリュームがフォーマットされたので、システム上の1つのフォルダーにマウントするだけです。
LVM論理ボリュームをマウントするには、「mount」コマンドを使用して、使用する論理ボリューム名とマウントポイントを指定する必要があります。
$ mount <logical_volume> <mount_point>
たとえば、ルートディレクトリの「/mnt」ディレクトリにファイルシステムをマウントする場合を考えてみましょう。
$ mount /dev/vg_1/lv_1 /mnt
ここで「lsblk」コマンドを実行すると、論理ボリュームがマウントされていることがわかります。
$ lsblk
おめでとうございます。これで、新しく作成したボリュームの使用を開始できます。
LVMを使用した既存のファイルシステムの拡張
LVMのユースケースとして、ファイルシステムのサイズを大きくすることがいかに簡単であるかを見てみましょう。 ホストに別のディスクを追加します。
ホストに別のディスクを追加すると、udevが自動的にそのディスクを選択し、名前を割り当てます。
システム上のディスクデバイスの名前を取得するには、必ず「lsblk」コマンドを実行してください。
$ lsblk
この例では、SATAコネクタに「sdc」という名前の新しいハードディスクを追加しました。
この新しいディスクをLVMレイヤーに追加するには、LVMストレージスタックの各レイヤーを構成する必要があります。
まず、この新しいディスクを「 pvcreate」を使用してホスト上の物理ボリュームとしてマークします。 」コマンド。
$ pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created
次に、新しく作成した物理ボリュームをボリュームグループに追加する必要があります。
既存のボリュームグループに物理ボリュームを追加するには、「 vgextend」を使用する必要があります 」コマンドで、追加するボリュームグループと物理ボリュームを指定します。
$ vgextend vg_1 /dev/sdc
Volume group "vg_1" successfully extended
「vgs」コマンドを使用すると、ボリュームグループが正常に拡張されたことを確認できます。
$ vgs
ご覧のとおり、最初のセクションと比較して、出力がわずかに変更されました。これで、2つの物理ボリュームができました。また、スペースは2GiBからほぼ3GiBに増加しました。
論理ボリュームはまだ大きくありません。プールで使用可能なスペースを確保するには、そのサイズを大きくする必要があります。
論理ボリュームのサイズを大きくするには、「lvextend」を使用し、論理ボリュームと「-L」オプションで取得するサイズを指定する必要があります。
$ lvextend -L +1G dev/vg_1/lv_1
ご覧のとおり、論理ボリュームのサイズと、論理ボリューム専用の物理エクステントの数が変更されました。
論理ボリュームを増やしても、ファイルシステムが論理ボリュームのサイズに合わせて自動的に増えるわけではありません。
ファイルシステムのサイズを大きくするには、「resize2fs」コマンドを使用して、拡張する論理ボリューム(この場合は「/ dev / vg_1 / lv_1」)を指定する必要があります
$ resize2fs /dev/vg_1/lv_1
これで、ファイルシステムのサイズを検査できます。論理ボリュームのサイズに一致するように拡張されました。おめでとうございます!
$ df -h
お気づきかもしれませんが、別のディスクを追加してファイルシステムのサイズを増やしましたが、システムを再起動したり、プロセスでファイルシステムをアンマウントしたりする必要はありませんでした。
LVMを使用した既存のファイルシステムの縮小
既存のファイルシステムを簡単に拡張する方法を確認したので、ファイルシステムを縮小する方法を見てみましょう。 スペースを減らすために。
論理ボリュームを縮小する前に、空き容量があることを確認してください 「df」コマンドを使用して論理ボリューム上で。
$ df -h
前のセクションの論理ボリュームを使用すると、まだ2GiB近くが利用可能です。
結果として、論理ボリュームから1GiBを削除できます。
論理ボリュームのサイズを縮小するには、「lvreduce」コマンドを実行し、「-L」オプションと論理ボリューム名を使用してサイズを指定する必要があります。
$ lvreduce -L <size> <logical_volume>
この場合、これは次のコマンドにつながります(1GiBの使用可能なスペースを削除するため)
$ lvreduce -L 1G /dev/vg_1/lv_1
注 :この操作にはリスクがないわけではないことに注意してください。論理ボリュームを減らすことを選択した場合は、既存のデータの一部を削除する可能性があります。
その結果、スペースはボリュームグループに割り当てられ、システム上の別の論理ボリュームで使用できるようになりました。
$ vgs
結論
このチュートリアルでは、 LVMについて学習しました 、論理ボリューム管理の略 、およびホスト上で適応可能なスペースを簡単に構成するためにどのように使用されるか。
物理的なボリュームを学びました 、ボリュームグループ および論理ボリューム ファイルシステムを簡単に拡張または縮小するために、それらをどのように一緒に使用できるか。
Linuxシステム管理に興味がある場合 、ウェブサイトにはそれ専用の完全なセクションがありますので、ぜひチェックしてください!