ZFS Checksummen

Alles rund um sicherheitsrelevante Fragen und Probleme.
Antworten
Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

ZFS Checksummen

Beitrag von king-crash » 05.02.2021 18:49:09

Hallo,

bisher dachte ich ZFS würde die Checksummen beim Lesen der jeweiligen Datei überprüfen. Um das zu testen habe ich auf einer kleinen Partition einen Pool erstellt und eine Datei mit ca 90% Größe des verfügbaren Platzes erstellt. Dann mit "shasum" einen Hash davon ermittelt. Nun simuliere ich mittels schreibens genau eines Bytes in /dev/sd*? einen Fehler. "shasum" gibt mir jetzt einen abweichenden Hash während "zpool status" keine Probleme meldet. Erst wenn ich jetzt "zpool scrub" durchführe wird der Fehler bemerkt.
Kann ich ZFS irgendwie dazu bringen, die Checksummen bei jedem Lesevorgang zu überprüfen?

Hier die Vorgehensweise:
root@debiantest:~# zpool create -f -m /zfs-single zfs-single 1ddfc8d1-10ed-a643-a88d-c11f74b17483
root@debiantest:~# dd if=/dev/zero of=/zfs-single/testdatei bs=1M count=800
800+0 Datensätze ein
800+0 Datensätze aus
838860800 Bytes (839 MB, 800 MiB) kopiert, 9,86647 s, 85,0 MB/s
root@debiantest:~# shasum /zfs-single/testdatei
837b0910bd47c4dfb20d36b759beb4a73edc4a93 /zfs-single/testdatei
root@debiantest:~# ./disktest /dev/sda2 34 1000000003
vorher 00
root@debiantest:~# sync; echo 3 > /proc/sys/vm/drop_caches
root@debiantest:~# shasum /zfs-single/testdatei
2518c22cf9bd0785e752a7c0d1e534e790d29fdf /zfs-single/testdatei
root@debiantest:~# zpool status
pool: zfs-single
state: ONLINE
config:

NAME STATE READ WRITE CKSUM
zfs-single ONLINE 0 0 0
1ddfc8d1-10ed-a643-a88d-c11f74b17483 ONLINE 0 0 0

errors: No known data errors
root@debiantest:~# zpool scrub zfs-single
root@debiantest:~# zpool status
pool: zfs-single
state: ONLINE
status: One or more devices has experienced an error resulting in data
corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-8A
scan: scrub repaired 0B in 00:00:03 with 1 errors on Fri Feb 5 18:12:20 2021
config:

NAME STATE READ WRITE CKSUM
zfs-single ONLINE 0 0 0
1ddfc8d1-10ed-a643-a88d-c11f74b17483 ONLINE 0 0 1

errors: 1 data errors, use '-v' for a list
Hier das Programm zur Bytemanipulation: NoPaste-Eintrag41255

Benutzeravatar
bluestar
Beiträge: 2333
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: ZFS Checksummen

Beitrag von bluestar » 06.02.2021 21:30:27

Ich hab mal zum besseren Verständnis deines Problems ein paar Fragen:

- Hast du vor der Manipulation geprüft, dass du wirklich in einen Datenblock einer Datei manipulierst und nicht im Metadatenbereich von ZFS?

- Ich würde auch gerne dein Problem mit den Checksummen einmal nachvollziehen können, welchen konkreten Problemfall versuchst du hier durch Tests nachzustellen?

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: ZFS Checksummen

Beitrag von king-crash » 07.02.2021 11:49:40

Mein Verständnis von ZFS war bisher, dass durch die Checksummen, die jeder Block hat, Fehler jedweder Art beim Lesen gefunden werden können.
Siehe Hierzu: https://blogs.oracle.com/bonwick/zfs-en ... -integrity
The blocks of a ZFS storage pool form a Merkle tree in which each block validates all of its children.
Genau das wollte ich durch überschreiben eines zufälligen Bytes testen und es scheint nicht zu funktionieren.

Zu 1:
Ich habe das Dateisystem nur 1GB groß gemacht und zu 90% mit einer Datei gefüllt. Die Wahrscheinlichkeit die Daten zu treffen ist also hoch. Es muss aber auch egal sein, da Fehler sich nicht spezifisch die Nutzdaten suchen :-) Durch Checksummen auf Blockebene müsste ein Fehler, wenn er nicht gerade in einem unbenutzten Bereich ist, bemerkt werden.

