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
とやってみたところ、
ディスク使用量が減ったのを確認。