My ZFS Setup

Step 1:

I make sure that I have any desired changes in /boot/loader.conf, /etc/sysctl.conf, and /etc/rc.conf before creating any ZFS volumes.

/boot/loader.conf changes:

# disable the auto-generated Disk IDs for disks
kern.geom.label.disk_ident.enable="0"

# disable the auto-generated GPT UUIDs for disks
kern.geom.label.gptid.enable="0"

/etc/sysctl.conf changes:

# set 4K ashift
vfs.zfs.min_auto_ashift=12

/etc/rc.conf changes:

# enable ZFS file system
zfs_enable="YES"

Step 2:

For my most recent setup, I used a Dell MD1200 w/ 12 HDDs. For this example, I will call it "JBOD01".

When inserted, the drives were identified as da0 through da11.

I initialized each as GPT:

gpart create -s gpt /dev/da0
gpart create -s gpt /dev/da1
gpart create -s gpt /dev/da2
...

I then created a ZFS partition, 1MB-aligned, on each disk and labeled it:

gpart add -t freebsd-zfs -a 1M -l jbod01-00 /dev/da0
gpart add -t freebsd-zfs -a 1M -l jbod01-01 /dev/da1
gpart add -t freebsd-zfs -a 1M -l jbod01-02 /dev/da2
...

The output of "gpart show" looked similar to this:

=>         40  19532873648  da0  GPT  (9.1T)
           40         2008       - free -  (1.0M)
         2048  19532869632    1  freebsd-zfs  (9.1T)
  19532871680         2008       - free -  (1.0M)

=>         40  19532873648  da1  GPT  (9.1T)
           40         2008       - free -  (1.0M)
         2048  19532869632    1  freebsd-zfs  (9.1T)
  19532871680         2008       - free -  (1.0M)

=>         40  19532873648  da2  GPT  (9.1T)
           40         2008       - free -  (1.0M)
         2048  19532869632    1  freebsd-zfs  (9.1T)
  19532871680         2008       - free -  (1.0M)
...

Step 3:

I then created a "RAID60" equivalent (two raidz2 vdevs, striped) with the following command (all one line). I alternated every other disk in each vdev.

zpool create tank raidz2 gpt/jbod01-01 gpt/jbod01-03 gpt/jbod01-05 gpt/jbod01-07 gpt/jbod01-09 gpt/jbod01-11 raidz2 gpt/jbod01-00 gpt/jbod01-02 gpt/jbod01-04 gpt/jbod01-06 gpt/jbod01-08 gpt/jbod01-10

I verified that I the new tank was 4K-aligned:

zdb | egrep 'ashift| name'

I set some ZFS options used for our setup:

zfs set compression=lz4 tank
zfs set snapdir=visible tank
zfs set aclmode=passthrough tank
zfs set aclinherit=passthrough tank
zfs set atime=off tank

Performance has so far been quite nice. Running a scrub goes faster than I expected.

  pool: tank
 state: ONLINE
  scan: scrub in progress since Tue Sep  4 12:53:44 2018
	576G scanned out of 8.24T at 1.23G/s, 1h46m to go
        0 repaired, 6.83% done
config:

	NAME               STATE     READ WRITE CKSUM
	tank               ONLINE       0     0     0
	  raidz2-0         ONLINE       0     0     0
	    gpt/jbod01-01  ONLINE       0     0     0
	    gpt/jbod01-03  ONLINE       0     0     0
	    gpt/jbod01-05  ONLINE       0     0     0
	    gpt/jbod01-07  ONLINE       0     0     0
	    gpt/jbod01-09  ONLINE       0     0     0
	    gpt/jbod01-11  ONLINE       0     0     0
	  raidz2-1         ONLINE       0     0     0
	    gpt/jbod01-00  ONLINE       0     0     0
	    gpt/jbod01-02  ONLINE       0     0     0
	    gpt/jbod01-04  ONLINE       0     0     0
	    gpt/jbod01-06  ONLINE       0     0     0
	    gpt/jbod01-08  ONLINE       0     0     0
	    gpt/jbod01-10  ONLINE       0     0     0