LVM

LVM(Logical Volume Manager)は、ディスクのボリューム管理を柔軟に行う為の機能である。

物理的なパーティションには、パーティションのサイズを変更できなかったり、パーティション上のシステムが物理的な配置情報に依存し物理的に別のディスクへ移動することが困難であったり、またディスクのサイズを越えるパーティションの作成が行えないなど、ディスクの物理的な特性に柔軟でないという問題がある。

LVMを利用すれば、これらの問題点を解決することが可能である。

linux_05.gif

LVMでは、ディスクや物理パーティションを物理ボリュームとし、これを束ねてボリュームグループとして扱う。そして、ボリュームグループを切り分けて論理ボリュームの作成を行う。論理ボリュームは物理的なパーティションには依存しないため、パーティションを跨いで構築することも可能である。


構築・インストール

ここでは、Linux上でディスクのフォーマットを行い、これに論理ボリュームを構築する。
例として、/dev/sdb上のパーティション1,3を用いて、3つの500Mの論理ボリュームの構築を行う。
そしてこの上に、2つのファイルシステムと1つのスワップ領域を構築する。

# echo /dev/sdb*
/dev/sdb /dev/sdb1 /dev/sdb2 /dev/sdb3
         ~~~~~~~~~           ~~~~~~~~~

物理ボリュームの作成

まず初めに、物理ボリュームの作成を行う。
最近のLinuxはudevdデーモンがデフォルトで起動されていることが多いため、接続されたディスクのアンマウントを行う。

# mount | grep /dev/sdb
/dev/sdb1 on /media/share1 type xfs (rw)
/dev/sdb3 on /media/share2 type ext2 (rw)
# umount /dev/sdb1 /dev/sdb3

物理ボリュームは、コマンド「pvcreate」を用いて構築する。
実際にはディスクを何のパーティションも構築していない状態に戻す処理を行っており、構築というよりは初期化を行っていると言える。

# pvcreate /dev/sdb1 /dev/sdb3
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb3" successfully created

オプション 内容
-f, --force 強制的に作成を行う

ボリュームグループの作成

コマンド「vgcreate」を用いて、物理ボリュームを束ねボリュームグループの作成を行う。
ここでは、「hoge」という名前のボリュームグループを作成する。

# vgcreate hoge /dev/sdb1 /dev/sdb3
  Volume group "hoge" successfully created

オプション 内容
-s SIZE, --physicalextentsize SIZE エクステントのサイズを指定する
-l SIZE, --maxlogicalvolumes SIZE グループ上に作成できる最大論理ボリューム数

論理ボリュームの作成

コマンド「lvcreate」を用いて、ボリュームグループを元に論理ボリュームを作成する。
ここでは、「fuga1」「fuga2」「fuga3」という名前の論理ボリュームを作成する。

# lvcreate -L 500M -n fuga1 hoge
  Logical volume "fuga1" created
# lvcreate -L 500M -n fuga2 hoge
  Logical volume "fuga2" created
# lvcreate -L 500M -n fuga3 hoge
  Logical volume "fuga3" created

オプション 内容
-l SIZE, --extens SIZE 論理ボリュームのサイズを指定
-n NAME, --name NAME 論理ボリューム名を指定

ファイルシステムの構築

詳細については、別頁「Linuxのファイルシステム」を参照して頂きたい。
論理ボリュームは通常のパーティションと同様にディバイスファイルとして扱えるため、本頁では、詳細な説明については割愛する。

# mkfs.ext2 /dev/hoge/fuga1
mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=
OS type: Linux
・・・(略)
# mkfs.ext2 -j /dev/hoge/fuga2
mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=
OS type: Linux
・・・(略)
# mkswap /dev/hoge/fuga3
mkswap: /dev/hoge/fuga3: warning: don't erase bootbits sectors
        on whole disk. Use -f to force.
Setting up swapspace version 1, size = 511996 KiB
no label, UUID=96364d2c-e42a-4f21-9847-503479c90b60
# mount /dev/hoge/fuga1 /media/share1
# mount /dev/hoge/fuga2 /media/share2
# swapon /dev/hoge/fuga3


設定・調整

ここでは、既に構築されたボリュームの状態の確認や、変更を行う方法について説明する。

物理ボリュームの確認

システムが認識している物理ボリュームの一覧表示は、コマンド「pvscan」によって行う。

# pvscan
  PV /dev/sdb1   VG hoge   lvm2 [372.00 MB / 0    free]
  PV /dev/sdb3   VG hoge   lvm2 [1.14 GB / 36.00 MB free]
  Total: 2 [1.50 GB] / in use: 2 [1.50 GB] / in no VG: 0 [0   ]

これらの詳細情報を参照するには、コマンド「pvdisplay」を用いる。

# pvdisplay /dev/sdb1
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               hoge
  PV Size               375.36 MB / not usable 3.36 MB
・・・(略)

ボリュームグループの確認

システムが認識しているボリュームグループの一覧表示は、コマンド「vgscan」によって行う。

# vgscan
Reading all physical volumes.  This may take a while...
 Found volume group "hoge" using metadata type lvm2

これらの詳細情報を参照するには、コマンド「vgdisplay」を用いる。

# vgdisplay hoge
  --- Volume group ---
  VG Name               hoge
  System ID
  Format                lvm2
・・・(略)

論理ボリュームの確認

システム上が認識している論理ボリュームの一覧表示は、コマンド「lvscan」によって行う。

# lvscan
  ACTIVE            '/dev/hoge/fuga1' [500.00 MB] inherit
  ACTIVE            '/dev/hoge/fuga3' [500.00 MB] inherit

