LVM関連の覚え書き
LVM | 日経 xTECH(クロステック)
図 LVMの仕組み | 日経 xTECH(クロステック)
図を見ると良く分かる。
LVM(logical volume manager) 論理ボリュームマネージャ
複数のハード・ディスクやパーティションにまたがった領域を
あたかも一つであるかのように扱うことのできるディスク管理機能のこと。
PV(Physical Volume)物理ボリューム
ハードディク内に作成するLVM用のパーテッションのこと。
PE(Physical Extents)物理エクステント
物理ボリューム内で分割されている小さな領域のこと。
デフォルトサイズは、僕の実行環境では4MBだった。
VG(Volume Group)ボリュームグループ
PVをまとめて作られる管理単位のこと。
複数のPVをまとめて1つのボリュームグループとして管理することができる。
LV(Logical Volume)論理ボリューム
実際のパーティッションのように利用できるもの。
論理ボリュームを構成するにはVGから必要サイズ分のPEをまとめる。
任意のディレクトリにマウントする。
実習1
2つのUSBにそれぞれ1つのパーティッションを作成して、lvmを用いて
それらのパーティッションをまとめて1つのパーティッションとして扱えるようにする。
そして、/share領域にマウントする。
今回は2GBと128MBのUSBメモリを使用した。
USBのマウント場所の確認
[root]# cat /var/log/messages
2GBのUSBメモリが/dev/sdb
128MBのUSBメモリが/dev/sdc
に、マウントされていることを確認する。
PV用のパーティッションを作成する
fdiskコマンドでPV用のパーティッションを作成する。
[root]# fdisk /dev/sdb コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本領域 (1-4) p 領域番号 (1-4): 1 最初 シリンダ (1-1022, default 1): Using default value 1 終点 シリンダ または +サイズ または +サイズM または +サイズK (1-1022, default 1022): Using default value 1022 コマンド (m でヘルプ): t Selected partition 1 16進数コード (L コマンドでコードリスト表示): 8e 領域のシステムタイプを 1 から 8e (Linux LVM) に変更しました コマンド (m でヘルプ): p Disk /dev/sdb: 3961 MB, 3961520128 bytes 122 heads, 62 sectors/track, 1022 cylinders Units = シリンダ数 of 7564 * 512 = 3872768 bytes デバイス Boot Start End Blocks Id System /dev/sdb1 1 1022 3865173 8e Linux LVM コマンド (m でヘルプ): w 領域テーブルは交換されました! ioctl() を呼び出して領域テーブルを再読込みします。 ディスクを同期させます。
/dev/sdb1を作成できた。
tコマンドで値を『8e』に指定して、システムタイプをLinux LVMというものにするのを忘れない。
もう一方のUsbメモリも同様に/dev/sdc1を作成する。
PVつまり、lvm用のパーティッション作成する
コマンドはpvcreate
PVが作成されているかはpvdisplayコマンドで確認できる。
[root]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created [root]# pvcreate /dev/sdc1 Physical volume "/dev/sdc1" successfully created [root]# pvdisplay "/dev/sdb1" is a new physical volume of "3.69 GB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 3.69 GB Allocatable NO PE Size (KByte) 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID cFMfLa-hpCO-5XMz-Cy8h-mo3g-qc72-V2MRAA "/dev/sdc1" is a new physical volume of "124.98 MB" --- NEW Physical volume --- PV Name /dev/sdc1 VG Name PV Size 124.98 MB Allocatable NO PE Size (KByte) 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID 1RroQn-ARBw-rag5-L7bb-pmP4-npt1-Ia1Tkm
VGの作成
/dev/sdb1と/dev/sdc1をまとめて『Usb_Usb』という名前のVGを作成する。
コマンドはvgcreate
VGが作成されているかはvgdisplayコマンドで確認できる。
[root]# vgcreate Usb_Usb /dev/sdb1 /dev/sdc1 Volume group "Usb_Usb" successfully created [root]# vgcreate Usb_Usb /dev/sdb1 /dev/sdc1 Volume group "Usb_Usb" successfully created [root]# vgdisplay --- Volume group --- VG Name Usb_Usb System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 3.80 GB PE Size 4.00 MB Total PE 974 Alloc PE / Size 0 / 0 Free PE / Size 974 / 3.80 GB VG UUID fWX8L6-nqsA-RgSo-eWio-5UtS-wuME-JFOQQR
LVを作成する
コマンドはlvcreate
容量は1GBでLV名はhogeにする。
LVが作成されているかはlvdisplayコマンドで確認できる。
[root]# lvcreate -L 1G -n hoge Usb_Usb Logical volume "hoge" created [root]# lvdisplay Usb_Usb --- Logical volume --- LV Name /dev/Usb_Usb/hoge VG Name Usb_Usb LV UUID o0SMgV-NchN-Czu5-uB0a-bP0n-7BwM-BMrZBm LV Write Access read/write LV Status available # open 0 LV Size 1.00 GB Current LE 256 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2
VGを確認すると1GB分のPEが割り当てられていることを確認できる。
[root]# vgdisplay Usb_Usb --- Volume group --- VG Name Usb_Usb System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 3.80 GB PE Size 4.00 MB Total PE 974 Alloc PE / Size 256 / 1.00 GB Free PE / Size 718 / 2.80 GB VG UUID fWX8L6-nqsA-RgSo-eWio-5UtS-wuME-JFOQQR
ファイルシステム作成
[root]# mkfs.ext3 /dev/Usb_Usb/hoge
マウントする
[root]# mount /dev/Usb_Usb/hoge /share
マウント確認
[root]# df -h Filesystem サイズ 使用 残り 使用% マウント位置 /dev/mapper/Usb_Usb-hoge 1008M 34M 924M 4% /share
あとは/etc/fstabに必要事項を記述すれば再起動時にも自動的にマウントしてくれる。
実習2
LVの容量をアップさせる。
対象となる領域は/shareでVG『Usb_Usb』のLV『hoge』がファイルシステム。
サイズは1GBが指定されているがこれを1GB増やして2GBにする。
[root]# df -h Filesystem サイズ 使用 残り 使用% マウント位置 /dev/mapper/Usb_Usb-hoge 1008M 418M 540M 44% /share
まず、VGに使っていない容量があるか確認する。
[root]# vgdisplay --- Volume group --- VG Name Usb_Usb System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 1 Act PV 1 VG Size 3.67 GB PE Size 16.00 MB Total PE 235 Alloc PE / Size 64 / 1.00 GB Free PE / Size 171 / 2.67 GB VG UUID hjvXIp-Cuex-ldZa-KXs3-viRn-q2hU-kFhd2f
容量が2.67GB余っていることを確認した。
アンマウントする
[root]# umount /dev/mapper/Usb_Usb-hoge
lvextendコマンドで容量を追加
[root]# lvextend -L+1G /dev/Usb_Usb/hoge
lvextendコマンドで容量を1GB追加する。
ファイルシステムのチェック
[root]# e2fsck -f /dev/Usb_Usb/hoge
ファイルシステムサイズ変更
[root]# resize2fs /dev/Usb_Usb/hoge
マウントする
[root]# mount /dev/Usb_Usb/hoge /share
容量確認
[root]# df -h Filesystem サイズ 使用 残り 使用% マウント位置 /dev/mapper/Usb_Usb-hoge 2.0G 418M 1.5G 22% /share
1GB増えて、2GBになっている。
実演3
状況説明
/dev/sdb1 1 4 15097 8e Linux LVM /dev/sdb2 5 8 15128 8e Linux LVM
デバイス Boot Start End Blocks Id System /dev/sdc1 1 39 9968 8e Linux LVM
USBメモリAとBが以上のようなパーティッションに分かれている。
USBメモリAの/dev/sdb1とUSBメモリBの/dev/sdc1に対して以下のようなコマンドを実行して、
lvが作成されている。この領域は/shareにマウントされている。
[root]# pvcreate /dev/sdb1 [root]# pvcreate /dev/sdc1 [root]# vgcreate Usb /dev/sdb1 /dev/sdc1 [root]# lvcreate -L 4M -n hoge Usb [root]# mkfs.ext3 /dev/Usb/hoge [root]# mount /dev/Usb/hoge /share
しかし、/dev/sdb1は経年劣化等により状態が悪くなり、使用を止めたいということになった。
VGの『Usb』の情報を確認すると、以下のような出力により/dev/sdb1上のPEが(3-2)=1使用されている状態であることが分かる。vgreduceコマンドをそのまま使うことはできない。
[root]# vgdisplay -v Usb --- Physical volumes --- PV Name /dev/sdb1 PV UUID reqBYw-RDbO-2aW6-4Ozy-6fUl-Ppu1-xVYzNi PV Status allocatable Total PE / Free PE 3 / 2 PV Name /dev/sdc1 PV UUID sbOkbx-dYki-pox8-U0b9-Fyrd-4BZa-W8fkhe PV Status allocatable Total PE / Free PE 2 / 2
このような場合、pvmoveコマンドを使い、PVを移動させる。
手順を以下に示す。
[root]# pvmove -v /dev/sdb1
-vによって、詳細を出力する。
移動場所はこの場合、同じVGの/dev/sdc1になる。
確認してみる。
[root]# vgdisplay -v Usb --- Physical volumes --- PV Name /dev/sdb1 PV UUID reqBYw-RDbO-2aW6-4Ozy-6fUl-Ppu1-xVYzNi PV Status allocatable Total PE / Free PE 3 / 3 PV Name /dev/sdc1 PV UUID sbOkbx-dYki-pox8-U0b9-Fyrd-4BZa-W8fkhe PV Status allocatable Total PE / Free PE 2 / 1
/dev/sdc1に移動したことを確認できる。
vgreduceコマンドでVG『Usb』から/dev/sdb1を削除する。
[root]# vgreduce Usb /dev/sdb1
確認する。
[root]# vgdisplay -v Usb --- Physical volumes --- PV Name /dev/sdc1 PV UUID sbOkbx-dYki-pox8-U0b9-Fyrd-4BZa-W8fkhe PV Status allocatable Total PE / Free PE 2 / 1
/dev/sdb1が削除されていることを確認した。
PVの/dev/sdb1を削除する。
[root]# pvremove /dev/sdb1
基本コマンド集
LVの削除
[root]# lvremove /dev/Usb_Usb/hoge
VGの削除
マウントされているLVがある場合は、umountし、lvremoveコマンドでLVを削除する。
その後、以下のコマンド。
[root]# vgremove Usb_Usb
PVの削除
[root]# pvremove /dev/sdb1
PEの指定
ひとつのLVに与えられるPE数には制限がある。(65536ブロック)
そのため、大容量のLVを作成するときにはPEのサイズに留意する必要がる。
標準のPEは、僕の実行環境では4MBである。
PEサイズはVGの作成時に以下のように指定することができる。
[root]# vgcreate -s16m Usb_Usb /dev/sdc1
PEを16MBでUsb_UsbというVGを作成した。
VGに追加
[root]# vgextend Usb_Usb /dev/sdb1
VGの『Usb_Usb』に/dev/sdb1を追加した。
VGから削除
[root]# vgreduce Usb_Usb /dev/sdc1
VGの『Usb_Usb』から/dev/sdc1を削除した。
状況確認
# pvdisplay
# pvs
# vgdisplay
# vgs
# lvdisplay
# lvs
参考
fedora6にUSB接続でHDDを繋げ新しくLVMでパーティションをきる | Supernova
http://memo.funny-k.com/archives/category/lvm
エンタープライズ:特集:LVMによるディスクパーティションの動的化(前編) (5/7)
LVM:PVをVolumeGroupに追加する - 明日=今日×(反省+前向き)+努力
http://www5.atwiki.jp/choc-net/pages/22.html
Linux/LVM/LVMの削除 - discypus
http://beer.dip.jp/puki/index.php?LVM%2FLV%A4%CE%A5%B5%A5%A4%A5%BA%A4%CE%CA%D1%B9%B9
http://www.grandarbre.net/2007/11/lvmpv.html
http://www.kuwazou.net/blog/2008/01/lvm.html