LVM2 を Ubuntu で使ってみると超便利だった件について
最近 Docker を使っているとHDD を鬼のように使用します。
HDDが足りなくなってから マウント ということを繰り返していたのですが
もっと便利にやる方法はないだろうか。
と思っていたところ、 LVM2 いいよ という天の声が。
同時にとても良い資料を紹介されたのでこの資料を基にLVM2 を導入してみることに。
株式会社ネットマイスター LPICレベル1技術解説無料セミナー
P26 あたりから LVM2 についての解説がある。
抜粋をキャプチャしてみる。
ほうほう。なるほど。
PV を GV でまとめて LV を払い出しマウントするんだな。/dev/sdc
なんのこっちゃ。
とりあえずやってみることにしよう。
用意したのは Ubuntu14.04 ミニマムインストールイメージ。
以下にバージョン情報を。
root@ubuntu:~# cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=14.10 DISTRIB_CODENAME=utopic DISTRIB_DESCRIPTION="Ubuntu 14.10" root@ubuntu:~# uname -a Linux ubuntu 3.16.0-41-generic #57-Ubuntu SMP Thu Jun 18 08:44:16 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
■前準備
さっそく LVM2 をインストール
LVM2 の 2 はバージョン情報なのかな?
root@ubuntu:~# apt-get install -y lvm2 root@ubuntu:~# lvm version LVM version: 2.02.98(2) (2012-10-15) Library version: 1.02.77 (2012-10-15) Driver version: 4.27.0
lvm の元になるディスクを準備。
とりあえず 2G のディスクを2本作ってみました。
fdisk で 認識されていることを確認します
root@ubuntu:~# fdisk -l Disk /dev/sda: 8 GiB, 8589934592 bytes, 16777216 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x8976d1f2 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 10485759 10483712 5G 83 Linux /dev/sda2 10487806 16775167 6287362 3G 5 Extended /dev/sda5 10487808 16775167 6287360 3G 82 Linux swap / Solaris Disk /dev/sdb: 2 GiB, 2147483648 bytes, 4194304 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/sdc: 2 GiB, 2147483648 bytes, 4194304 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
/dev/sdb
/dev/sdc が認識されています。
■PVを作る
資料通り PV を作ります
PV とは Physical Volume の略らしく 物理ボリュームのことを指すそうです。
パーティション切っても切らなくても良いようです。
どうせ 後述の VG にまとめてしまうので切らないことにします。
# PVの作成 root@ubuntu:~# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created root@ubuntu:~# pvcreate /dev/sdc Physical volume "/dev/sdc" successfully created # 作成されたPVリストを確認 root@ubuntu:~# pvscan PV /dev/sdb lvm2 [2.00 GiB] PV /dev/sdc lvm2 [2.00 GiB] Total: 2 [4.00 GiB] / in use: 0 [0 ] / in no VG: 2 [4.00 GiB]
これで 2G の PV が 2つできました。
■VG を作る
次はVGを作ります。
VG は Volume Group の略。
いくつかのPVをまとめて VG を作っていきます。
# group1.vg という名前の VG を作ります root@ubuntu:~# vgcreate group1.vg /dev/sdb Volume group "group1.vg" successfully created # group1.vg に PV を追加 root@ubuntu:~# vgextend group1.vg /dev/sdc Volume group "group1.vg" successfully extended # 作成されたVGリストを確認します root@ubuntu:~# vgscan Reading all physical volumes. This may take a while... Found volume group "group1.vg" using metadata type lvm2 # PVリストを確認すると PV がどのVGに属しているかわかります。 root@ubuntu:~# pvscan PV /dev/sdb VG group1.vg lvm2 [2.00 GiB / 2.00 GiB free] PV /dev/sdc VG group1.vg lvm2 [2.00 GiB / 2.00 GiB free] Total: 2 [3.99 GiB] / in use: 2 [3.99 GiB] / in no VG: 0 [0 ]
■ LV を切り出す
次は VG から LV を切りだします
LV とは Logical Volume の略だそうです。
VG に追加した容量内であれば 小出しにしてLVを作ることができます。
とりあえず 2G * 2 = 4G の group1.vg がありますので
1G だけ切り出してみたいと思います。
# 1G 切り出し root@ubuntu:~# lvcreate -L 1G -n /dev/group1.vg/lv1.data Logical volume "lv1.data" created # ext4 でフォーマット root@ubuntu:~# mkfs.ext4 /dev/group1.vg/lv1.data mke2fs 1.42.10 (18-May-2014) Creating filesystem with 262144 4k blocks and 65536 inodes Filesystem UUID: 8fc694fb-2117-4189-b780-f88396899a9d Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Allocating group tables: done Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done
■マウント、容量確認
作ってみた LV をマウントします。
# マウントするためディレクトリを作る root@ubuntu:~# mkdir data # LV をマウント root@ubuntu:~# mount /dev/group1.vg/lv1.data data/ # マウントされたディスクを確認する root@ubuntu:~# df -H Filesystem Size Used Avail Use% Mounted on /dev/sda1 5.2G 867M 4.0G 18% / none 4.1k 0 4.1k 0% /sys/fs/cgroup udev 1.6G 4.1k 1.6G 1% /dev tmpfs 316M 300k 316M 1% /run none 5.3M 0 5.3M 0% /run/lock none 1.6G 0 1.6G 0% /run/shm none 105M 0 105M 0% /run/user /dev/mapper/group1.vg-lv1.data 1.1G 1.4M 952M 1% /root/data
簡単!
でもこれだけじゃないんです。
■ HDDが足りなくなった場合
LV の容量を増やすことができます。
しかもアンマウントしなくてよい。なおかつデータも残る!
凄い!
さて、やってみましょう。
1G の /dev/group1.vg/lv.data がもう一杯になって書き込みができない!
さあ、容量を増やしてみましょう。
# 1G 増やしてみる。 root@ubuntu:~# lvextend -L +1G /dev/group1.vg/lv1.data Extending logical volume lv1.data to 2.00 GiB Logical volume lv1.data successfully resized # 確認 root@ubuntu:~# lvscan ACTIVE '/dev/group1.vg/lv1.data' [2.00 GiB] inherit # df で確認するとまだ増えていない。 root@ubuntu:~# df -H Filesystem Size Used Avail Use% Mounted on /dev/sda1 5.2G 867M 4.0G 18% / none 4.1k 0 4.1k 0% /sys/fs/cgroup udev 1.6G 4.1k 1.6G 1% /dev tmpfs 316M 300k 316M 1% /run none 5.3M 0 5.3M 0% /run/lock none 1.6G 0 1.6G 0% /run/shm none 105M 0 105M 0% /run/user /dev/mapper/group1.vg-lv1.data 1.1G 1.4M 952M 1% /root/data # おもむろに ディスクのファイルシステムを拡張します。 root@ubuntu:~# resize2fs /dev/group1.vg//lv1.data resize2fs 1.42.10 (18-May-2014) Filesystem at /dev/group1.vg//lv1.data is mounted on /root/data; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 1 The filesystem on /dev/group1.vg//lv1.data is now 524288 blocks long. # 確認。拡張成功! root@ubuntu:~# df -H Filesystem Size Used Avail Use% Mounted on /dev/sda1 5.2G 867M 4.0G 18% / none 4.1k 0 4.1k 0% /sys/fs/cgroup udev 1.6G 4.1k 1.6G 1% /dev tmpfs 316M 300k 316M 1% /run none 5.3M 0 5.3M 0% /run/lock none 1.6G 0 1.6G 0% /run/shm none 105M 0 105M 0% /run/user /dev/mapper/group1.vg-lv1.data 2.1G 1.6M 2.0G 1% /root/data
■ボリュームを取り外したい!
異音等がしてボリュームを取り外さなくてはいけないシチュエーションが起きた場合。
そんな場合でも LVM は問題なくぼびゅーむをアンマウントする手段があります。
ここでは group1.vg 内の /dev/sdc が壊れてしまったことと仮定します。
まず、PV 内の状態を確認します
root@ubuntu:~# pvdisplay --- Physical volume --- PV Name /dev/sdb VG Name group1.vg PV Size 2.00 GiB / not usable 4.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 511 Free PE 0 Allocated PE 511 PV UUID upglFx-3K5V-AIT5-6Emn-Mo2Z-QlBN-niXOHj --- Physical volume --- PV Name /dev/sdc VG Name group1.vg PV Size 2.00 GiB / not usable 4.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 511 Free PE 510 Allocated PE 1 PV UUID fffWoP-KQFL-dNqo-23ON-JEoO-Rlml-QDzvav
PE (Physical Extent) が実際にVGに提供している容量を表しているそうです。
/dev/sdc は 4.00MiB も VGに提供しているようです。
これを現在動いている他の PV に移動します。
※書き途中。。。
moremagic
2015-06-25