|
|||||
Linux技術トレーニング 基本管理コース II第2章 ディスク管理〜上級
3. LVM(Logical Volume Manager)3-1. LVM(Logical Volume Manager)について(1)LVMについて
LVMの概要
LVM(Logicl Volume Manager)は、ユーザーが扱うパーティションとして、論理ボリュームと呼ばれる単位でパーティションを提供して物理的なディスクの存在を隠蔽します。その結果、物理的なディスクの増設や変更などがユーザーやアプリケーションに対して隠蔽されてディスクデバイスの管理の柔軟性を向上させます。 LVMの構成例LVMの構成要素 LVM(Logical Volume Manager)では、以下の要素から構成されます。
次から、それぞれについて説明していきます。
(2)物理ボリュームの作成
物理ボリュームの作成
物理ボリュームはパーティション単位で管理されます。したがって、1つのディスクを1パーティションとし1つの物理ボリュームとしても構わないし一部分だけをLVM用のパーティションとして確保して、1つの物理ボリュームとしても構いません。もちろん、1つのディスクを複数のパーティションに分割して、複数の物理ボリュームを作成することもできます。 次に物理ボリュームの作成方法を説明します。 LVM用のパーティションとするためには、最初に/sbin/fdiskを使用して、作成したパーティションのIDを0x8Eに設定します。 # /sbin/fdisk /dev/sdc コマンド (m でヘルプ): p Disk /dev/sdc: 1073 MB, 1073741824 bytes 64 heads, 32 sectors/track, 1024 cylinders Units = シリンダ数 of 2048 * 512 = 1048576 bytes デバイス ブート 始点 終点 ブロック ID システム /dev/sdc1 1 96 98288 83 Linux コマンド (m でヘルプ): t Selected partition 1 16進コード(Lコマンドでコードリス表示):8e 領域のシステムタイプを 1 から 8e (Linux LVM) に変更しました コマンド (m でヘルプ): p Disk /dev/sdc: 1073 MB, 1073741824 bytes 64 heads, 32 sectors/track, 1024 cylinders Units = シリンダ数 of 2048 * 512 = 1048576 bytes デバイス ブート 始点 終点 ブロック ID システム /dev/sdc1 1 96 98288 8e Linux LVM 続いて、/usr/sbin/pvcreateでパーティションを物理ボリュームとして初期化します。
# /usr/sbin/pvcreate /dev/sdc1
Physical volume “/dev/sdc1” successfully created
LVMの領域として利用するすべての物理ボリュームに対して、初期化を行います。初期化が完了した物理ボリュームは、/sbin/pvscanで確認できます。
# /sbin/pvscan
PV /dev/sdb1 lvm2 [95.76 MB]
PV /dev/sdc1 lvm2 [95.79 MB]
Toral: 2 [191.55 MB]/in use:0[0 ]/ in no VG: 2 [191.55 MB]
(3)ボリュームグループの作成
ボリュームグループの作成
すべての物理ボリュームの準備ができたら次にそれらの物理ボリュームをもとにボリュームグループを作成します。ボリュームグループは仮想的なディスクに相当すると考えることができます。ボリュームグループの作成は/usr/sbin/vgcreateで行います。
# /usr/sbin/vgcreate Volume00 /dev/sdb1 /dev/sdc1
Volume group “Volume00” successfully created
「Volume00」はボリュームグループ名を表します。「 /dev/sdb1 /dev/sdc1 」は物理ボリュームです。これより以前に、/usr/sbin/pvcreateコマンドで物理ボリュームとして初期化されたパーティションです。 作成したボリュームグループの情報は/sbin/vgscanで確認できます。
# /sbin/vgscan
Reading all physical volumes. This may take a whiel…
Found volume group “Volume00” using metadata type lvm2
PE(Physical Extent)
ボリュームグループはPEという単位の集まりとして管理されます。PEの大きさはデフォルトでは4MBです。また1つのボリュームグループは最大64K個までのPEをもてます。したがってデフォルトでは1つのボリュームグループの大きさは最大で256GBになります。もしこのサイズを超えるボリュームグループを作成する場合は、vgcreateコマンドの -s オプションでPEのサイズを大きなものに設定することで可能です。
(注)
(4)論理ボリュームの作成
論理ボリュームの作成
ボリュームグループを作成したら、次に論理ボリュームを作成します。論理ボリュームはパーティションに相当するもので、ボリュームグループ全体を1つの論理グループにすることもできるし、複数の論理ボリュームに分割して利用することもできます。 論理ボリュームの作成は、/usr/sbin/lvcreateで行います。論理ボリュームのサイズ(MB単位)、論理ボリューム名、論理ボリュームを作成するボリュームグループ名を指定します。
# /usr/sbin/lvcreate -L 50M -n LogVol01 Volume00
Rounding up size to full physical extent 52.00 MB
Logical Volume “LogVol01” created
ここで、「 -L 50M 」は作成する論理ボリュームの大きさの指定です。上の例ではPEの関係で52MBに丸められてます。「 -n LogVol01 」は作成する論理ボリュームの名前の指定します。「 Volume00 」は論理ボリュームを作成するボリュームグループ名です。 論理ボリュームの確認作成した論理ボリュームの情報は/usr/sbin/lvdisplayで確認できます。 # /usr/sbin/lvdisplay /dev/Volume00/LogVol01 --- Logical volume --- LV Name /dev/Volume00/LogVol01 VG Name Volume00 LV UUID wchfwk-6V2n-wrKb-v8D7-LVdS-JXPB-01uzRb LV Write Access read/write LV Status available # open 0 LV Size 52.00 MB Current LE 13 Segments 1 Allocation inherit Read ahead sectors 0 Block device 253:0
論理ボリュームの名前(LV Name)が指定した”LogVol01”ではなく、/dev/ボリュームグループ名/論理ボリューム名の形式になっていることに注意してください。これは/usr/sbin/lvcreateで論理ボリュームを作成したときに自動的にこの名前のデバイスファイル名が作成されたということです。
論理ボリュームの利用
作成した論理ボリュームを利用するためには、lvcreate時に表示しされた論理ボリューム用のデバイスファイルを利用します。通常は/dev/ボリュームグループ名/論理ボリューム名にデバイスファイルが作成されます。 通常のファイルシステムとして利用する場には、ファイルシステムを作成してからマウントします。次の例は論理ボリューム /dev/Volume00/LogVol01 を XFSファイルシステムとして/xfsにマウントして利用する例です。 # /sbin/mkfs -t xfs /dev/Volume00/LogVol01 # /bin/mount -t xfs /dev/Volume00/LogVol01 RAWデバイスとして利用する場合には、RAWデバイスへのバインドを行ってから、/dev/raw/raw[n]のデバイスファイル経由で利用してください。
# /usr/bin/raw /dev/raw/raw1 /dev/Volume00/LogVol01
/dev/raw/raw1: bound to major 253, minor 0
システム起動時に自動的にマウントするには/etc/fstabに設定をしてください。次の設定はXFSファイルシステムとして作成された論理ボリューム/dev/Volume00/LogVol01 を/xfsディレクトリにマウントするものです。
/dev/Volume00/LogVol01 /xfs xfs defaults 0 0
(5)スナップショット
スナップショット
LVMにはスナップショットと呼ばれる機能が備えられています。これは、論理ボリュームのデータをスナップショットとして取得した時点で、読み取り専用の別の論理ボリュームとしてコピーしておく機能です。スナップショットは論理ボリューム上のすべてのデータのコピーを行うのではなく、元データへのリンク情報のみを作成するため、非常に高速に動作します。スナップショットの取得後に、元データが更新された場合、更新される前のデータをスナップショット領域に保存します。そのため、通常は元データの領域よりも少ない領域(一般的には10%〜20%程度)があればスナップショットとして利用できます。 さらに、スナップショットに対しては読み込みしかできないため、データが更新されるといった危険がありません。このため、ファイルシステムのバックアップを取得する際に、まずスナップショットを取得して、バックアップ操作はスナップショットに対して行うことで、バックアップ実行中のデータ更新も発生しなくなるため、バックアップデータの一貫性が保たれます。このようにスナップショット機能はファイルシステムのバックアップを取得する目的に非常に合致します。
スナップショットの取得
スナップショットの取得は、/usr/sbin/lvcreateに-snapshotオプションを指定して行います。スナップショットにアクセスするためのデバイスファイル名を-nオプションで指定します。また、スナップショット領域として利用するサイズを-Lオプションで指定します。
# /usr/sbin/lvcreate -snapshot -L 50M -n snap1 /dev/Volume00/LogVol01
Rounding up size to full physical extent 52.00 MB
Logical volume "snap1" created
スナップショットのデバイスファイル名は snap1としてしてますが、実際には論理ボリュームと同様に、/dev/ボリュームグループ名/スナップショット名となることに注意してください。 スナップショットの削除取得したスナップショットを削除するには通常の論理ボリュームと同様に/usr/sbin/lvremoveで削除します。 # /usr/sbin/lvremove /dev/Volume00/snap1 Do you really want to remove active logical volume "snap1"? [y/n]: y Logical volume "snap1" successfully removed
XFSファイルシステム更新の停止(推奨)
MIRALCE LINUX V3.0の場合 XFSファイルシステムのスナップショットを取る前に、/usr/sbin/xfs_freezeで一時的にファイルシステムへの更新を停止することが推奨されます。/usr/sbin/xfs_freezeに-fオプションを指定することで、XFSファイルシステムへの新たな更新を禁止します。スナップショット取得後には、/usr/sbin/xfs_freezeに-uオプションを指定して、XFSファイルシステムの更新を許可します。
# /usr/sbin/xfs_freeze -f /xfs
# /usr/sbin/lvcreate --snapshot -L 50M --name snap2 /dev/Volume00/LogVol01
# /usr/sbin/xfs_freeze -u /xfs
MIRALCE LINUX V4.0の場合 snapshot取得の際、xfs_freezeによるファイルシステムの更新の停止は必要ありません。行った場合、snapshotの取得が正常に行えませんのでご注意下さい。 マウント時にnouuidオプションを指定取得したスナップショットをマウントする場合には、mount(8)のオプションにnouuidを指定してください。これは、XFSファイルシステムに設定されているUUID(Universally Unique Identifier)が重複するためにマウントが許可されない問題を回避するために、UUIDの重複を許可するためのオプションです。 # mount -o nouuid /dev/Volume00/snap1 /mnt/snap/
ディスクの追加
LVMの利点が特に発揮されるのは、ディスクの追加や削除といった状況が発生したときです。直接パーティションを利用していた場合、あるパーティションの容量を拡大したいと思っても、新しいディスクに容量を拡大したパーティションを準備し、すべてのデータをコピーしてから、新しいディスクに交換するといった手順が必要となってしまいます。これに対して、LVMを利用していた場合、既存のディスクを残したまま、新たなディスクを追加して、パーティションを拡大できます。 次に追加の手順を説明します。
(6) LVM ディスクの追加
ここでは、前述の環境に新たなディスク(/dev/sdd)を追加する手順を説明します。最初に新しいディスクにパーティション(/dev/sdd1)を作成して、物理ボリュームを作成します。 # /usr/sbin/pvcreate /dev/sdd1
次に、/usr/sbin/lvextendで、容量を拡大したい論理ボリュームのサイズを拡大します。下記の例では、論理ボリュームLogVol01に50MBの容量を追加しています。-Lオプションに指定する単位には、「M」(メガバイト)のほか、「G」(ギガバイト)、「T」(テラバイト)も使えます。また、「+」を指定することを忘れないようにしましょう。
# /usr/sbin/lvextend -L +50M /dev/Volume00/LogVol01
Rounding up size to full physical extent 52.00 MB
Extending logical volume LogVol01 to 104.00 MB
Logical volume LogVol01 successfully resized
また、オプションとしてパーティションを指定することで拡大する領域を確保するディスクを指定できます。
# /usr/sbin/lvextend -L +20M /dev/Volume00/LogVol01 /dev/sdd1
Extending logical volume LogVol01 to 124.00 MB
Logical volume LogVol01 successfully resized
最後に論理ボリュームの実際のファイルシステムのサイズを変更する必要があります。ファイルシステムのサイズ変更は、ファイルシステムの情報を変更するので、作業の際には安全のため論理ボリュームはアンマウントしてから行います。 ext3ファイルシステムの場合ext3ファイルシステムのサイズ変更は/sbin/resize2fsで行うことができます。論理ボリュームのサイズに合わせたパーティションとするためには、特にサイズを指定する必要はありません。作業に先だって、ファイルシステムの整合性をチェックするために、/sbin/e2fsckを実行しておきます。 # /sbin/e2fsck -f /dev/Volume00/LogVol01 # /sbin/resize2fs -p /dev/Volume00/LogVol01 resize2fs 1.35 (28-Feb-2004) Resizing the filesystem on /dev/Volume00/LogVol01 to 106496 (1k) blocks. Begin pass 1 (max = 6) Extending the inode table XXXXXXXXXXXXXXXXXXXXXXXX The filesystem on /dev/Volume00/LogVol01 is now 106496 blocks long. 以上でext3ファイルシステムのサイズ拡大は完了です。再度マウントしてから利用してください。 XFSファイルシステムの場合
XFSファイルシステムのサイズ変更は、xfs_growfs(8)で行うことができます。xfs_growfs(8)でサイズを拡大する場合、ファイルシステムをマウントした状態でなければなりません。-Dオプションでサイズを指定しなければ、利用できる最大サイズ(パーティションのサイズ)まで、ファイルシステムを拡大します。
# /usr/sbin/xfs_growfs /xfs
meta-data = /xfs isize=512 agcount=3,agsize=4096 blks
= sectsz=512
Data = bsize=4096 blocks=12288, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=1
Naming = version 2 bsize=4096
Log = internal bsize=4096 blocks=1200,version=1
= sectsz=512 sunit=0 blks
Realtime = none extsz=65536 blocks=0, rtextents=0
data blocks changed from 12288 to 31744
以上でXFSファイルシステムのサイズ拡大は完了です。すでにマウント状態なのでそのまま継続して使用できます。 Reiserファイルシステムの場合
Reiserファイルシステムのサイズ変更はresize_reiserfs(8)で行うことができます。サイズの拡大は、ファイルシステムをマウントした状態で行うことができます。-sオプションで拡大するサイズを指定しなければ、利用できる最大サイズ(パーティションのサイズ)までファイルシステムを拡大します。
# /sbin/resize_reiserfs /dev/Volume00/LogVol01
resize_reiserfs 3.6.19 (2003 www.namesys.com)
resize_reiserfs: On-line resizing finished successfully.
RAWデバイスの場合
RAWデバイスには、ファイルシステムのサイズのような情報はありません。パーティションのサイズがそのままRAWデバイスで利用可能な最大サイズとなります。したがって、論理ボリュームを拡大すれば、そのまま拡大したサイズを利用できます。
(7)LVM ディスクの交換
ディスクの交換
システム運用中には、現在利用中のディスクを別のディスクに変更したいことがあります。LVMを使って運用している場合、LVM用に利用中の物理ボリュームのデータを、他の空いている物理ボリュームに移すことができます。したがって、利用中のディスクを交換したい場合には、まず利用中の物理ボリュームのデータを他の物理ボリュームに移動させます。そして、未使用状態になったディスクをLVMの管理から切り離します。物理ボリュームの利用状況は/usr/sbin/pvdisplayで確認できます。PE(Physical Extent)のAllocated PEの項目が利用中のエクステントの数です。この利用中のエクステントを、他の物理ボリュームに移すことが最初の作業です。
# /usr/sbin/pvdisplay /dev/sdb1
--- Physical volume ---
PV Name /dev/sdb1
VG Name Volume00
PV Size 88.00 MB / not usable 0
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 22
Free PE 0
Allocated PE 22
PV UUID z806zf-lCTk-RZrP-hEVn-l983-11Rm-H8OmCk
最初に安全のため、利用中の論理ボリュームのファイルシステムをアンマウントします。 次に/usr/sbin/pvmoveでその他の空いている物理ボリュームに利用中のエクステントを移動させます。/usr/sbin/pvmoveは、さまざまなオプションによって、移動させる物理ボリュームのエクステントを指定できます。今回は、/dev/sdb1に割り当てられているすべてのエクステントを/dev/sdd1に移動させます。
# /usr/sbin/pvmove /dev/sdb1 /dev/sdd1
/dev/sdb1: Moved: 86.4%
/dev/sdb1: Moved: 100.0%
この時点で、エクステントの移動が完了したので、再度ファイルシステムをマウントして利用できます。割り当て済みのエクステントがなくなった物理ボリュームは、ボリュームグループから解放できます。ボリュームグループから解放するために、/usr/sbin/vgreduceで物理ボリュームをボリュームグループから解放します。
# /usr/sbin/vgreduce Volume00 /dev/sdb1
Removed "/dev/sdb1" from volume group "Volume00"
以上で、物理ボリュームが解放されたので、/sbin/pvscanで状態がinactiveになっていることを確認してから、ディスクを取り外します。 # /sbin/pvscan PV /dev/sdc1 VG Volume00 lvm2 [88.00 MB / 52.00 MB free] PV /dev/sdd1 VG Volume00 lvm2 [92.00 MB / 4.00 MB free] PV /dev/sdb 1 lvm2 [88.00 MB] Total:3 [268.00 MB]/ in use: 2 [180.00 MB]/ in no VG: 1 [88.00 MB]
(8)LVM ディスクの開放
ディスクの開放
LVMで利用中のディスクをすべて解放するには、次の手順で行います。 最初に論理ボリューム上で利用中のファイルシステムをアンマウントします。続いて、/usr/sbin/lvchangeで論理ボリュームの利用を停止し、/usr/sbin/lvremoveで論理ボリュームを解放します。論理ボリュームの利用を停止するためには、/usr/sbin/lvchangeの-aオプションに「n」を指定します。 # /usr/sbin/lvchange -a n /dev/Volume00/LogVol01 # /usr/sbin/lvremove /dev/Volume00/LogVol01 Logical volume "LogVol01" successfully removed ボリュームグループ上で使用しているすべての論理ボリュームを削除すれば、ボリュームグループを削除できるようになります。ボリュームグループの削除は/sbin/vgchangeでボリュームグループの利用を停止して、/sbin/vgremoveでボリュームグループを解放します。ボリュームグループの利用を停止するためには、/sbin/vgchangeの-aオプションに「n」を指定します。 # /sbin/vgchange -a n Volume00 0 logical volume(s) in volume group "Volume00" now active # /usr/sbin/vgremove Volume00 Volume group "Volume00" successfully removed 以上で、関連する物理ボリュームも利用停止状態になったので、ディスクを自由に変更することが可能です。通常のパーティションとして利用したい場合には、/sbin/fdiskでパーティションのIDを変更してから利用してください。 |