Как скопировать только хорошие файлы из одного каталога в другой?

Как скопировать только хорошие файлы из одного каталога в другой?

У меня повреждена файловая система. Я хотел бы скопировать "выжившие", оставшиеся хорошие файлы. Поэтому мой вопрос -- как скопировать только хорошие файлы из одного каталога в другой.

Обратите внимание, что, например, один файл может быть 10 ГБ, и из него можно скопировать 5 ГБ. Поэтому, если инструмент, отвечающий за копирование, использует целевой каталог немедленно для хранения скопированного контента, он должен удалить такой частичный файл, как только станет ясно, что невозможно скопировать весь файл (потому что он нечитаем).

Хороший файл-- файл, который можно прочитать от начала до конца без ошибок ввода-вывода.

Важный: это должно происходить автоматически, т.е. без взаимодействия с пользователем (с взаимодействием с пользователем я уже использую Midnight Commander).

Обновлять: по практическим причинам требуется, чтобы можно было указать максимальное количество попыток чтения файла, в противном случае инструмент может легко попасть в бесконечный цикл, просто пытаясь прочитать файл снова и снова. Так, например, если заданный кусок файла не может быть прочитан (из-за ошибки ввода-вывода) и было X попыток — предположим, что файл не годится.

решение1

Есть утилита под названием ddrescueили dd_rescue. Это две разные утилиты, которые используют разные подходы для выполнения одной и той же задачи. Они копируют данные из A в B, но, в отличие от cp, они не терпят неудачу, а повторяют попытки несколько раз и пропускают, если не могут прочитать данные.
Эти утилиты не знают файловой системы, но вы можете запускать их для файлов вручную или с помощью find.
Однако я рекомендую, если это возможно, использовать dd_rescueдля копирования всего поврежденного диска в один файл образа в каком-нибудь безопасном месте, затем смонтировать этот образ и скопировать оттуда файлы обычным способом. Образ будет читаемым без ошибок.
Сначала используйте dd_recue.

решение2

Самым простым будет запустить fsck -aили fsck -yна поврежденной файловой системе (если это корневая файловая система, загрузитесь с Live CD и смонтируйте ее как внешний том). Все файлы, которые можно восстановить, окажутся на своем исходном месте, остальные окажутся в /lost+found-- где, если вы захотите, вы можете попытаться восстановить что-нибудь из них.

Упомянутые опции выполняют следующие действия:

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

Автоматически восстановить файловую систему без вопросов (используйте эту опцию с осторожностью). Обратите внимание, что e2fsck(8) поддерживает -a только для обратной совместимости. Эта опция сопоставлена ​​с опцией -p e2fsck, которую можно использовать безопасно, в отличие от опции -a, которую поддерживают некоторые программы проверки файловых систем.

(...)

Для некоторых специфичных для файловой системы проверяющих опция -y заставит специфичный для файловой системы fsck всегда пытаться исправить любое обнаруженное повреждение файловой системы автоматически. Иногда эксперт может справиться с fsck лучше, управляя им вручную. Обратите внимание, что не все специфичные для файловой системы проверяющие реализуют эту опцию. В частности, fsck.minix(8) и fsck.cramfs(8) не поддерживают опцию -y на момент написания этой статьи.

Связанный контент