Bcachefs

Aus DebianforumWiki
Wechseln zu: Navigation, Suche
Baustelle.png Baustelle: Dieser Artikel ist eine Baustelle. Das heißt, jemand hat sich dieses Artikels angenommen und überarbeitet ihn gerade.


Warnung.png 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