サーバを再構築しているんですが、毎回調べるのが面倒なのでメモしておきます。
Contents
LVM(Logical Volume Manager)
Linuxのストレージ管理の機能。使いこなすと、オンラインでのストレージ移動、パーテーションの拡張・縮小・結合など柔軟に出来る上、ソフトウェアミラーまで出来る。
※ただ、F/Wミラーや、Linuxの従来のミラーに比べると、信頼性が劣るっぽい。
PV操作
物理ディスクの操作。LVMで使う為のディスクを確保する。基本的にはパーテーションを切っておき、それをLVM用として確保するだけ。
# pvdisplay -v
ディスクの情報をを見る
# pvcreate パーティション
例)pvcreate /dev/md1p3
PV(LVM用物理ディスク)を作成する。
PVの削除
# pvremove パーティション
Labels on physical volume “パーティション ” successfully wiped.管理下に無いPVを見るとエラーになります。
# pvdisplay パーティション
Failed to find physical volume “パーティション “.
ちなみに、LVMはそれでディスクを使うだけならほとんど恩恵を受けることは無い。
PVのオンラインMove
pvmoveでデータをディスク間移動することができます。以下の例では、物理パーティション「/dev/sdf1」にあるVG「vg_m2d2」を「/dev/sdc2」へ移動します。
移動元PV
# pvdisplay /dev/sdf1
— Physical volume —
PV Name /dev/sdf1
VG Name vg_m2d2 ←VGがある。
PV Size 80.00 GiB / not usable 32.00 MiB
~略~
# pvdisplay /dev/sdc2
“/dev/sdc2” is a new physical volume of “100.00 GiB”
— NEW Physical volume —
PV Name /dev/sdc2
VG Name ←VGが無い
PV Size 100.00 GiB~略~
まず、 /dev/sdc2 をVG「vg_m2d2」に迎え入れます。
# vgextend vg_m2d2 /dev/sdc2
Volume group “vg_m2d2” successfully extendedpvdisplay /dev/sdc2
— Physical volume —
PV Name /dev/sdc2
VG Name vg_m2d2 ←加わった。
PV Size 100.00 GiB / not usable 32.00 MiB
そして、Moveします。ちなみに、このパーティションのLVはKVMで仮想サーバが利用していますが、サーバにはほとんど負荷が無く、仮想サーバが停止することはありません。サイズにもよると思いますが、10数秒毎に進捗が%で表示されます。
# pvmove /dev/sdf1 /dev/sdc2
/dev/sdf1: Moved: 0.00%
/dev/sdf1: Moved: 2.22%
/dev/sdf1: Moved: 4.43%~略~
/dev/sdf1: Moved: 99.33%
/dev/sdf1: Moved: 100.00%
移動が完了し、移動元のTotal PEとFree PEが同じになり、移動元が全て空き状態になります。
pvdisplay /dev/sdf1
— Physical volume —
PV Name /dev/sdf1
VG Name vg_m2d2
PV Size 80.00 GiB / not usable 32.00 MiB
Allocatable yes
PE Size 32.00 MiB
Total PE 2559
Free PE 2559
最後に、移動元のVGを切り離します。
# vgreduce vg_m2d2 /dev/sdf1
Removed “/dev/sdf1” from volume group “vg_m2d2”
VG操作
ボリュームグループ操作。複数のボリュームを一つのグループとする。1グループが1論理パーティションになる訳では無い。グループの中に複数の論理パーティションが作れる。普通は1グループ1論理でもいいし、1グループに全部つっこんでも構わない。仮想化をするなら、1ゲストOS1グループにした方がわかりやすい。
# vgdisplay -v VG名
VGの内容をみる。
VGの削除は以下のような感じ。所属するLVが削除されてないと消せないと思います。
vgremove VG名
Volume group ” VG名 ” successfully removed
VGの追加。
-sはエクステントサイズ。32Mにすると、2TBまでのpvを扱える。デフォは4M(256GBまで)。大きく取ると容量の無駄(残が32M以下だとそこが使われない)らしいけど、そのくらいなら気にしない。小さい方が性能が良くなるらしいけど、まぁ気にする程でも無いという話もある。
vgcreate -s 32M vg_vgname /dev/sda1
LV操作
論理ディスク操作。LVMは『必ず』PVをVGで纏めた上で、その中にLVを作る。VGを省略してPVに直接LVを作ったりは出来ない。
# lvdisplay VG名
VGに含まれるLVを表示する
# lvcreate -n LV名 –size サイズ VG名
例)lvcreate -n lv_root –size 100G vg_vm
「VG名」の中に「サイズ」分の大きさの「LV名」を作成する。
確保可能な領域を全て使う場合は「-l 100%FREE」を指定する。
LVはOSに直接マウントが可能。通常はUUIDを指定します(/devのパスでマウントしてもいいけど、仮想化環境は環境が変わる毎にデバイス名が変わりやすい。UUIDはデバイスに対して固定なので、その点のメリットがあります)
UUIDを調べる
- ディスクを使える状態にする(通常のパーティションはmkfsまでしないと次のコマンドでも見えません)
- blkidを実行→各ディスクのUUIDが表示される
- /etc/fstabに書く
例)/etc/fstab
/dev/mapper/vg_vm-lv_root / ext4 defaults 1 1
UUID=6a9e4aeb-(略) /boot ext4 defaults 1 2
注意)マウント済みパーティションのfstabを更新すると、シャットダウン時にアンマウントに失敗するので、「アンマウント→fstab編集→マウント」とした方がいいです。
LVは使用中でもサイズの変更ができます。しかもfdiskで作るようなパーティションのように、ディスク上の連続した領域を確保する必要はありません。なお、実行する前にアンマウントしてfsckをしておいた方が安全です。
# e2fsck -f /dev/vg_vm/lv_root
LVの削除。VGも指定しますが、このコマンドでVGは消せません。
# lvremove VG名/LV名
Do you really want to remove active logical volume VG名/LV名 ? [y/n]: y
Logical volume ” LV名 ” successfully removed
LVの拡張。アンマウントしなくてもできます。
※事前にVGの空きを確認しておきましょう。⇒vgdisplayコマンドに表示される「Free PE / Size」が空きです。
# lvextend -L +200Gb -r /dev/vg_vm/lv_root
⇒現状の容量に200GB追加。「-r」はLV内のファイルシステムも同時に拡張します。確保可能な領域を全て使う場合は「-l 100%FREE」を指定する。
なお、LV内をさらにパーティション分割しているような環境の場合は、「-r」を付けずに、resize2fsで手動拡張して下さい。
LVの縮小。アンマウント必須みたいです。
# lvreduce -L -200Gb -r /dev/vg_vm/lv_root
機能は上記のlvextendと同じです。
rawディスク操作
LVMは機能豊富で様々なことができるけど、やはり一長一短はあります。なので、ディスクイメージファイルによるストレージ作成も使いこなせると便利。ここではrawファイルについて触れます。
rawディスク作成
作り方はいろいろありますが、以下の方法を使うとスパース化が防げる。
(スパースは実容量が見た目より小さく、使うほど大きく成長するファイル。ディスク使用量は同じだが、成長する分パフォーマンスが劣るので、はじめっから巨大なファイルを作っておいた方がいい)
1GByteのイメージファイルを作成する
# dd if=/dev/zero of=vs.img bs=1M count=1024
スパース化してないかは以下のコマンドで確認可能
# qemu-img info vs.img
※ファイルをコピーするだけでもスパース化するので注意。ちなみにスパース化を防ぐには「cp –sparse=never コピー元 コピー先」とする
てな感じです。
VMのクローン
KVM上でゲストOSを丸ごとコピーする。
# virt-clone –original mst –name new –file /vm/new.img –nonsparse
意味)ゲストOS「mst」からクローンし、新ゲストOS「new」を作る。その際の新しいストレージは「/vm/new.img」でノンスパースファイルにする。
スパースファイルとは、imgファイルを使用している分しかディスクを確保しないファイル。ディスクの節約にはなるが、使いながらディスクを拡張する為、効率は悪いらしい(パフォーマンスが落ちる)。なので、はじめからノンスパースファイルにしておいた方がいい。
うちのVMは元々ノンスパースで作成しているので、クローンをするときもノンスパースオプションを付けないと、勝手にスパースファイルに変換されてしまう。
また、クローン後はクローン元の情報を持ったままですが、とりあえずネットに繋がらないので、ネットの設定をしなければならない
- 「/etc/udev/rules.d/70-persistent-net.rules」を編集。
「SUBSYSTEM==云々」というのが二行出てくるが、一行目はクローン元の情報なので削除する。また、二行目に記載されたIF名が「eth1」になっているので、「eth0」に直す。 - 「/etc/sysconfig/network」を編集。ホスト名を最新にする。
- 「/etc/sysconfig/network-scripts/ifcfg-eth0」を編集。IPを最新化する。また、「UUID」「HWADDR」も必ず最新化する(削除でも良い)。
- networkを再起動する(/etc/init.d/network restart)

Leave a Reply