Bcachefs: Difference between revisions
→NixOS installation on bcachefs: Cleanup instruction |
|||
| (14 intermediate revisions by 5 users not shown) | |||
| Line 1: | Line 1: | ||
[https://bcachefs.org Bcachefs] is a next-generation CoW filesystem that aims to provide features from [[Btrfs]] and [[ZFS]] with a cleaner codebase, more stability, greater speed and a GPL-compatible license. It is built upon Bcache and is mainly developed by Kent Overstreet. | [https://bcachefs.org Bcachefs] is a next-generation CoW filesystem that aims to provide features from [[Btrfs]] and [[ZFS]] with a cleaner codebase<ref name=":0">citation needed</ref>, more stability<ref name=":0" />, greater speed<ref name=":0" /> and a GPL-compatible license. It is built upon Bcache and is mainly developed by Kent Overstreet. | ||
== Installation == | == Installation == | ||
| Line 57: | Line 57: | ||
--label=hdd.hdd3 /dev/sde \ | --label=hdd.hdd3 /dev/sde \ | ||
--label=ssd.ssd1 /dev/sdf \ | --label=ssd.ssd1 /dev/sdf \ | ||
--label=ssd.ssd2 /dev/sdg | --label=ssd.ssd2 /dev/sdg \ | ||
--foreground_target=ssd \ | --foreground_target=ssd \ | ||
--promote_target=ssd \ | --promote_target=ssd \ | ||
| Line 71: | Line 71: | ||
--label=hdd.hdd3 /dev/sde \ | --label=hdd.hdd3 /dev/sde \ | ||
--label=ssd.ssd1 /dev/sdf \ | --label=ssd.ssd1 /dev/sdf \ | ||
--label=ssd.ssd2 /dev/sdg | --label=ssd.ssd2 /dev/sdg \ | ||
--foreground_target=ssd \ | --foreground_target=ssd \ | ||
--promote_target=ssd \ | --promote_target=ssd \ | ||
| Line 88: | Line 88: | ||
<syntaxhighlight lang="console"> | <syntaxhighlight lang="console"> | ||
# bcachefs fsck /dev/sda | # bcachefs fsck /dev/sda | ||
</syntaxhighlight>Change partition encryption password for <code>/dev/sda1</code><syntaxhighlight lang="console"> | |||
# bcachefs set-passphrase /dev/sda1 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
| Line 112: | Line 114: | ||
== Tips and tricks == | == Tips and tricks == | ||
=== Generate bcachefs enabled installation media === | === Generate bcachefs enabled installation media === | ||
Use following Nix [[Flakes|Flake-expression]] to generate a ISO installation image with a bcachefs enabled kernel | Use following Nix [[Flakes|Flake-expression]] to generate a ISO installation image with a bcachefs enabled kernel | ||
{{file|flake.nix|nix|<nowiki> | {{file|flake.nix|nix|<nowiki> | ||
{ | { | ||
description = "Bcachefs enabled installation media"; | description = "Bcachefs enabled installation media"; | ||
inputs.nixos.url = "nixpkgs/nixos- | inputs.nixos.url = "nixpkgs/nixos-25.11"; | ||
outputs = { self, nixos }: { | outputs = { self, nixos }: { | ||
nixosConfigurations = { | nixosConfigurations = { | ||
| Line 127: | Line 131: | ||
"${nixos}/nixos/modules/installer/cd-dvd/installation-cd-minimal-new-kernel-no-zfs.nix" | "${nixos}/nixos/modules/installer/cd-dvd/installation-cd-minimal-new-kernel-no-zfs.nix" | ||
({ lib, pkgs, ... }: { | ({ lib, pkgs, ... }: { | ||
# | # Required as a workaround for bug | ||
# https://github.com/NixOS/nixpkgs/issues/32279 | # https://github.com/NixOS/nixpkgs/issues/32279 | ||
environment.systemPackages = [ pkgs.keyutils ]; | environment.systemPackages = [ pkgs.keyutils ]; | ||
| Line 140: | Line 144: | ||
The following commands will generate the iso-image which will be available in the directory <code>./result/iso</code> | The following commands will generate the iso-image which will be available in the directory <code>./result/iso</code> | ||
<syntaxhighlight lang="console"> | <syntaxhighlight lang="console"># nix build .#nixosConfigurations.exampleIso.config.system.build.isoImage | ||
# nix build .#nixosConfigurations.exampleIso.config.system.build.isoImage | |||
</syntaxhighlight> | </syntaxhighlight> | ||
| Line 169: | Line 170: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Formatting and unlocking the encrypted partition would look like this | |||
<syntaxhighlight lang="console"> | <syntaxhighlight lang="console"> | ||
# keyctl link @u @s | # keyctl link @u @s | ||
# bcachefs format --encrypted /dev/sda2 | # bcachefs format --label=nixos --encrypted /dev/sda2 | ||
# bcachefs unlock /dev/sda2 | # bcachefs unlock /dev/sda2 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Mount filesystems | Mount filesystems. Use <code>lsblk -o +uuid,fsType | grep bcachefs</code> to get bcachefs partition uuid. | ||
<syntaxhighlight lang="console"> | <syntaxhighlight lang="console"> | ||
# mount /dev/ | # mount /dev/disk/by-uuid/<...> /mnt | ||
# mkdir /mnt/boot | # mkdir /mnt/boot | ||
# mount /dev/disk/by-label/boot /mnt/boot | # mount /dev/disk/by-label/boot /mnt/boot | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Continue installation as recommended by the [https://nixos.org/manual/nixos/stable/index.html#ch-installation NixOS manual]. | Continue installation as recommended by the [https://nixos.org/manual/nixos/stable/index.html#ch-installation NixOS manual]. | ||
=== Remote encrypted disk unlocking === | === Remote encrypted disk unlocking === | ||
| Line 212: | Line 196: | ||
after = [ "local-fs.target" ]; | after = [ "local-fs.target" ]; | ||
wantedBy = [ "multi-user.target" ]; | wantedBy = [ "multi-user.target" ]; | ||
environment = { | |||
DEVICE_PATH = "/dev/sda1"; | |||
MOUNT_POINT = "/mnt"; | |||
}; | |||
script = '' | script = '' | ||
#!${pkgs.runtimeShell} -e | #!${pkgs.runtimeShell} -e | ||
${pkgs.keyutils}/bin/keyctl link @u @s | ${pkgs.keyutils}/bin/keyctl link @u @s | ||
echo "Waiting for | # Check if the device path exists | ||
if [ ! -b "$DEVICE_PATH" ]; then | |||
echo "Error: Device path $DEVICE_PATH does not exist." | |||
exit 1 | |||
fi | |||
# Check if the drive is already mounted | |||
if ${pkgs.util-linux}/bin/mountpoint -q "$MOUNT_POINT"; then | |||
echo "Drive already mounted at $MOUNT_POINT. Skipping..." | |||
exit 0 | |||
fi | |||
# Wait for the device to become available | |||
while [ ! -b "$DEVICE_PATH" ]; do | |||
echo "Waiting for $DEVICE_PATH to become available..." | |||
sleep 5 | sleep 5 | ||
done | done | ||
${pkgs.bcachefs-tools}/bin/bcachefs mount -f /etc/keyfile_test | |||
# Mount the device | |||
${pkgs.bcachefs-tools}/bin/bcachefs mount -f /etc/keyfile_test "$DEVICE_PATH" "$MOUNT_POINT" | |||
''; | ''; | ||
serviceConfig = { | serviceConfig = { | ||