Das Copy on Write Verfahren und die Hashüberprüfung von Btrfs sollen Bitfehler und Bitkipper minimieren und bei einem entsprechenden RAID Verbund „reparieren“ können, sogenanntes Self Healing.
Nun hatte ich selbst das zweifelhafte Vergnügen, auf Bitfehler zu stoßen.
Die entsprechende Festplatte ist ca 1 Jahr, eine Western Digital Red, damit für 24/7 und NAS Einsatz konzipiert.
Der Pool bestand nur aus einer Platte, da die Dateien nicht sehr kritisch sind und die Bitfehlerwarscheinlichkeit meinerseits stark unterschätzt wurde.
Aufgefallen sind die Bitfehler bei einem Scrub, welcher dann entsprechend with 214 errors
durchlief.
Da es keine Parität gab, konnten diese nur anhand der Daten und deren Hashwert festgestellt werden und nicht aus der Parität wiederhergestellt werden.
Weitere Informationen ließen sich mit btrfs device stats <Mountpoint des Pools>
erkennen.
[/dev/sdg].write_io_errs 0
[/dev/sdg].read_io_errs 0
[/dev/sdg].flush_io_errs 0
[/dev/sdg].corruption_errs 214
[/dev/sdg].generation_errs 0
Die corruption Error bezeichnen Fehler, wenn die Datei nichtmehr zum Hashwert passt.
In dem Fall ein klassischer Bitflip bei den Dateien oder den Hashwerten. Da Btrfs Single Pools standardmäßig mit doppelten Hashwerten anlegt, sind beschädigte Dateien warscheinlicher als das beide Hashsummen gleich beschädigt sind.
Nun ist es wichtig/informativ, herauszufinden welche Datei betroffen ist, um diese zb. aus einem Backup wieder herzustellen.
Die Fehler sind im /var/log/kern.log
zu finden:
/var/log/kern.log.1:Feb 21 02:44:19 pve kernel: [7618816.289938] BTRFS warning (device sdf): checksum error at logical 1479110389760 on dev /dev/sdf, sector 2890017976, root 5, inode 2309, offset 11884212224, length 4096, links 1 (path: <Pfad zur Datei>)
/var/log/kern.log.1:Feb 21 02:44:19 pve kernel: [7618816.289946] BTRFS warning (device sdf): checksum error at logical 1479107444736 on dev /dev/sdf, sector 2890012224, root 5, inode 2309, offset 11883950080, length 4096, links 1 (path: <Pfad zur Datei>)
Fazit
Bitfehler treten deutlich warscheinlicher auf, als man annimmt.
Ohne ZFS/Btrfs scrub stellt man sie erst fest wenn Dateien nichtmehr gelesen werden können oder Werte nichtmehr stimmen. Dies kann für die Vorhaltedauer des Backups schon zuspät sein und oder zu fehlerhaften Berechnungen führen.
Es gibt keinen Schutz, nur ein ZFS/Btrfs RAID mit regelmäßigem scrub, kann die Dateien wieder herstellen.