memo

2012-02-10

linux native ZFS で DISCARD 出来るとか

そんな気配を commit log から感じとったので、試してみる。

git://github.com/zfsonlinux/zfs.git から最新版を clone してビルド。

で:

# zpool create tank /dev/lvm/tank
# zfs create -V 1G -s tank/img
# zfs list
NAME        USED  AVAIL  REFER  MOUNTPOINT
tank       1.21M  4.89G    30K  /tank
tank/img     16K  4.89G    16K  -
# mkfs.ext4 /dev/zvol/tank/img
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=2 blocks, Stripe width=2 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
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
# mount -t ext4 -o discard /dev/zvol/tank/img /mnt/
# cp exherbo-amd64-current.tar.xz /mnt
# df -h /mnt
Filesystem      Size  Used Avail Use% Mounted on
/dev/zd0       1022M  182M  789M  19% /mnt
# zfs list
NAME        USED  AVAIL  REFER  MOUNTPOINT
tank        185M  4.71G    30K  /tank
tank/img    185M  4.71G   185M  -
# rm /mnt/exherbo-amd64-current.tar.xz
# df -h /mnt
Filesystem      Size  Used Avail Use% Mounted on
/dev/zd0       1022M   47M  924M   5% /mnt
# zfs list
NAME        USED  AVAIL  REFER  MOUNTPOINT
tank       49.4M  4.84G    30K  /tank
tank/img   48.6M  4.84G  48.6M  -

減った減った。

しかし、本来の目的であるところの仮想マシンのディスクとしてみたところ、減らない。 fstrim しても fstrim: /mnt: FITRIM ioctl failed: Operation not supported とか言われるだけ。


どのタイミングでかは分からないが、いつの間にか /dev/zvol/tank/img-part1 みたいなのが出来ていたので、 host 側から mount -o ro /dev/zvol/tank/img-part3 /mnt && fstrim /mnt とやってみたところ、 ディスク使用量が減ったのを確認。