目当ては、スパースボリューム (sparse volume) です。次は、man zfs(8) からの抜粋です。
           Though not recommended, a "sparse volume" (also known as "thin pro-
           visioning") can be created by specifying the -s option to  the  zfs
           create  -V command, or by changing the reservation after the volume
           has been created. A "sparse volume" is a volume where the  reserva-
           tion is less then the volume size. Consequently, writes to a sparse
           volume can fail with ENOSPC when the pool is low on  space.  For  a
           sparse volume, changes to volsize are not reflected in the reserva-
           tion.
スパースボリュームを作成するには、zfs create -V の際、同時に -s オプションを指定します。
# zfs create -s -V 30G tank1/zvol # ls -l /dev/zvol/tank1/zvol lrwxrwxrwx 1 root root 9 Nov 24 10:46 /dev/zvol/tank1/zvol -> ../../zd0 # ls -l /dev/zd0 brw-rw---- 1 qemu qemu 230, 0 Nov 24 11:03 /dev/zd0 # grep zd0 /proc/partitions 230 0 31457280 zd0この zvol を KVM ゲストに割り当てて、CentOS 6.3 をインストールした直後のディスク消費量は次の通りです。なお、インストールオプションには、Software Development Workstation を選択しています。
# zfs list NAME USED AVAIL REFER MOUNTPOINT tank1 5.25G 53.3G 156K /tank1 tank1/zvol 5.24G 53.3G 5.24G - # zfs get all tank1/zvol NAME PROPERTY VALUE SOURCE tank1/zvol type volume - tank1/zvol creation Sat Nov 24 10:01 2012 - tank1/zvol used 5.24G - tank1/zvol available 53.3G - tank1/zvol referenced 5.24G - tank1/zvol compressratio 1.00x - tank1/zvol reservation none default tank1/zvol volsize 30G local tank1/zvol volblocksize 8K - tank1/zvol checksum on default tank1/zvol compression off default tank1/zvol readonly off default tank1/zvol copies 1 default tank1/zvol refreservation none default tank1/zvol primarycache all default tank1/zvol secondarycache all default tank1/zvol usedbysnapshots 0 - tank1/zvol usedbydataset 5.24G - tank1/zvol usedbychildren 0 - tank1/zvol usedbyrefreservation 0 - tank1/zvol logbias latency default tank1/zvol dedup off default tank1/zvol mlslabel none default tank1/zvol sync standard default tank1/zvol refcompressratio 1.00x - tank1/zvol written 5.24G -ZFS プールの空きや KVM ゲストのディスク使用量を気にかける必要はありますが、こんな具合にディスク消費量を節約できました。もっとも、節約だけであれば、スパースファイルでも同じことであり、実際、ext4 上にスパースファイルとして同様にインストールすると、ほぼ同じ消費量になります。
# df -Th / Filesystem Type Size Used Avail Use% Mounted on /dev/sda6 ext4 20G 16G 2.5G 87% / # ls -lsh /var/lib/libvirt/images/cent6vm64.img 5.2G -rw-------. 1 root root 12G Aug 19 15:47 /var/lib/libvirt/images/cent6vm64.imgZVOL を使う利点は、ZFS の豊富な機能 (compression, dedup, secondarycache, スナップショット) をゲスト毎に使い分けられる点ではないかと思います。また、運用上、スパースファイル方式よりも分かり易い (zfs list で各ゲストへの分配状況を俯瞰できる) かなとも思います。
ちなみに、LVM2 にも同様の機能を組み込もうとして、開発途上の模様です。CentOS 6 の man lvcreate(8) より抜粋です。
       -T, --thin, --thinpool ThinPoolLogicalVolume{Name|Path}
              Creates  thin  pool  or thin logical volume or both.  Specifying
              the optional argument --size will cause the creation of the thin
              pool  logical volume.  Specifying the optional argument --virtu-
              alsize will cause the creation of the thin logical  volume  from
              given  thin  pool  volume.  Specifying both arguments will cause
              the creation of both thin pool and thin volume using this  pool.
              Requires  device mapper kernel driver for thin provisioning from
              kernel 3.2 or newer.  Note: Thin types are currently  considered
              Tech  Preview.   For  more information on Tech Preview features,
              visit: https://access.redhat.com/support/offerings/techpreview/.
LVM2 (device-mapper) を使うと、運用が煩雑になる印象があるのですが、おそらくは、ZVOL より性能は上 (レイヤ増によるオーバーヘッドが少ない) だろうと思いますし、将来の選択肢として、頭の片隅に。2012-11-25追記
さらに、compression による効果を試しました。zvol の compression プロパティを on にしてから、ゲストの CentOS 6.3 をインストールした結果です。
# zfs set compression=on tank1/zvol ... このあとで、ゲストをインストール ... # zfs list NAME USED AVAIL REFER MOUNTPOINT tank1 3.60G 55.0G 156K /tank1 tank1/zvol 3.60G 55.0G 3.60G - # zfs get all tank1/zvol NAME PROPERTY VALUE SOURCE tank1/zvol type volume - tank1/zvol creation Sat Nov 24 14:38 2012 - tank1/zvol used 3.60G - tank1/zvol available 55.0G - tank1/zvol referenced 3.60G - tank1/zvol compressratio 1.76x - tank1/zvol reservation none default tank1/zvol volsize 30G local tank1/zvol volblocksize 8K - tank1/zvol checksum on default tank1/zvol compression on local tank1/zvol readonly off default tank1/zvol copies 1 default tank1/zvol refreservation none default tank1/zvol primarycache all default tank1/zvol secondarycache all default tank1/zvol usedbysnapshots 0 - tank1/zvol usedbydataset 3.60G - tank1/zvol usedbychildren 0 - tank1/zvol usedbyrefreservation 0 - tank1/zvol logbias latency default tank1/zvol dedup off default tank1/zvol mlslabel none default tank1/zvol sync standard default tank1/zvol refcompressratio 1.76x - tank1/zvol written 3.60G -圧縮により 1.64G ほどディスク消費を節約できています。
compression プロパティは、いつでも変更可能であり、ゲストのインストール時やアップデート時のみ、compression=on にして、ゲストの通常運用時には、compressoin=off にしておくといった使い方も可能です。
2012-12-06追記
重複排除 (dedup) についても、試してみました。zvol01 および zvol02 を用意して、dedup=verify を設定してから、各 zvol をそれぞれ KVM ゲストに割り当てて、CentOS 6.3 をインストールした場合の結果です。
# grep tank1/zvol01 /etc/libvirt/qemu/cent6zvol01.xml 
      <source dev='/dev/zvol/tank1/zvol01'/>
# grep tank1/zvol02 /etc/libvirt/qemu/cent6zvol02.xml 
      <source dev='/dev/zvol/tank1/zvol02'/>
# zfs get compression
NAME          PROPERTY     VALUE     SOURCE
tank1         compression  off       default
tank1/zvol01  compression  off       default
tank1/zvol02  compression  off       default
# zfs get dedup
NAME          PROPERTY  VALUE          SOURCE
tank1         dedup     off            default
tank1/zvol01  dedup     verify         local
tank1/zvol02  dedup     verify         local
# zfs list
NAME           USED  AVAIL  REFER  MOUNTPOINT
tank1         11.5G  51.4G   156K  /tank1
tank1/zvol01  5.60G  51.4G  5.60G  -
tank1/zvol02  5.52G  51.4G  5.52G  -
# zpool list
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
tank1  59.5G  7.10G  52.4G    11%  1.68x  ONLINE  -
重複排除により 4G ほど削減できています。重複排除は zpool の括りで行われるようで、効果確認は zpool コマンドで行います。dedup プロパティについても、いつでも変更可能なので、インストール時だけ dedup=verify にして、通常運用時は dedup=off という使い方も可能です。ここでは試しませんでしたが、compression=on との同時利用も可能です。

0 件のコメント:
コメントを投稿