2015-09-24 5 views
7

Ich möchte die BTRFS-Prüfsummen beziehen, die sich auf die spezifische Datei beziehen, aber leider habe ich keine geeignete ioctl gefunden, um diese Aktion auszuführen. Ist es möglich zu tun? Wenn ja, wie geht das? Ich brauche gespeicherte Prüfsummen, um zu versuchen, die CPU-Last in Fällen zu reduzieren, die dem rsync-Verhalten ähnlich sind.btrfs ioctl: Dateiprüfsummen aus Benutzerbereich abrufen

+2

BTW, erzeugt Btrfs Prüfsummen für * Blöcke *, nicht für * Dateien * (AFAIK). – gavv

+2

Das ist genau was ich will: eine Liste von Prüfsummen für Blöcke der gegebenen Datei. – 0x2207

+1

Ich habe den Quellcode überflogen und ich sehe keine Schnittstelle, um die Prüfsummenwerte zu erhalten. – rodrigo

Antwort

1

Gerade jetzt schob diesen chaotischen Code in meine GitHub Repo. https://github.com/Lakshmipathi/btrfs-progs/tree/dump_csum Es ist kein offizieller Code. Ich habe auf Dateien zwischen Größe 100K bis 50GB getestet. Sie scheinen zu passen.

Verbrauch:

./btrfs-debug-tree -f /path/to/file /btrfs/partition 

wird csumdump Datei auf Ziel erstellen.

Beispiel:

sudo ./btrfs-debug-tree -f /btrfs/50gbfile1 /dev/sda4 

wird eine Ausgabedatei-Namen erstellen '/btrfs/50gbfile1.csumdump' mit csum von Dateiblöcken.

Hinweis: Ich habe dies aus pädagogischen/Lerngründen versucht, also kommt es mit allen üblichen Disclaimern. Ich plane diesen Code irgendwann diese Woche zu bereinigen.

Wenn Sie verwenden möchten, würde ich Ihnen empfehlen, mit folgenden Fällen zu testen:

1) Create 20GB (or any file with size > 1KB) on /tmp/ 
2) mount your btrfs partition on /btrfs and copy file /tmp/file /btrfs/f1 
3) Now dump the csum it will produce /btrfs/f1.csumdump 
4) cp /tmp/file /btrfs/f2 and dump f2's csum. 
5) Now compare f1.csumdump with f2.csumdump If they match, it seems to be 
working. If they didn't match something went wrong. 
Verwandte Themen