ZFS: Difference between revisions

34j (talk | contribs)
m replace urls with {{nixos:...}} templates
34j (talk | contribs)
Add more kind notes for the guide
Line 144: Line 144:


'''Let's use variables from now on for simplicity.
'''Let's use variables from now on for simplicity.
Get the device ID in <code>/dev/disk/by-id/</code>, in our case here it is <code>nvme-SKHynix_HFS512GDE9X081N_FNB6N634510106K5O</code>
Get the device ID in <code>/dev/disk/by-id/</code> (using {{ic|blkid}}), in our case here it is <code>nvme-SKHynix_HFS512GDE9X081N_FNB6N634510106K5O</code>
'''
'''
<syntaxhighlight lang=bash>
<syntaxhighlight lang=bash>
Line 151: Line 151:
DISK=/dev/disk/by-id/nvme-SKHynix_HFS512GDE9X081N_FNB6N634510106K5O-part3
DISK=/dev/disk/by-id/nvme-SKHynix_HFS512GDE9X081N_FNB6N634510106K5O-part3
</syntaxhighlight>
</syntaxhighlight>
{{note|It is often recommended to specify the drive using the device ID/UUID to prevent incorrect configuration, but it is also possible to use the device name (e.g. /dev/sda). See also: [[#Zpool created with bus-based disk names]], [https://wiki.archlinux.org/title/Persistent_block_device_naming Persistent block device naming - ArchWiki]}}


'''Make a ZFS pool with encryption and mount points'''
'''Make a ZFS pool with encryption and mount points'''
Line 168: Line 170:
zfs create zpool/home
zfs create zpool/home


# Mount root
mkdir -p /mnt
mkdir -p /mnt
mount -t zfs zpool/root /mnt -o zfsutil
mount -t zfs zpool/root /mnt -o zfsutil
# Mount nix, var, home
mkdir /mnt/nix /mnt/var /mnt/home
mkdir /mnt/nix /mnt/var /mnt/home
mount -t zfs zpool/nix /mnt/nix -o zfsutil
mount -t zfs zpool/nix /mnt/nix -o zfsutil
mount -t zfs zpool/var /mnt/var -o zfsutil
mount -t zfs zpool/var /mnt/var -o zfsutil
Line 204: Line 208:
'''Installation'''
'''Installation'''
   
   
<syntaxhighlight lang="bash">
# Mount boot
# Mount boot
<syntaxhighlight lang="bash">
mkdir -p /mnt/boot
mkdir -p /mnt/boot
mount $BOOT /mnt/boot
mount $BOOT /mnt/boot
Line 219: Line 223:
Now edit the configuration.nix that was just created in <code>/mnt/etc/nixos/configuration.nix</code> and make sure to have at least the following content in it.
Now edit the configuration.nix that was just created in <code>/mnt/etc/nixos/configuration.nix</code> and make sure to have at least the following content in it.


<syntaxhighlight lang="nix">
{{file|/mnt/etc/nixos/configuration.nix|diff|3=
{
{
...
...
Line 226: Line 230:


   # for local disks that are not shared over the network, we don't need this to be random
   # for local disks that are not shared over the network, we don't need this to be random
   networking.hostId = "8425e349";
   # without this, "ZFS requires networking.hostId to be set" will be raised
networking.hostId = "8425e349";
...
...
</syntaxhighlight>
}
}}


Now check the hardware-configuration.nix in <code>/mnt/etc/nixos/hardware-configuration.nix</code> and add whats missing e.g. <code>options = [ "zfsutil" ]</code> for all filesystems except boot and <code>randomEncryption = true;</code> for the swap partition. Also change the generated swap device to the partition we created e.g. <code>/dev/disk/by-id/nvme-SKHynix_HFS512GDE9X081N_FNB6N634510106K5O-part2</code> in this case and <code>/dev/disk/by-id/nvme-SKHynix_HFS512GDE9X081N_FNB6N634510106K5O-part1</code> for boot.
Now check the hardware-configuration.nix in <code>/mnt/etc/nixos/hardware-configuration.nix</code> and add whats missing e.g. <code>options = [ "zfsutil" ]</code> for all filesystems except boot and <code>randomEncryption = true;</code> for the swap partition. Also change the generated swap device to the partition we created e.g. <code>/dev/disk/by-id/nvme-SKHynix_HFS512GDE9X081N_FNB6N634510106K5O-part2</code> in this case and <code>/dev/disk/by-id/nvme-SKHynix_HFS512GDE9X081N_FNB6N634510106K5O-part1</code> for boot.


<syntaxhighlight lang="nix">
{{file|/mnt/etc/nixos/configuration.nix|diff|3=
{
...
...
   fileSystems."/" = {  
   fileSystems."/" = {  
Line 238: Line 245:
     fsType = "zfs";
     fsType = "zfs";
     # the zfsutil option is needed when mounting zfs datasets without "legacy" mountpoints
     # the zfsutil option is needed when mounting zfs datasets without "legacy" mountpoints
    options = [ "zfsutil" ];
+    options = [ "zfsutil" ];
   };
   };


Line 244: Line 251:
     device = "zpool/nix";
     device = "zpool/nix";
     fsType = "zfs";
     fsType = "zfs";
    options = [ "zfsutil" ];
+    options = [ "zfsutil" ];
   };
   };


Line 250: Line 257:
     device = "zpool/var";
     device = "zpool/var";
     fsType = "zfs";
     fsType = "zfs";
    options = [ "zfsutil" ];
+    options = [ "zfsutil" ];
   };
   };


Line 256: Line 263:
     device = "zpool/home";
     device = "zpool/home";
     fsType = "zfs";
     fsType = "zfs";
    options = [ "zfsutil" ];
+    options = [ "zfsutil" ];
   };
   };


Line 265: Line 272:


   swapDevices = [{
   swapDevices = [{
    device = "/dev/disk/by-id/nvme-SKHynix_HFS512GDE9X081N_FNB6N634510106K5O-part2";
+    device = "/dev/disk/by-id/nvme-SKHynix_HFS512GDE9X081N_FNB6N634510106K5O-part2";
    randomEncryption = true;
+    randomEncryption = true;
   }];
   }];
}
}
</syntaxhighlight>
}}


Now you may install NixOS with <code>nixos-install</code>.
Now you may install NixOS with <code>nixos-install</code>.