ZFS
Jump to navigation
Jump to search
Getting started
Create a pool[1]:
zpool create tank0 /dev/sdc /dev/sdd /dev/sde
Now we should have something like this:
$ zpool status tank0 pool: tank0 state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM tank0 ONLINE 0 0 0 sdc ONLINE 0 0 0 sdd ONLINE 0 0 0 sde ONLINE 0 0 0
Rename a pool:
zpool export tank0 zpool import tank0 tank2
Compression
$ df -h /data/backup
Filesystem size used avail capacity Mounted on
tank0/backup 7.0G 5.1G 1.9G 73% /data/backup
$ zfs set compression=lz4 tank0/backup
$ zfs get compression tank0/backup
NAME PROPERTY VALUE SOURCE
tank0/backup compression lz4 local
Let's create a 1 GB file and see what happens:
$ dd if=/dev/zero of=/data/backup/null.img bs=1024k count=1k $ ls -hl /data/backup/null.img -rw-r--r-- 1 root root 1.0G Dec 15 12:54 /data/backup/null.img $ du -sh /data/backup/null.img 0K /data/backup/null.img $ du -Ash /data/backup/null.img 1G /data/backup/null.img $ df -h /data/backup Filesystem size used avail capacity Mounted on tank0/backup 7.0G 5.1G 1.9G 73% /data/backup
Re-Compression
Compressing filesystem contents after the fact:
- Doesn't work for hardlinks.
- Must be done manually[2]
$ df -h /data/test Filesystem size used avail capacity Mounted on tank0/test 2.0G 465M 1.5G 23% /data/test $ zfs set compression=lz4 tank0/test $ zfs get compression tank0/test NAME PROPERTY VALUE SOURCE tank0/test compression lz4 local $ df -h /data/test Filesystem size used avail capacity Mounted on tank0/test 2.0G 465M 1.5G 23% /data/test $ cd /data/test $ du -sh share/ 481M share/ $ find . -type f -size +1024 | while read f; do echo "re-creating $f ..." cp "$f" "$f".$$ && rm "$f" mv "$f".$$ "$f" done $ du -sh share/ 417M share/ $ df -h /data/test/ Filesystem size used avail capacity Mounted on tank0/test 2.0G 401M 1.6G 20% /data/test $ zfs get compressratio tank0/backup NAME PROPERTY VALUE SOURCE tank0/backup compressratio 1.00x -
Swap
Using ZFS as a swap
or dump
device:[3][4][5]
zfs create -V 1gb export/swap swap -a /dev/zvol/dsk/export/swap
Deduplication
$ zfs set dedup=sha256 tank0
$ cp -a /usr/libexec/ /tank0/one
$ df -h /tank0
Filesystem Size Used Avail %Cap Mounted on
tank0 368M 103M 265M 27% /tank0
$ zfs list tank0
NAME USED AVAIL REFER MOUNTPOINT
tank0 104M 265M 103M /tank0
And once more:
$ cp -a /usr/libexec/ /tank0/two
$ zfs list tank0
NAME USED AVAIL REFER MOUNTPOINT
tank0 202M 265M 201M /tank0
$ df -h /tank0
Filesystem Size Used Avail %Cap Mounted on
tank0 470M 205M 265M 43% /tank0
Repeating the same ever so often will make both the df
and zfs list
output look more and more unrealistic, as now the filesystem reports a bigger total size the more copies it holds. We can query the pool for more details:
$ zpool get -o all size,capacity,dedupditto,dedupratio,free,allocated,fragmentation tank0 NAME PROPERTY VALUE SOURCE tank0 size 496M - tank0 capacity 20% - tank0 dedupditto 0 default tank0 dedupratio 8.05x - tank0 free 392M - tank0 allocated 104M - tank0 fragmentation 17% -
Links
- ZFS on Linux
- OpenZFS
- Managing ZFS File Systems in Oracle® Solaris 11.4
- UFS nach ZFS migrieren mit Live Upgrade
References
- ↑ Selecting /dev/ names when creating a pool
- ↑ zfs-recompress - Trigger ZFS compression on a set of files.
- ↑ FAQ: Using ZFS for Swap (Archive) (Jim Laurent, 2008-05-14)
- ↑ Oracle Solaris ZFS Advanced Topics: ZFS Volumes
- ↑ Using a zvol for a swap device (on ZFS on Linux)