Linux 3.2 の Thin Provisioning (2) - TenForwardの日記の続編.
ついこないだ試したと思ったら,試したのってもう 1 年前なことに気づき,時間の経つのが早い事に愕然としています... (>_<)
既に 3.8 kernel がリリースされたのに「何が Linux 3.2 だ」と思われるかも知れませんが,たまたまシンプロビジョニングの話題を見つけたので,そういえば前回はカーネルに実装されたものの,周辺が付いていけてないのかまともに動かなかったけど,そろそろどうだろう? と思い,追試してみました.
結論から言うと何事もなかったように動きます (^_^;)
前回と同じように thin_pool を作成します.
# lvm version LVM version: 2.02.90(2) (2012-02-01) Library version: 1.02.69 (2012-02-01) Driver version: 4.23.0 # pvcreate /dev/vdb1 # vgcreate TestVG -s 64K /dev/vdb1 # modprobe -v dm-thin-pool # lvcreate -L 1G -T TestVG/pool -V 10G -n ThinLV Logical volume "ThinLV" created # lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert ThinLV TestVG Vwi-a-tz 10.00g pool 0.00 pool TestVG twi-a-tz 1.00g 0.00
前回うまくいかなかった ext4 の mkfs も可能です.
# mkfs -t ext4 /dev/TestVG/ThinLV mke2fs 1.42 (29-Nov-2011) Discarding device blocks: done Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=16 blocks 655360 inodes, 2621440 blocks 131072 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2684354560 80 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done # mount /dev/TestVG/ThinLV /mnt # df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 22G 5.0G 16G 25% / none 501M 172K 501M 1% /dev /media 501M 0 501M 0% /media /tmp 501M 0 501M 0% /tmp /dev/mapper/TestVG-ThinLV 9.9G 151M 9.2G 2% /mnt
これで実際は 1GB なのですが,10GB に見えるファイルシステムが見えています.ここにどかーんと大きなファイルを置いてしまうと以下のようなログが出力されてだんまりになりました.
kernel: device-mapper: thin: 253:2: no free space available.
ちょっと調べてみると,/etc/lvm/lvm.conf の設定が以下のようになっていました.
thin_pool_autoextend_threshold = 100 thin_pool_autoextend_percent = 20
これではうまく動かないようですので,100 → 80 に変更します.
thin_pool_autoextend_threshold = 80 thin_pool_autoextend_percent = 20
これで使用率が 80% を少し超えそうなファイルを置くと
lvm[2818]: Monitoring thin TestVG-pool-tpool. kernel: EXT4-fs (dm-4): mounted filesystem with ordered data mode. Opts: (null) lvm[2818]: Thin TestVG-pool-tpool is now 80% full. lvm[2818]: Extending logical volume pool to 1.20 GiB kernel: device-mapper: thin: Data device (dm-1) discard unsupported: Disabling discard passdown. lvm[2818]: Logical volume pool successfully resized
こんな感じで自動的に領域が拡張されています.一気に 100% 超えそうなファイルを置いてみると
lvm[2818]: Thin TestVG-pool-tpool is now 91% full. lvm[2818]: Extending logical volume pool to 1.73 GiB kernel: device-mapper: thin: 253:2: reached low water mark, sending event. kernel: device-mapper: thin: 253:2: no free space available. lvm[2818]: Logical volume pool successfully resized lvm[2818]: Thin TestVG-pool-tpool is now 84% full. lvm[2818]: Extending logical volume pool to 2.07 GiB lvm[2818]: Logical volume pool successfully resized
こちらもうまくいきました.
以前ハマったのがウソのようにすんなり行ってしまってはっきりいって拍子抜けです.:p