LVMでディスク拡張(CentOS6 + lvm2 + ext4)

LVMでボリューム操作の手順書を殴り書きします。
なお、今回の手順では新規追加HDDのパーティションをいじっておりません(/dev/sdb → /dev/sdb1,/dev/sdb2等)。
1つのHDD領域を全てLVMで操作するとしても、気になる方はパーティション操作した方が良いかもしれません。

論理ボリュームの構成図

論理ボリュームの構成図


上記画像の元となったVisioファイル
========用語========
LVM・・・logical volume manager
PV・・・Physical Volume(物理ボリューム)
VG・・・Volume Group(ボリュームグループ)
LV・・・Logical Volume(論理ボリューム)

====================
========概略========
1.新規追加したHDDの確認

2.現在の状態確認
       ・ディスクの使用状況
       ・物理ボリューム
       ・ボリュームグループ
       ・論理ボリューム

3.領域への追加と拡張
       ・物理ボリュームへの追加
       ・ボリュームグループへの追加
       ・論理ボリュームの拡張

4.ファイルシステムのサイズを変更

====================

1.新規追加したHDDの確認

・dmesgコマンドで、新規追加したHDDのデバイスファイル名を確認します。
新規追加なのでパーティションテーブルが構成されていないHDDが/dev/sdbにあることを確認できます。

# dmesg |grep unknown
sdb: unknown partition table

・念のため、パーティション構成でも確認します。
新規追加した8GB(8388608KB)のHDDが/dev/sdbにあることが確認できます。

# cat /proc/partitions
major  minor  #blocks     name
8     0     20971520   sda
8     1     102400      sda1
8     2     20868096   sda2
8    16    8388608     sdb
253   0     2097152     dm-0
253   1     18767872    dm-1

2.現在の状態確認

・ディスクの使用状況を確認します。
“/dev/mapper/vg_hoge-LogVol00″が”/”に、“/dev/sda1(LVMではない)”が”/boot”
それぞれがマウントされていることがわかります。

# df -m
Filesystem   1M-ブロック    使用     使用可   使用%   マウント位置
/dev/mapper/vg_hoge-LogVol00
            18040     1480    15644     9%     /
tmpfs          1004       0     1004     0%     /dev/shm
/dev/sda1       97      57        36    62%     /boot

・物理ボリュームの状態確認をします。”/dev/sda1″はLVMではないので表示されません。
 物理ボリューム”/dev/sda2″が”vg_hoge”に属していることがわかります。

# pvdisplay -C
PV        VG     Fmt   Attr   PSize  PFree
/dev/sda2  vg_hoge   lvm2   a-   19.90g    0

# pvdisplay /dev/sda2
— Physical volume —
PV Name      /dev/sda2
VG Name      vg_hoge
PV Size         19.90 GiB / not usable 3.00 MiB
Allocatable       yes (but full)
PE Size         4.00 MiB
Total PE         5094
Free PE         0
Allocated PE      5094
PV UUID         YyC72t-RbiZ-j1bu-DPOO-u0A0-V2Tj-8Zh40L

・ボリュームグループの状態を確認します。
 vg_hogeグループには”/dev/sda2″のみ属しているのでPVは1、論理ボリュームは”LogVol00 = /”と”LogVol01 = swap”に
 それぞれが使用されているのでLVは2になります。

# vgdisplay -C
VG    #PV  #LV  #SN  Attr   VSize   VFree
vg_hoge   1   2   0   wz–n-   19.90g   0

# vgdisplay
— Volume group —
VG Name             vg_hoge
System ID
Format                lvm2
Metadata Areas          1
Metadata Sequence No     3
VG Access             read/write
VG Status             resizable
MAX LV               0
Cur LV                2
Open LV               2
Max PV               0
Cur PV               1
Act PV               1
VG Size               19.90 GiB
PE Size               4.00 MiB
Total PE              5094
Alloc PE / Size          5094 / 19.90 GiB
Free PE / Size          0 / 0
VG UUID              IYjRRc-0ecT-Jhnu-SDnx-Iqk6-INWZ-75xVUm

・論理ボリュームの状態を確認します。
 LogVol00LogVol01の2グループあるのがわかります。

# lvdisplay -C
LV         VG    Attr    LSize   Origin   Snap%  Move  Log  Copy%  Convert
LogVol00   vg_hoge  -wi-ao  17.90g
LogVol01   vg_hoge  -wi-ao  2.00g

# lvdisplay
— Logical volume —
LV Name         /dev/vg_hoge/LogVol01
VG Name         vg_hoge
LV UUID          Bu8RfR-LfAm-riOh-GV6S-9DSp-vlCc-oG2DMG
LV Write Access     read/write
LV Status         available
# open           1
LV Size          2.00 GiB
Current LE        512
Segments         1
Allocation         inherit
Read ahead sectors    auto
– currently set to     256
Block device         253:0

— Logical volume —
LV Name         /dev/vg_hoge/LogVol00
VG Name         vg_hoge
LV UUID          fc0fD0-6m2f-etmN-JqGb-95Ax-L3DK-OttDS8
LV Write Access     read/write
LV Status         available
# open           1
LV Size          17.90 GiB
Current LE        4582
Segments         1
Allocation         inherit
Read ahead sectors    auto
– currently set to     256
Block device         253:1

3.領域への追加と拡張

・物理ボリュームに”/dev/sdb”を追加し、その後の状態を確認します。

# pvcreate /dev/sdb
Physical volume “/dev/sdb” successfully created

