LVM
LVM(Logical Volume Manager)
PV | 物理ボリューム=物理媒体、Diskとか |
PE | 物理エクステント |
VG | ボリュームグループ、PEの集合体 |
LV | 論理ボリューム=パーティション、VGを元に割当 |
パーティション番号=8e=LVMのこと
pvcreate デバイス名 | |
vgcreate VG名 デバイス名 | |
lvcreate -L サイズ -n LV名 VG名 | |
pvdisplay | |
vgdisplay | |
lvextend | |
mke2fs -j /dev/VG名/LV名 |
作成
/dev/sdbに作成してみる
fdiskでLVMパーティション作成
# fdisk /dev/sdb コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本領域 (1-4) p 領域番号 (1-4): 1 最初 シリンダ (1-2610, default 1): Using default value 1 終点 シリンダ または +サイズ または +サイズM または +サイズK (1-2610, default 2610): Using default value 2610 コマンド (m でヘルプ): t 16進数コード (L コマンドでコードリスト表示): 8e 領域のシステムタイプを 1 から 8e (Linux LVM) に変更しました コマンド (m でヘルプ): p Disk /dev/sdb: 21.4 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/sdb1 1 2610 20964793+ 8e Linux LVM コマンド (m でヘルプ): w 領域テーブルは交換されました! ioctl() を呼び出して領域テーブルを再読込みします。 ディスクを同期させます。
PV作成
# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created
VG作成 VG名とパーティションデバイス名が必須
# vgcrea tetestvg /dev/sdb1 Volume group "testvg" successfully created
LV作成 VG名が必要。-nでLV名を付与できる。-Lでサイズ指定できる。
# lvcreate -L 1G -n home1_lv testvg Logical volume "home1_lv" created
LVにFS(ファイルシステム)作成 デバイス名が必要。デバイス名はlvdisplayで表示可能。
# mkfs.ext3 /dev/testvg/home1_lv
マウント 適当にマウントしてみて容量とかを確認してみる
拡張
GUIツールなら一発でできるがCUIは面倒だ
LVが拡張可能(PVも拡張可能だが、LUNレベルでオンライン拡張をサポートしているデバイス使用時に限る)
LVはオンラインで拡張可能 lvextendを利用
ext3はオンラインでの拡張が可能 ext2online、縮小はオフラインのみ resize2fs
# pvcreate デバイス名 # vgcreate VG名 デバイス名 # lvcreate -L サイズ -n LV名 VG名 # mke2fs -j /dev/VG名/LV名 または # lvextend -v -L+追加容量 LVパス名 または # lvresize -v -L+追加容量 LVパス名 # ext2online -v LVパス名
縮小
LVの縮小で/(root)パーティションがある場合は、レスキューモードを利用してやる。 縮小は該当パーティションをアンマウントしておく必要あり。
インストCDでrescueモード指定 RescueタイプではSkipを選択(rootパーティションをマウントしない為) lvm vgchange -a y LVMで全てのVGを有効化 fsck.ext4 -f /dev/vg/lv_root fsckしないとresizeできない。-fでファイルシステムがcleanとなっている場合もチェックする resize2fs -p /dev/vg/lv_root 10G lvm lvreduce -L10G /dev/vg/lv_root
LVMで拡張@KVM
KVMを利用していてイメージファイルにqcow2フォーマットで
OSはLVMで構成している場合の拡張方法
まず仮想HDDを20GB拡張
cd /var/lib/libvirt/images qemu-img resize [FILENAME] +20G
で、KVMを起動させてfdiskでLVMパーティションを作成
作成したパーティションのIDを83から8eに変更して書込み
最後に再起動
fdisk /dev/vda 警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを 強く推奨します。 and change display units to sectors (command 'u'). コマンド (m でヘルプ): u セクタ数 の表示/項目ユニットを変更します コマンド (m でヘルプ): p ディスク /dev/vda: 42.9 GB, 42949672960 バイト ヘッド 16, セクタ 63, シリンダ 83220, 合計 83886080 セクタ Units = セクタ数 of 1 * 512 = 512 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O size (minimum/optimal): 512 bytes / 512 bytes ディスク識別子: 0x0001d58b デバイス ブート 始点 終点 ブロック Id システム /dev/vda1 * 2048 1026047 512000 83 Linux パーティション 1 は、シリンダ境界で終わっていません。 /dev/vda2 1026048 41943039 20458496 8e Linux LVM パーティション 2 は、シリンダ境界で終わっていません。 コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本パーティション (1-4) p パーティション番号 (1-4): 3 最初 セクタ (63-83886079, 初期値 63): 41943040 Last セクタ, +セクタ数 or +size{K,M,G} (41943040-83886079, 初期値 83886079): 初期値 83886079 を使います コマンド (m でヘルプ): t パーティション番号 (1-4): 3 16進数コード (L コマンドでコードリスト表示): 8e 領域のシステムタイプを 3 から 8e (Linux LVM) に変更しました コマンド (m でヘルプ): p ディスク /dev/vda: 42.9 GB, 42949672960 バイト ヘッド 16, セクタ 63, シリンダ 83220, 合計 83886080 セクタ Units = セクタ数 of 1 * 512 = 512 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O size (minimum/optimal): 512 bytes / 512 bytes ディスク識別子: 0x0001d58b デバイス ブート 始点 終点 ブロック Id システム /dev/vda1 * 2048 1026047 512000 83 Linux パーティション 1 は、シリンダ境界で終わっていません。 /dev/vda2 1026048 41943039 20458496 8e Linux LVM パーティション 2 は、シリンダ境界で終わっていません。 /dev/vda3 41943040 83886079 20971520 8e Linux LVM コマンド (m でヘルプ): w パーティションテーブルは変更されました! ioctl() を呼び出してパーティションテーブルを再読込みします。 警告: パーティションテーブルの再読込みがエラー 16 で失敗しました: デバイスもしくはリソースがビジー状態です。 カーネルはまだ古いテーブルを使っています。新しいテーブルは 次回リブート時か、partprobe(8)またはkpartx(8)を実行した後に 使えるようになるでしょう ディスクを同期しています。 reboot
起動後、OSにログインしてpvを作成
vgに作成したpvを追加して
lvを拡張、ファイルシステムを拡張
dfで確認
pvcreate /dev/vda3 Physical volume "/dev/vda3" successfully created vgextend vg /dev/vda3 Volume group "vg" successfully extended lvextend -l +100%FREE /dev/vg/lv_root Extending logical volume lv_root to 35.50 GiB Logical volume lv_root successfully resized resize2fs /dev/vg/lv_root resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/vg/lv_root is mounted on /; on-line resizing required old desc_blocks = 1, new_desc_blocks = 3 Performing an on-line resize of /dev/vg/lv_root to 9307136 (4k) blocks. The filesystem on /dev/vg/lv_root is now 9307136 blocks long. df -h
LVMで拡張@KVM v2
KVMを利用していてOSはLVMとXFSで構成している場合の拡張方法
XFSはオンライン拡張ができる
CentOS7からはデフォルトでxfsファイルシステムが採用されているので簡単に容量拡張できる
パーティションをLVMで組む(論理パーティション管理)か
旧来のパーティション(物理パーティション管理)で組むかにより手順が異なる
- growpart
cloud-utils-growpartパッケージで導入されるツール
空き容量に合わせてパーティションサイズを変更してくれる
- xfs_growfs
xfsファイルシステムの拡張ツール
- xfs_info
xfsファイルシステム情報表示ツール
xfs_growfs -nと同じ
vdaが20GBで割り当てられているサーバを容量拡張でvdaが40GBになる場合
最初にディスクサイズが20GB→40GBに増加すれば、手順内での再起動は不要!
vdaディスクの容量確認とパーティション構成確認を行う # lsblk 20GBから40GBにディスク容量が増えていれば # growpart /dev/vda 2
増えた部分をvdaのパーティション2の領域に割り当て、増やしたいパーティション番号はlsblkで調べておく
旧来のパーティション管理の場合はこの次はdf -Thまで飛ぶ
pvサイズ確認 # pvdisplay まだ増えていないはず pvを拡張 # pvresize /dev/vda2 pvサイズが拡張されたことを確認 # pvdisplay vgのFree領域が増えているのを確認 # vgdisplay lvのサイズ確認 # lvdisplay /dev/centos/root lvを拡張 # lvextend -l +100%FREE /dev/centos/root lvサイズが拡張されたことを確認 # lvdisplay /dev/centos/root
ここからは旧来パーティション管理でも同じ
マウントされているパーティションサイズを確認 # df -Th xfsファイルシステムを拡張する # xfs_growfs /dev/centos/root パーティションが拡張されたことを確認 # df -Th
別HDDを追加してLVM管理にした場合
pvを作成 # pvcreate /dev/vdb 既存VGに追加 # vgextend centos /dev/vdb
これでvgのFree領域が増えるので後の手順は同じ