SOHO storage server ZFS dedup vdev

From: David Christensen <dpchrist_at_holgerdanske.com>
Date: Thu, 01 Sep 2022 20:17:30 UTC
freebsd-questions:

I have a storage server for my SOHO network with Samba and SSH/CVS.  I 
am the sole user:

# freebsd-version ; uname -a
12.3-RELEASE-p6
FreeBSD f3.tracy.holgerdanske.com 12.3-RELEASE-p6 FreeBSD 
12.3-RELEASE-p6 GENERIC  amd64

# gpart show -p ada0 ada0s1
=>       63  117231345    ada0  MBR  (56G)
          63       1985          - free -  (993K)
        2048   29360128  ada0s1  freebsd  [active]  (14G)
    29362176   87869232  ada0s2  freebsd  (42G)

=>       0  29360128   ada0s1  BSD  (14G)
          0   4194304  ada0s1a  freebsd-zfs  (2.0G)
    4194304   4194304  ada0s1b  freebsd-swap  (2.0G)
    8388608  20971520  ada0s1d  freebsd-zfs  (10G)

# gpart show -l ada1 ada2 ada3 ada4
=>        40  5860533088  ada1  GPT  (2.7T)
           40        2008        - free -  (1.0M)
         2048  5860530176     1  p3c  (2.7T)
   5860532224         904        - free -  (452K)

=>        40  5860533088  ada2  GPT  (2.7T)
           40  5860533088     1  p3d  (2.7T)

=>        34  5860533101  ada3  GPT  (2.7T)
           34        2014        - free -  (1.0M)
         2048  5860530176     1  p3f  (2.7T)
   5860532224         911        - free -  (456K)

=>        34  5860533101  ada4  GPT  (2.7T)
           34        2014        - free -  (1.0M)
         2048  5860530176     1  p3g  (2.7T)
   5860532224         911        - free -  (456K)

# zpool status p3
   pool: p3
  state: ONLINE
   scan: resilvered 1.89T in 0 days 06:22:13 with 0 errors on Mon Aug 29 
04:01:33 2022
config:

	NAME                  STATE     READ WRITE CKSUM
	p3                    ONLINE       0     0     0
	  mirror-0            ONLINE       0     0     0
	    gpt/p3c.eli       ONLINE       0     0     0
	    gpt/p3g.eli       ONLINE       0     0     0
	  mirror-1            ONLINE       0     0     0
	    gpt/p3d.eli       ONLINE       0     0     0
	    gpt/p3f.eli       ONLINE       0     0     0
	cache
	  ada0s2.eli          ONLINE       0     0     0

errors: No known data errors


Some of the datasets use deduplication:

# zfs get -d 1 all p3 | egrep 'dedup.+verify'
p3/archive               dedup                  verify                 local
p3/backup                dedup                  verify                 local


I am thinking of adding a dedup vdev to the pool to improve performance 
of read/ write operations and outgoing replication.  RTFM zpool(8):

DESCRIPTION

    Virtual Devices (vdevs)

      dedup   A device dedicated solely for allocating dedup data.  The
              redundancy of this device should match the redundancy of the
              other normal devices in the pool.  If more than one dedup 
device
              is specified, then allocations are load-balanced between 
devices.


As the pool is a stripe of two mirrors of two HDD's each, AIUI the dedup 
vdev should be a mirror (RAID1) of two devices.


I plan to use two SSD's:

2 @ 
https://ark.intel.com/content/www/us/en/ark/products/66249/intel-ssd-520-series-180gb-2-5in-sata-6gbs-25nm-mlc.html


I am wondering what is the best way to create the dedup vdev?

1.  The motherboard has Intel RSTe SW RAID and Intel Embedded Server 
RAID Technology II, but it looks like device drivers and UI software are 
required.  I am unsure if FreeBSD 12.3-R provides such.

https://www.intel.com/content/www/us/en/support/articles/000055798/server-products/sasraid.html

2.  Use GEOM RAID.  I am unsure if this provides integrity checking of 
block ontents, or only protects against one device failing (e.g. long 
time out).

3.  Use a ZFS mirrored pool and a volume.


Comments or suggestions?


David