# pvdisplay -C
PV        VG     Fmt   Attr   PSize  PFree
/dev/sda2  vg_hoge   lvm2   a-   19.90g    0
/dev/sdb        lvm2   a-   8.00g    8.00g

・ボリュームグループの拡張を行います。
 ”vg_hoge”ボリュームグループへ”/dev/sdb”デバイスを追加します。
 その後、追加した分だけサイズが大きくなっていることを確認します。例では19.90GBから27:89GBに増え、空きサイズが8.00GB増えてます。

# vgextend vg_hoge /dev/sdb
Volume group “vg_hoge” successfully extended

# vgdisplay -C
VG    #PV  #LV  #SN  Attr   VSize   VFree
vg_hoge   2   2   0   wz–n-   27.89g   0

・論理ボリュームを拡張します。
 今回は”/”を拡張しますので”/dev/vg_hoge/LogVol00″を指定します。
 下記コマンドだと空き領域を100%割り当てる場合ですので、オプションは“-l(小文字のエル)”になります。

# lvextend -l +100%FREE /dev/vg_hoge/LogVol00
Extending logical volume LogVol00 to 25.89 GiB
Logical volume LogVol00 successfully resized

サイズ指定だと”-L(大文字のエル)”になりますが、加減が難しくて空き容量以上に割り当てようとして
下記のようなエラーが出る場合があります。今回の場合だと8GB指定ではなく7.99GB指定で成功しました。

#失敗例
# lvextend -L +8GB /dev/vg_hoge/LogVol00
Extending logical volume LogVol00 to 25.90 GiB
Insufficient free space: 2048 extents needed, but only 2047 available

# lvextend -L +8.00GB /dev/vg_hoge/LogVol00
New size given (2048 extents) not larger than existing size (4582 extents)
Run `lvextend –help’ for more information.

#成功例
# lvextend -L +7.99GB /dev/vg_hoge/LogVol00
Rounding up size to full physical extent 8.00 GiB
Extending logical volume LogVol00 to 25.89 GiB
Logical volume LogVol00 successfully resized

4.ファイルシステムのサイズを変更

・ファイルシステムのサイズを変更して実際に使用できるようにします。

# resize2fs /dev/mapper/vg_hoge-LogVol00
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/vg_hoge-LogVol00 is mounted on /; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 2
Performing an on-line resize of /dev/mapper/vg_hoge-LogVol00 to 6788096 (4k) blocks.
The filesystem on /dev/mapper/vg_hoge-LogVol00 is now 6788096 blocks long.

なお、論理ボリュームの拡張に失敗していた場合、以下のように“ファイルシステムのリサイズは必要ない”エラーが出ます。

# resize2fs /dev/mapper/vg_hoge-LogVol00
resize2fs 1.41.12 (17-May-2010)
The filesystem is already 4691968 blocks long. Nothing to do!

・最後に、ディスクの使用状況を確認します。
 ”/”の総容量と空き容量が拡張した分だけ増えていることを確認します。

# df -m
Filesystem   1M-ブロック    使用     使用可  使用%   マウント位置
/dev/mapper/vg_hoge-LogVol00
            26100     1482    23298    6%     /
tmpfs          1004      0     1004    0%     /dev/shm
/dev/sda1       97     57       36    62%     /boot

===========================================================================================================
いうまでもありませんが、ボリュームグループを構成しているHDDのどれかが死んだ場合、そのHDDを利用しているボリュームグループに
アクセスできなくなります。
なお、ボリュームグループにアクセスできなくなってもデータが生きたまま復旧すればアクセス出来るようになります。

ボリュームグループの構成が壊れた時

ボリュームグループの構成が壊れた時

環境
OS・・・・・・・・・・・・・CentOS 6.0(64bit)
ファイルシステム・・ext4
LVM・・・・・・・・・・・・lvm2-2.02.72-8.el6_0.4.x86_64

pvdisplay   物理ボリュームの情報を表示
pvcreate   物理ボリュームの作成
pvscan    物理ボリュームを検出
pvchange   物理ボリュームの属性を変更
pvremove   物理ボリュームを削除

vgdisplay  ボリュームグループの情報を表示
vgcreate   ボリュームグループの作成
vgscan    ボリュームグループの情報を検出
vgchange   ボリュームグループの属性を変更
vgextend   ボリュームグループに物理ボリュームを追加
vgmerge   複数のボリュームグループを 1 つに結合
vgsplit   ボリュームグループを分割
vgremove   ボリュームグループから物理ボリュームを削除

lvdisplay  論理ボリュームの情報を表示
lvcreate   ボリュームグループに論理ボリュームを作成
lvscan    論理ボリュームを検出
lvchange   論理ボリュームの属性を変更
lvextend   論理ボリュームのサイズを拡大
lvreduce   論理ボリュームのサイズを縮小
lvremove   論理ボリュームをボリュームグループから削除

・スラッシュルートディレクトリをオンライン拡張出来るのに、Oracleとかならいざ知らずヘッポコアプリの停止なんざ必要あるわけない。
・別RAIDボリューム同士では拡張できない・・・だと?LVMで2TB以上のボリュームは作成できない・・・だと?ハハハ

自分のことなら気の毒になるくらい逃げ腰なのに、他人がするなら未確認で客に「出来ます」と断言する上長がいる昨今
いかがお過ごしでしょうか。
いくら雑用係とはいっても五分の魂がございますので、いつかぶん殴るなり陥れるなりしようと思います。