Как проверить, что все файлы в файловой системе могут быть прочитаны без ошибок?

292
A. Donda

Я использую внешний жесткий диск с файловой системой ext4 для создания резервных копий. Используемое мной программное обеспечение для резервного копирования (faubackup) копирует файловую иерархию 1: 1 в папку с меткой времени на жестком диске и создает инкрементные резервные копии таким образом, что жестко связывает новые копии файлов, содержимое которых не изменилось на тот же файл в соответствующей подпапке предыдущей резервной копии. Так как недавно у меня был диск с резервной копией, я хочу убедиться, что все записанные файлы действительно могут быть прочитаны без ошибок ввода-вывода, поэтому я знаю, что могу положиться на свою резервную копию.

Один из способов сделать это было бы, чтобы прочитать весь раздел, например, путем dd«ИНГ его /dev/null. Однако размер диска составляет 3 ТБ, и на это потребуется около 7 часов (через USB 3.0).

Другой способ заключается в использовании e2fsckс -cопцией, но это также принимает возрастов.

Я думаю, что должна быть возможность ускорить процесс, не проверяя весь диск, а только файлы, которые составляют лишь часть размера всего диска. Это можно сделать, например, записав все файлы в архив tar, который не записывается на диск, а отправляется в /dev/null. Здесь проблема заключается в жестком связывании: если я скажу 10 инкрементных резервных копий, хранилище для этого опять-таки является лишь частью диска, но кажется, что оно примерно в 10 раз больше.

Мой вопрос: есть ли способ читать только файлы на диске, и только по одному в каждом наборе файлов, жестко связанных с одним и тем же пространством хранения? Или есть способ сделать e2fsck -cили что-то подобное проверить только используемые части файловой системы (выделенные блоки)?

1

1 ответ на вопрос

2
ua2b

GNU tar does not copy the content of hard linked files multiple times. Read the first answer to this question or the official documentation on this topic. You can test this by piping the output (the archive) of tar through wc: tar cf - -C <mountpoint of your disk> . | wc -c and verify the archive size in bytes (you can compare this to the result with the tar option --hard-dereference).

Похожие вопросы