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

状況説明

USBメモリA

/dev/sdb1               1           4       15097   8e  Linux LVM
/dev/sdb2               5           8       15128   8e  Linux LVM

USBメモリB

デバイス 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