btrfs ioctl: получить контрольные суммы файлов из пространства пользователя

Я хотел бы получить контрольные суммы BTRFS, связанные с конкретным файлом, но, к сожалению, я не нашел подходящего ioctl для выполнения этого действия. Можно ли это сделать? Если так, как это сделать? Мне нужны сохраненные контрольные суммы, чтобы попытаться уменьшить нагрузку на процессор в случаях, подобных поведению rsync.

1 ответ

Решение

Только что вставил этот грязный код в мое репозиторий на github. https://github.com/Lakshmipathi/btrfs-progs/tree/dump_csum Это не официальный код. Я проверял файлы размером от 100K до 50GB. Кажется, они совпадают.

Использование:

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

создаст файл csumdump в месте назначения.

Пример:

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

создаст выходной файл с именем '/btrfs/50gbfile1.csumdump' с набором блоков файлов.

Примечание: я пробовал это в образовательных / учебных целях, так что это идет со всеми обычными оговорками. Планирую очистить этот код где-то на этой неделе.

Если вы планируете использовать, я бы порекомендовал вам проверить в следующих случаях:

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. 
Другие вопросы по тегам