これらの詳細情報を参照するには、コマンド「lvdisplay」を用いる。

# lvdisplay /dev/hoge/fuga1
  --- Logical volume ---
  LV Name                /dev/hoge/fuga1
  VG Name                hoge
  LV UUID                W1Ek3x-dAC7-iyaN-YLhw-Cylb-xAsQ-JTuA1v
・・・(略)

ボリュームグループの拡張/縮小

ボリュームグループは物理ボリュームを追加することにより、領域の拡張を行うことができる。
ここでは例として、ボリュームグループ「hoge」へ、

# pvscan
PV /dev/sdb1   VG hoge   lvm2 [372.00 MB / 0    free]
 PV /dev/sdb3   VG hoge   lvm2 [1.14 GB / 36.00 MB free]

物理ボリューム「/dev/sdb2」を追加する。

# echo /dev/sdb*
/dev/sdb /dev/sdb1 /dev/sdb2 /dev/sdb3
                   ~~~~~~~~~

物理ボリュームの追加は、コマンド「vgextend」を用いる。

# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created
# vgextend hoge /dev/sdb2
  Volume group "hoge" successfully extended

コマンド「vgdisplay」を用いて確認すると、確かに認識されたことを確認できる。

# vgdisplay hoge
  --- Volume group ---
  VG Name               hoge
  System ID
  Format                lvm2
  Metadata Areas        3
・・・(略)
  Max PV                0
  Cur PV                3
                       ~~~

逆に縮小を行うには、コマンド「vgreduce」を用いる。

# vgreduce hoge /dev/sdb2
  Removed "/dev/sdb2" from volume group "hoge"

物理ボリュームが削除されたことを確認できる。

# vgdisplay hoge
  --- Volume group ---
  VG Name               hoge
  System ID
  Format                lvm2
  Metadata Areas        2
・・・(略)
  Max PV                0
  Cur PV                2
                       ~~~

物理ボリュームの移動

物理ボリュームの移動は、移動元と移動先が同一ボリュームグループへ所属する必要がある。
例では、物理ボリューム「/dev/sdb1」の内容を、物理ボリューム「/dev/sdb2」へ移動する。

# echo /dev/sdb*
/dev/sdb /dev/sdb1 /dev/sdb2 /dev/sdb3
         ~~~~~~~~~ ~~~~~~~~~

この2つは、コマンド「pvdisplay」により同一サイズで同一グループに所属することが確認できる。

# pvdisplay /dev/sdb1 /dev/sdb2
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               hoge
  PV Size               375.36 MB / not usable 3.36 MB
・・・(略)

 --- Physical volume ---
  PV Name               /dev/sdb2
  VG Name               hoge
  PV Size               375.39 MB / not usable 3.39 MB
・・・(略)

移動には、コマンド「pvmove」を実行する。

# pvmove /dev/sdb1 /dev/sdb2
  /dev/sdb1: Moved: 12.9%
  /dev/sdb1: Moved: 24.7%

物理ボリュームの削除

物理ボリュームの削除は、コマンド「pvremove」によって行う。
オプション「-ff」を用いれば強制的に行うことも可能であるが、安全のためボリュームグループから外してから行うべきである。

# vgreduce hoge /dev/sdb1
  Removed "/dev/sdb1" from volume group "hoge"

次に、コマンド「pvremove」を用いて削除する。

# pvremove /dev/sdb1
Labels on physical volume "/dev/sdb1" successfully wiped


論理ボリュームの拡張

論理ボリュームの拡張により、ファイルシステムはさらに多くの領域を利用できるようになる。
コマンド「lvextend」を利用する。

# lvextend -L +200M /dev/hoge/fuga1
  Extending logical volume fuga1 to 700.00 MB
  Logical volume fuga1 successfully resized

注意が必要なのは、ファイルシステムは新たに追加された領域を自主的に認識できないということである。
そのため、各ファイルシステムに対応するリサイズコマンドを発行し、ファイルシステム側へ拡張された領域を認識させる。ext2/ext3の場合は、コマンド「resize2fs」を利用する。予めファイルのチェックを行っておくことも忘れてはいけない。

# e2fsck -f /dev/hoge/fuga1
e2fsck 1.41.9 (22-Aug-2009)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/hoge/fuga1: 11/128016 files (0.0% non-contiguous), 18474/512000 blocks
# resize2fs /dev/hoge/fuga1
resize2fs 1.41.9 (22-Aug-2009)
Resizing the filesystem on /dev/hoge/fuga1 to 716800 (1k) blocks.
The filesystem on /dev/hoge/fuga1 is now 716800 blocks long.

論理ボリュームのバックアップ

論理ボリューム上の情報をバックアップするには、スナップショットを用いる。
LVMの利点として、バックアップ時に読み取り専用やアンマウントを行わなくてもバックアップの作成が行える。スナップショットの作成には、コマンド「lvcreate -s」を用いる。

例では、「fuga1_snap」というファイル名でバックアップとなるスナップショットを作成している。

# lvcreate -s -L 100M -n fuga1_snap /dev/hoge/fuga1
  Logical volume "fuga1_snap" created

論理ボリュームの削除

論理ボリュームの削除は、コマンド「lvremove」を用いる。

# lvremove /dev/hoge/fuga1
Do you really want to remove active logical volume fuga1_snap? [y/n]: y
  Logical volume "fuga1_snap" successfully removed
Do you really want to remove active logical volume fuga1? [y/n]: y
  Logical volume "fuga1" successfully removed

  • 最終更新:2009-12-15 00:01:25

このWIKIを編集するにはパスワード入力が必要です

認証パスワード