TenForward

技術ブログ。はてなダイアリーから移転しました

Linux 3.2 の Thin Provisioning (3)

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