Zu 2:
Der Fehler soll ein fehlerhaftes Byte von der Festplatte, sei es von der HDD selbst oder vom SATA, simulieren.

diggerchen
Beiträge: 114
Registriert: 15.01.2005 22:35:26

Re: ZFS Checksummen

Beitrag von diggerchen » 07.02.2021 12:30:28

@king-crash: Hattest Du während der Ermittlung der falschen Prüfsumme Einträge im Log?

Benutzeravatar
bluestar
Beiträge: 2333
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: ZFS Checksummen

Beitrag von bluestar » 07.02.2021 12:50:12

Also gemäß der ZFS-Doku (https://openzfs.github.io/openzfs-docs/ ... ksums.html) wird dein simulierter Fehler tatsächlich nur durch

Code: Alles auswählen

zfs scrub
erkannt.

Nach dem Scrub-Durchlauf müsstest du einen Lesefehler beim Zugriff auf die Datei bekommen.

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: ZFS Checksummen

Beitrag von king-crash » 07.02.2021 12:52:32

@diggerchen
Habe ich nicht nachgesehen, aber ich gehe davon aus dass wenn "zpool status" keine Fehler anzeigt, generell auch keine bemerkt wurden.
Ein nachfolgendes scrub hat die Fehler bemerkt. Aber nach allem was ich gelesen habe sollte es explizit nicht passieren, dass gelesene Daten fehlerhaft sind.
Zuletzt geändert von king-crash am 07.02.2021 12:57:36, insgesamt 1-mal geändert.

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: ZFS Checksummen

Beitrag von king-crash » 07.02.2021 12:56:23

@bluestar
detects data corruption upon reading from media
Liest sich für mich wie wenn Checksummen generell beim Lesen berechnet werden.
Scrub dient meines Verständnisses nach nur dazu wirklich alle Daten, nicht nur die die ohnehin gelesen werden, zu überprüfen.

Eventuell liege ich hier falsch, aber das ist doch wirklich eine herbe Einschränkung.

diggerchen
Beiträge: 114
Registriert: 15.01.2005 22:35:26

Re: ZFS Checksummen

Beitrag von diggerchen » 07.02.2021 20:14:43

Ich habe das ganze mal etwas modifiziert nachgestellt. Einmal in Debian Buster und einmal in Ubuntu 20.10, jeweils als VirtualBox VM mit zusätzlicher kleiner Platte für den Pool, in der ich jeweils per Hexeditor ein Byte verändert habe. Der Hash der Testdatei weicht dabei in beiden Fällen nach der Änderung ab, jedoch meldet nur zpool in Ubuntu umgehend einen data error, während in Debian der Fehler erst bei einen Scrub auffällt.

Die Ubuntu-Variante wäre so, wie ich mir das vorstelle. Wie bekommt man das in Debian hin?

Benutzeravatar
bluestar
Beiträge: 2333
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: ZFS Checksummen

Beitrag von bluestar » 07.02.2021 22:24:53

Welche ZFS Versionen hast du denn unter Debian bzw. Ubuntu getestet?

diggerchen
Beiträge: 114
Registriert: 15.01.2005 22:35:26

Re: ZFS Checksummen

Beitrag von diggerchen » 07.02.2021 23:17:15

0.8.6 aus den Backports mit Debian, 0.8.4 bei Ubuntu.

diggerchen
Beiträge: 114
Registriert: 15.01.2005 22:35:26

Re: ZFS Checksummen

Beitrag von diggerchen » 08.02.2021 09:56:40

Da ich einmal zugange war habe ich das auch in FreeBSD 12.2 durchgespielt. Dort kann ich den zweiten Hash gar nicht berechnen und erhalte stattdessen einen I/O-Error. Zusammen mit Log-Einträgen und einem data error im zpool-Status. Lässt sich das Verhalten im Fehlerfall vielleicht innerhalb von ZFS konfigurieren?

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: ZFS Checksummen

Beitrag von king-crash » 08.02.2021 11:03:51

diggerchen hat geschrieben: ↑ zum Beitrag ↑
08.02.2021 09:56:40
... erhalte stattdessen einen I/O-Error...
So hätte ich mir das auch vorgestellt. Der geiche Fehler tritt auch mit der Version 2.0.2 von dkms-zfs auf.

Edit: Version 0.7.12 hat das gleiche Problem.
Edit: Ubuntu Version 0.8.3 hat das Problem auch.

diggerchen
Beiträge: 114
Registriert: 15.01.2005 22:35:26

Re: ZFS Checksummen

Beitrag von diggerchen » 10.02.2021 12:57:12

Ich glaube ich habe Deinen Bugreport gefunden :hail:. Bin gespannt was dabei rauskommt.

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: ZFS Checksummen

Beitrag von king-crash » 10.02.2021 17:13:45

Entfernte Festplatten werden wohl auch erst nach einem Zugriff das Dateisystem bemerkt, obwohl das /dev/ Device wesentlich früher fehlt. Handelt es sich um ein Spare gibt es nie keine Meldung. Kann das jemand bestätigen?

diggerchen
Beiträge: 114
Registriert: 15.01.2005 22:35:26

Re: ZFS Checksummen

Beitrag von diggerchen » 10.02.2021 19:02:57

Der Tipp Richtung shasum war nicht schlecht. Bei mir unterschlägt das Ding den Fehler und gibt 'nen kaputten Hash raus. Verwende ich für den Zugriff auf die Test-Datei sha512sum oder auch einfach cp, dann gibt's den gewünschten I/O-Error auch unter Debian mit 0.8.6. Allerdings "merkt" zpool von dem Fehler erst beim 2. Mal oder 3. Mal etwas. Das bleibt komisch.

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: ZFS Checksummen

Beitrag von king-crash » 11.02.2021 02:45:28

Ich habe mal den Ablauf gescripted: NoPaste-Eintrag41264
Es ist wirklich komisch. Nachdem dd ausgeführt wurde wird der Fehler erkannt. Was genau passiert da in shasum anders?

Wenn ich eine Datei als Device verwende gibt es das Problem auch nicht...

diggerchen
Beiträge: 114
Registriert: 15.01.2005 22:35:26

Re: ZFS Checksummen

Beitrag von diggerchen » 11.02.2021 09:40:55

Mir ist lediglich aufgefallen, dass shasum ein Perl Script ist. sha512sum und cp nicht. Vielleicht kommt der Fehler in der Perl Fehlerbehandlung nicht an oder wird nicht ausgewertet? Ich kenne mich mit Perl aber auch nicht aus um das beurteilen zu können.

Benutzeravatar
bluestar
Beiträge: 2333
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: ZFS Checksummen

Beitrag von bluestar » 11.02.2021 11:57:01

Ich vermute das Problem hängt damit zusammen, das shasum als default im Text-Modus arbeitet und nicht im Binär-Modus. Versuch mal shasum -b DATEI.

https://manpages.debian.org/buster/perl ... .1.en.html

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: ZFS Checksummen

Beitrag von king-crash » 11.02.2021 12:18:31

Binär oder Textmodus machen nur unter Windows einen unterschied (\r\n). Ich bin ziemlich sicher, dass shasum auch ein Problem hat. Aber wenn es genau dann einen falschen Hash meldet wenn im Dateisystem auch etwas nicht stimmt und dies das nicht anzeigt ist mit Sicherheit auch im zfs etwas faul. Zumal nach wiederholtem Starten von shasum zfs den Fehler irgendwann doch bemerkt. shasum werde ich aber auch noch untersuchen.
Für das Skript habe ich mal ein github repo erstellt: https://github.com/Hi8chee7/zfstest.

mludwig
Beiträge: 793
Registriert: 30.01.2005 19:35:04

Re: ZFS Checksummen

Beitrag von mludwig » 11.02.2021 14:38:19

Vielleicht ein Problem durch den Cache? Du legst im ZFS eine Datei an, und modifizierst dann am Dateisystem vorbei den darunter liegenden Datenträger. Wenn die Datei noch von ZFS oder dem Betriebssystem im Cache gehalten wird, fällt die Modifikation erst auf wenn wirklich vom Datenträger gelesen werden muss. Der Cache ist ja noch korrekt. Vielleicht zwischendurch mal neu starten ...

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: ZFS Checksummen

Beitrag von king-crash » 11.02.2021 15:33:25

Dann dürfte der zweite Aufruf von shasum keinen abweichenden Hash liefern.

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: ZFS Checksummen

Beitrag von king-crash » 12.02.2021 11:52:10

Also die bisherigen Erkenntnisse sind, dass shasum einen read error ignoriert und zfs unter gewissen Umständen Fehler nicht weitermeldet.
Hier ist der Thread auf Github: https://github.com/openzfs/zfs/issues/11589

Antworten