meta data for this page
  •  

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
zfs [2015/03/24 08:39] niziaklinux:fs:zfs [2021/03/02 12:59] niziak
Line 1: Line 1:
 ====== ZFS ====== ====== ZFS ======
  
-===== Creating ZFS dataset =====+[[https://lists.debian.org/debian-user/2012/05/msg01026.html]] 
 + 
 +Features: 
 +  * data pools (tanks) are abstraction aggregate block devices (simple, mirror, raidz, spares, etc) 
 +  * data set is created on data pool or another (parent) data set. 
 +  * whole data pool space is shared between dataset (no fixed partition size problem). Size of data set (and its descendants) can be limited using quota 
 +  * compression 
 +  * block level deduplication (not usable for emails with attachment, where attachment are shifted to different offset) 
 + 
 +OpenZFS2.0.0 (Dec 20) [[https://github.com/openzfs/zfs/releases/tag/zfs-2.0.0]]: 
 +  * Sequential resilver (rebuild only used by data portions) 
 +  * Persistent L2ARC cache (survives between reboots) 
 +  * ZSTD 
 +  * Redacted replication (replicate with some data excluded) 
 +  * FreeBSD and Linux unification 
 + 
 +Proposed use case: 
 +POOL created on encrypted LUKS block device.
  
 <code> <code>
 + POOL
 +   |-- /filer (quota)
 +       |- foto 
 +       |- mp3 (dedup)
 +       |- movies
 +       +- backup (copies=2, compression)
 +   |
 +   |-- /home (compression, dedup, quota)
 +   +-- /var (quota)
 +         +- log (compression)
 +</code>
 +
 +===== ZFS implementations =====
 +
 +ZFS-Fuse 0.7 is using old pool version 23, where [[http://zfsonlinux.org|ZFSonLinux]] is using pool version 28.
 +[[http://exitcode.de/?p=106|zfs-fuse vs. zfsonlinux]]
 +
 +
 +
 +===== Creating ZFS dataset =====
 +
 +<code bash>
 zpool create INBOX /dev/loop0 /dev/loop1 /dev/loop2 /dev/loop3 zpool create INBOX /dev/loop0 /dev/loop1 /dev/loop2 /dev/loop3
 </code> </code>
  
-<code>+<code bash>
 # zpool list # zpool list
 NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
Line 13: Line 52:
 </code> </code>
  
-<code>+<code bash>
 # zpool status # zpool status
   pool: INBOX   pool: INBOX
Line 32: Line 71:
 Dataset "INBOX" is also automatically created based on zpool name "INBOX". It is mounted as /INBOX Dataset "INBOX" is also automatically created based on zpool name "INBOX". It is mounted as /INBOX
  
-<code>+<code bash>
 # zfs list # zfs list
 NAME    USED  AVAIL  REFER  MOUNTPOINT NAME    USED  AVAIL  REFER  MOUNTPOINT
Line 61: Line 100:
 zfs set dedup=on INBOX zfs set dedup=on INBOX
 </code> </code>
 +New attributed applies only to newly written data.
  
 Tests Tests
Line 126: Line 166:
 dedup = 2.50, compress = 1.00, copies = 1.00, dedup * compress / copies = 2.50 dedup = 2.50, compress = 1.00, copies = 1.00, dedup * compress / copies = 2.50
 </code> </code>
 +
 +**So ZFS cannot match shifted data and make deduplication!**
 +
 +Additional simple test. Two files:
 +|0|B1|0|B2|0|B3|0|
 +|0|B1|B2|B3|
 +Only beginning of both files |0|B1| was deduplicated (16MB saved)
 +
 +ZFS provides block level deduplication based on block checksums which we got almost for free.
 +
  
 ===== Compression ===== ===== Compression =====
Line 134: Line 184:
 zfs set compression=on INBOX zfs set compression=on INBOX
 </code> </code>
 +Possible parameters for compression=on | off | lzjb | gzip | gzip-[1-9] | zle
 +New attributed applies only to newly written data. For test data I was using Maildir with some huge e-mails.
  
-But new attributed applies only to newly written data.+^compression ^ logical size  ^ physical size^ ratio |  
 +|off           702 MB      | 703 MB       | 1.0   | 
 +|on = lzjb     702 MB      | 531 MB       | 1.32  | 
 +|gzip-1      |   702 MB      | 374 MB       | 1.87  | 
 +|gzip=gzip-6 |   702 MB      | 359 MB       | 1.95  | 
 +|gzip-9      |   702 MB      | 353 MB       | 1.96  | 
 +|-- 
 +|squashfs    |               | 365 MB             |
  
-<code> 
-NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT 
-INBOX   975M   724M   251M    74%  1.00x  ONLINE  - 
-</code> 
- 
-The same data copied again to dataset after compression enabled 
- 
-<code> 
-NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT 
-INBOX   975M   563M   412M    57%  1.00x  ONLINE  - 
-</code> 
  
 zdb -S INBOX zdb -S INBOX
- 
 zdb -b INBOX zdb -b INBOX
  
-====== Tests: ====== 
  
-Filesystem was tested with 648MiB of e-mail stored in Maildir format (lots of binary attachment encoded as BASE64). 
  
-SquashFS=365MB vs ZFS=563MB +<code bash> 
- +zfs get compressratio 
-Deduplication: +</code>
- +
-Deduplication on file level works on ZFS and SquashFS (the same folder copied again). +
- +
-Deduplication of 2 different 32MB blobs, with file concatenated from | 0 | blob1 | 0 | blob2 | 0 | blob1 | 0 | blob2 |0| +
- +
-Deduplication on the same attachment inside different email doesn't work in ZFS.+
  
-====== References: ======+===== References: ===== 
 +[[http://docs.oracle.com/cd/E19253-01/819-5461/6n7ht6qu6/index.html]] 
 +[[https://wiki.freebsd.org/ZFSQuickStartGuide]]
  
 [[http://www.funtoo.org/ZFS_Fun|http://www.funtoo.org/ZFS_Fun]] [[http://www.funtoo.org/ZFS_Fun|http://www.funtoo.org/ZFS_Fun]]