diff --git a/Ubuntu-16.04-Root-on-ZFS.md b/Ubuntu-16.04-Root-on-ZFS.md index a6e3762..50f35b8 100644 --- a/Ubuntu-16.04-Root-on-ZFS.md +++ b/Ubuntu-16.04-Root-on-ZFS.md @@ -64,11 +64,23 @@ Always use the long `/dev/disk/by-id/*` aliases with ZFS. Using the `/dev/sd*` # zpool create -o ashift=12 \ -O atime=off -O canmount=off -O compression=lz4 -O normalization=formD \ - -O mountpoint=/ -R /mnt rpool /dev/disk/by-id/scsi-SATA_disk1-part1 + -O mountpoint=/ -R /mnt \ + -d -o feature@async_destroy=enabled \ + -o feature@empty_bpobj=enabled \ + -o feature@filesystem_limits=enabled \ + -o feature@lz4_compress=enabled \ + -o feature@spacemap_histogram=enabled \ + -o feature@extensible_dataset=enabled \ + -o feature@bookmarks=enabled \ + -o feature@enabled_txg=enabled \ + -o feature@embedded_data=enabled \ + -o feature@large_blocks=enabled + rpool /dev/disk/by-id/scsi-SATA_disk1-part1 **Notes:** * The use of `ashift=12` is recommended here because many drives today have 4KiB (or larger) physical sectors, even though they present 512B logical sectors. Also, a future replacement drive may have 4KiB physical sectors (in which case `ashift=12` is desirable) or 4KiB logical sectors (in which case `ashift=12` is required). * Setting `normalization=formD` eliminates some corner cases relating to UTF-8 filename normalization. It also implies `utf8only=on`, which means that only UTF-8 filenames are allowed. If you care to support non-UTF-8 filenames, do not use this option. For a discussion of why requiring UTF-8 filenames may be a bad idea, see [The problems with enforced UTF-8 only filenames](http://utcc.utoronto.ca/~cks/space/blog/linux/ForcedUTF8Filenames). +* The `hole_birth` feature is currently unsafe, so all zpool features are disabled with `-d` and then each feature except `hole_birth` is manually enabled. See [ZFS "partially filled holes lose birth time"](https://bugs.launchpad.net/ubuntu/+source/zfs-linux/+bug/1600060), [Want tunable to ignore hole_birth](https://github.com/zfsonlinux/zfs/pull/4833), [Silently corrupted file in snapshots after send/receive](https://github.com/zfsonlinux/zfs/issues/4809), [ZFS send fails to transmit some holes](https://www.illumos.org/issues/6370), [partially filled holes lose birth time](https://www.illumos.org/issues/6513), [dnode_next_offset can detect fictional holes](https://www.illumos.org/issues/6844), and [Yet another hole birth issue](https://www.illumos.org/issues/7176). **Hints:** * The root pool does not have to be a single disk; it can have a mirror or raidz topology. In that case, repeat the partitioning commands for all the disks which will be part of the pool. Then, create the pool using `zpool create ... rpool mirror /dev/disk/by-id/scsi-SATA_disk1-part1 /dev/disk/by-id/scsi-SATA_disk2-part1` (or replace `mirror` with `raidz`, `raidz2`, or `raidz3` and list the partitions from additional disks). Later, install GRUB to all the disks. This is trivial for MBR booting; the UEFI equivalent is currently left as an exercise for the reader. diff --git a/Ubuntu-16.10-Root-on-ZFS.md b/Ubuntu-16.10-Root-on-ZFS.md index 468c6a2..4a1fb19 100644 --- a/Ubuntu-16.10-Root-on-ZFS.md +++ b/Ubuntu-16.10-Root-on-ZFS.md @@ -67,11 +67,23 @@ Always use the long `/dev/disk/by-id/*` aliases with ZFS. Using the `/dev/sd*` # zpool create -o ashift=12 \ -O atime=off -O canmount=off -O compression=lz4 -O normalization=formD \ - -O mountpoint=/ -R /mnt rpool /dev/disk/by-id/scsi-SATA_disk1-part1 + -O mountpoint=/ -R /mnt \ + -d -o feature@async_destroy=enabled \ + -o feature@empty_bpobj=enabled \ + -o feature@filesystem_limits=enabled \ + -o feature@lz4_compress=enabled \ + -o feature@spacemap_histogram=enabled \ + -o feature@extensible_dataset=enabled \ + -o feature@bookmarks=enabled \ + -o feature@enabled_txg=enabled \ + -o feature@embedded_data=enabled \ + -o feature@large_blocks=enabled + rpool /dev/disk/by-id/scsi-SATA_disk1-part1 **Notes:** * The use of `ashift=12` is recommended here because many drives today have 4KiB (or larger) physical sectors, even though they present 512B logical sectors. Also, a future replacement drive may have 4KiB physical sectors (in which case `ashift=12` is desirable) or 4KiB logical sectors (in which case `ashift=12` is required). * Setting `normalization=formD` eliminates some corner cases relating to UTF-8 filename normalization. It also implies `utf8only=on`, which means that only UTF-8 filenames are allowed. If you care to support non-UTF-8 filenames, do not use this option. For a discussion of why requiring UTF-8 filenames may be a bad idea, see [The problems with enforced UTF-8 only filenames](http://utcc.utoronto.ca/~cks/space/blog/linux/ForcedUTF8Filenames). +* The `hole_birth` feature is currently unsafe, so all zpool features are disabled with `-d` and then each feature except `hole_birth` is manually enabled. See [ZFS "partially filled holes lose birth time"](https://bugs.launchpad.net/ubuntu/+source/zfs-linux/+bug/1600060), [Want tunable to ignore hole_birth](https://github.com/zfsonlinux/zfs/pull/4833), [Silently corrupted file in snapshots after send/receive](https://github.com/zfsonlinux/zfs/issues/4809), [ZFS send fails to transmit some holes](https://www.illumos.org/issues/6370), [partially filled holes lose birth time](https://www.illumos.org/issues/6513), [dnode_next_offset can detect fictional holes](https://www.illumos.org/issues/6844), and [Yet another hole birth issue](https://www.illumos.org/issues/7176). **Hints:** * The root pool does not have to be a single disk; it can have a mirror or raidz topology. In that case, repeat the partitioning commands for all the disks which will be part of the pool. Then, create the pool using `zpool create ... rpool mirror /dev/disk/by-id/scsi-SATA_disk1-part1 /dev/disk/by-id/scsi-SATA_disk2-part1` (or replace `mirror` with `raidz`, `raidz2`, or `raidz3` and list the partitions from additional disks). Later, install GRUB to all the disks. This is trivial for MBR booting; the UEFI equivalent is currently left as an exercise for the reader.