Bcachefs
Baustelle: Dieser Artikel ist eine Baustelle. Das heißt, jemand hat sich dieses Artikels angenommen und überarbeitet ihn gerade. |
Warnung: Es handelt sich aktuell noch um kein vollständig stabiles Dateisystem, daher bitte immer ein Backup parat haben oder nur Dateien darauf speichern wo es nicht schlimm ist wenn sie verloren gehen |
Bcachefs ist ein Dateisystem was sich aktuell in Entwicklung befindet. Es möchte die Lücke zwischen zfs und btrfs schliessen und an die Performance von xfs/ext4 heran kommen.
Features
Laut dem Entwickler Kent Overstreet sollten folgende Features "pretty solid" sein:
- replication (RAID 1)
- compression (lz4, gzip, zstd - letztere nocht nicht Stabil)
- checksumming
- Multidevice Support
- Caching mittels SSD/NVMe
- reflink
Was schon in in bcachefs drin ist, aber noch nicht so stabil ist wie oben:
- erasure coding (ähnlich RAID5/6)
- Verschlüsselung
Aktuell fehlt noch mehr oder weniger komplett:
- Snapshot Support
- Send/Receive
- Failure Domains
bcachefs installation
Da bcachefs noch nicht im Kernel ist müssen wir uns den Kernel selber bauen + den Userland-Tools dafür
bcachefs Tools installieren
Zuerst brauchen wir ein paar Pakete:
root@debian:~# apt install -y pkg-config libaio-dev libblkid-dev libkeyutils-dev liblz4-dev libscrypt-dev libsodium-dev liburcu-dev libzstd-dev libudev-dev uuid-dev zlib1g-dev make gcc git
Jetzt brauchen wir noch den aktuellen Code, Kompilieren und Installieren ihn anschliessend:
root@debian:~# git clone https://evilpiepirate.org/git/bcachefs-tools.git
root@debian:~# cd bcachefs-tools/
root@debian:~# make && make install
Soo fertig, die brauchen wir gleich, jetzt erstmal den passenden Kernel installieren..
bcachefs Kernel installieren
Auch dafür brauchen wir wieder ein paar Pakete:
root@debian:~# apt install -y fakeroot build-essential devscripts libncurses5 libncurses5-dev bc libelf-dev libssl-dev flex bison linux-source kmod cpio rsync
So, jetzt laden wir uns den Kernel herunter, Kopieren die Config von nserem aktuellen Kernel und kompilieren den Kernel:
root@debian:~# git clone https://evilpiepirate.org/git/bcachefs.git
root@debian:~# cd bcachefs
root@debian:~# cp /boot/config-`uname -r` .config
root@debian:~# make menuconfig
root@debian:~# #dort unter »File Systems -> bcachefs« mit einem * aktivieren
root@debian:~# make -j4 deb-pkg LOCALVERSION=-bcachefs-$(git show --format="%h" --no-patch)
So jetzt haben wir unseren bcachefs-Kernel kompiliert und passend dazu auch gleich ein DEB-Paket erstellt, was wir auch gleich installieren..
root@debian:~# cd ..
root@debian:~# dpkg -i linux-image-5.10.0-bcachefs-7b7ddbb0e20d2.deb
root@debian:~# #reboot um neuen Kernel zu nutzen
root@debian:~# reboot
bcachefs nutzen
leider ist die Doku nicht so der knüller, auch die manpage gibt noch nicht soo viel her, leider. Ich zeige nur die Befehle, außer es gibt dort mehr zu sagen, der rest sollte selbsterklärend sein.
SSD als Cache
Background | Quelle für den Lesecache/ Ziel für den Schreibcache |
foreground | Schreibcache, dort werden Daten zuerst hingeschrieben und später auf das Background Target |
promote | Lesecache, als Caching-Algorythmus wird LRU genutzt |
Im folgenden Beispiel wird sdc (Harddisk) von sdb (SSD) als Schreib-/Lesecache genutzt:
root@debian:~# bcachefs format /dev/sd[bc] \
--foreground_target /dev/sdb \
--promote-target /dev/sdb \
--background_target /dev/sdc
root@debian:~# #das ganze mounten:
root@debian:~# mount -t bcachefs /dev/sdb:/dev/sdc /mnt
Ein etwas anderes Beispiel als RAID6 mit verschiedenen Schreib-/Lesecaches:
root@debian:~# bcachefs format \
--group=ssd /dev/sdb /dev/sdc
--group=nvme /dev/sdh /dev/sdi
--group=hdd /dev/sdd /dev/sde /dev/sdf /dev/sdg \
--replicas=2 --erasure_code \
--foreground_target=ssd \
--background_target=hdd \
--promote_target=nvme
root@debian:~# #das ganze wieder mounten:
root@debian:~# mount -t bcachefs /dev/sdb:/dev/sdc:/dev/sdh:/dev/sdi:/dev/sdd:/dev/sde:/dev/sdf:/dev/sdg /mnt
RAID1
root@debian:~# bcachefs format --replicas=2 /dev/sdb /dev/sdc
root@debian:~# mount -t bcachefs /dev/sda1:/dev/sdb1 /mnt
erasure Coding
erasure Coding ist eine Art RAID5/6, genaueres dazu gib es hier
RAID5 like
root@debian:~# bcachefs format --replicas=2 --erasure_code /dev/sdb /dev/sdc /dev/sdd
RAID6 like
root@debian:~# bcachefs format --replicas=3 --erasure_code /dev/sdb /dev/sdc /dev/sdd /dev/sde
einen Ordner anders behandeln
mittels bcachefs setattr kann man für bestimmte Ordner/Dateien die Eigenschaften ändern, im folgenden Beispiel möchten wir das unsere PostgreSQL eine NVMe als Lese-/Schreibcache nimmt und da sich SQL gut Komprimnieren lässt machen wir das auch gleich
root@debian:~# bcachefs setattr --foreground_target=/dev/nvme1 --background_target=/dev/nvme2 --compression=lz4 /var/lib/postgresql/
bcachefs als root-Dateisystem
work in progress