特集
2003/08/08 13:00:00 更新
特集:LVMによるディスクパーティションの動的化(後編) (3/5)
LVMの操作には2つのシーンがある
ここから先は、LVMの操作に関する詳細な設定を紹介していこう。LVの削除にまつわる問題や、VG/PVの削除という問題を含んでいる。
LVMの操作は、「その場でできること」と「前処理をしておかないといけないこと」の2つに分かれている。
例えば、VGへPVを追加することはいつでも行えるが、VGそのものを削除しようという場合は、手軽には行えない。その理由は、対象となるVGから生成されているLVを、マウントしているかもしれないからだ。もしも、VG自体を消そうとする場合には、
1. 生成しているLVを全て削除する
2. VGを非活性状態にして
3. VGを削除する
と、手順を追う必要がある。LVの削除は、「lvremove」コマンドで行う。
# /sbin/lvremove /dev/system/work lvremove -- do you really want to remove "/dev/system/work"? [y/n]: y lvremove -- doing automatic backup of volume group "system" lvremove -- logical volume "/dev/system/work" successfully removed |
今回、VG「system」には、ここで削除をしたLV「work」のみの存在なため、この状態ではLVが無くても削除可能だ。しかし、VGの削除を行うための「vgremove」コマンドを用いても、
# /sbin/vgremove system vgremove -- ERROR: can't remove active volume group "system" |
とエラーになってしまい削除に失敗する。VGそのものが活性状態ではならないということだ。そこで登場するのが「vgchange」コマンドである。このコマンドにより、非活性状態(-a n)へ移行でき、削除が行えるようになる。次の通りだ。
# /sbin/vgchange -a n system vgchange -- volume group "system" successfully deactivated # /sbin/vgremove system vgremove -- volume group "system" successfully removed |
これで利用していたPV(/dev/hda7、/dev/hda8)は、別のVGの作成や追加にまわすことが可能である。このような手順は、LVやVGの状態によりうまくいかない場合があるが、エラー出力内容をよく見てほしい。
PV移動とVGからの取り外し方
「ディスクの動作がおかしくなりだした」などの理由で、現在LVMに利用しているディスクを取り外したい場合、そのディスクのLVM上からデータを退避させなければならない。この手順を知っておけば、PV間でのデータ移行も可能になるので、ぜひ覚えておこう。
VGにPVを追加する処理(vgextend)は、比較的容易に行えるものの、VGからPVを取り外すには若干の問題が生じる。なぜならば、取り外したいPV上のPEが利用されているかもしれないからだ。例えば、
# /sbin/vgcreate system /dev/hda7 /dev/hdc vgcreate -- INFO: using default physical extent size 4 MB vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte vgcreate -- doing automatic backup of volume group "system" vgcreate -- volume group "system" successfully created and activated |
とすると、VG名「system」には、PVとして/dev/hda7と/dev/hdcが含まれていることが分かり、
# /sbin/lvcreate -L2g -nwork system lvcreate -- doing automatic backup of "system" lvcreate -- logical volume "/dev/system/work" successfully created |
2GBの領域を切り出すよう指定した場合には、この2GBが/dev/hda7上に作られたのか、それとも/dev/hdc上に作られたのか、さらに両方をまたがって作成されたのかが分からないのだ。
この状態で/dev/hda7をVGから外してしまうと、/dev/hda7上にあったデータはすべてロストすることになる。そのため、VGからPVを取り外すための「vgreduce」が失敗してしまうことになる。
# vgreduce -v system /dev/hda7 vgreduce -- locking logical volume manager vgreduce -- checking volume group name "system" vgreduce -- checking volume group "system" existence vgreduce -- checking volume group "system" activity vgreduce -- reading data of volume group "system" from disk(s) vgreduce -- reducing VGDA structures of volume group "system" vgreduce -- ERROR: can't reduce volume group "system" by used physical volume "/dev/hda7" |
この問題に対処するべくものが「PVの移動」だ。これは、同じVG上に指定したPV上のPEを移動させることを意味する。この方法でPVから使用中のPEが無くなれば、対象となるPVを取り外すことが可能だ。
それでは実際にPVを移動させてみよう。そのために利用するコマンドが「pvmove」である。今回は、/dev/hda7を外すために、/dev/hda7内で使用中のPEを、ほかのPVへ移動させることにしよう。現在、/dev/hda8もVGに含めた状態で、「vgdisplay -v」指定により、各PV内の使用状況は次の通りになっている。
--- Physical volumes --- PV Name (#) /dev/hdc (2) PV Status available / allocatable Total PE / Free PE 1030 / 1027 PV Name (#) /dev/hda7 (1) PV Status available / allocatable Total PE / Free PE 1024 / 970 PV Name (#) /dev/hda8 (3) PV Status available / allocatable Total PE / Free PE 1024 / 569 |
つまり、/dev/hda7には54個のPE(1024-970=54)が使用中ということだ。この54個のPEをほかのVGへ追い出せれば、/dev/hda7は削除可能となるわけだ。前述のpvmoveを使おう。
# pvmove -v /dev/hda7 pvmove -- checking name of source physical volume "/dev/hda7" pvmove -- locking logical volume manager ... pvmove -- moving physical extents in active volume group "system" pvmove -- WARNING: if you lose power during the move you may need to restore your LVM metadata from backup! pvmove -- do you want to continue? [y/n] y pvmove -- starting to move extents away from physical volume "/dev/hda7" pvmove -- checking for enough free physical extents in "system" pvmove -- /dev/hda7 [PE 3 [work [LE 3]] -> /dev/hda8 [PE 0] [1/54] pvmove -- /dev/hda7 [PE 4 [work [LE 4]] -> /dev/hda8 [PE 1] [2/54] ... 移動中 pvmove -- /dev/hda7 [PE 510 [work [LE 510]] -> /dev/hdc [PE 55] [53/54] pvmove -- /dev/hda7 [PE 511 [work [LE 511]] -> /dev/hdc [PE 56] [54/54] pvmove -- changing lvmtab pvmove -- checking volume group name "system" pvmove -- checking volume group consistency of "system" pvmove -- checking existence of "/etc/lvmtab.d" ... pvmove -- unlocking logical volume manager pvmove -- 54 extents of physical volume "/dev/hda7" successfully moved |
表示には移動中のPV数が表示され、完全に移動できたボリュームは、次のように指定することで外すことができる。
# vgreduce system /dev/hda7 vgreduce -- doing automatic backup of volume group "system" vgreduce -- volume group "system" successfully reduced by physical volume: vgreduce -- /dev/hda7 |
この方法であれば、古いハードディスクから新しいディスクにデータを移すことも可能だ。
さらに、比較的起きそうなシチュエーションとして、既存の「/var」ディレクトリをLVMに変更する例を挙げよう。標準設定であれば、ログやWebページコンテンツで容量が増える可能性も高いスペースであるため、サイズ変更やディスク交換の行いやすいLVMにすることで管理を楽にすることができるディレクトリの1つだ。
この場合には、前述するVG「system」を転用させることにしよう(なお、ここではhdcのアクセススピードが遅いため、ディスク「/dev/hdc」を外し、実パーティション「/dev/hda7」と「/dev/hda8」で構成することにする)。LV名をここでは「var」としておこう。ディレクトリ名そのままで割り振っておいたほうが分かりやすい。以下の指定は、1GBのLV「var」をVG「system」上に作成という意味だ。
$ sudo /sbin/lvcreate -nvar -L1g system lvcreate -- doing automatic backup of "system" lvcreate -- logical volume "/dev/system/var2" successfully created $ sudo /sbin/mke2fs -j /dev/system/var2 mke2fs 1.32 (09-Nov-2002) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 131072 inodes, 262144 blocks 13107 blocks (5.00%) reserved for the super user First data block=0 8 block groups 32768 blocks per group, 32768 fragments per group 16384 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 35 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. $ sudo /sbin/tune2fs -c0 -i0 /dev/system/var2 tune2fs 1.32 (09-Nov-2002) Setting maximal mount count to -1 Setting interval between check 0 seconds |
なお、上記の例ではファイルシステムをext3にしているため、tune2fsでチェックのパラメータを操作追加している。この部分はフォーマットに利用するファイルシステムにより異なるため注意をしてほしい。
ここでいちどランレベルを1に下げる(落とす)必要があり、なぜならば作業中に/varへの書き込みが発生するのが好ましくないからだ。続けて、次のように/varのダンプイメージを作成し、マウント操作をする。
# dump -0f /tmp/var.dump /var # mount /dev/system/var /mnt |
さらにマウントしたLV上で、ダンプイメージを展開して戻せばよい。
# cd /mnt # restore -rf /tmp/var.dump # mv var/* . # cd / # mv var var.old # mkdir var |
ここでは、念のために元のディレクトリを残しつつvarを作成後、fstabを修正しよう。
/dev/system/var /var ext3 defaults 1 2 |
この状態で再度全マウントを行い(mount -a)、/varに問題がないかを確認した後、元のランレベルに戻せばよい。後日リサイズする際には、ランレベル1へと落とした後、/varをいちどアンマウント後、e2fsadmを使ってリサイズ、そして元のランレベルへ戻せばよい。
[佐藤大輔,ITmedia]
Copyright © ITmedia, Inc. All Rights Reserved.