¿Cómo copiar sólo archivos buenos de un directorio a otro?

¿Cómo copiar sólo archivos buenos de un directorio a otro?

Tengo el sistema de archivos corrupto. Me gustaría copiar los "supervivientes" que quedan en buen estado. Entonces mi pregunta es: cómo copiar solo archivos buenos de un directorio a otro.

Tenga en cuenta que, por ejemplo, un archivo puede tener 10 GB y es posible copiar 5 GB. Entonces, si la herramienta responsable de la copia usa el directorio de destino inmediatamente para almacenar el contenido copiado, debe eliminar dicho archivo parcial tan pronto como quede claro que es imposible copiar el archivo completo (porque es ilegible).

Buen archivo-- un archivo que se puede leer desde el principio hasta el final sin ningún error de E/S.

Importante: debe hacerse automáticamente, es decir sin interacción del usuario (con interacción del usuario ya estoy usando Midnight Commander).

Actualizar: por razones prácticas, es necesario que se puedan especificar los intentos máximos de lectura del archivo; de lo contrario, la herramienta podría caer fácilmente en un bucle infinito simplemente intentando leer un archivo una y otra vez. Entonces, por ejemplo, si un fragmento determinado de un archivo no se puede leer (debido a un error de E/S) y hubo X intentos, asuma que el archivo no es bueno.

Respuesta1

Hay una utilidad llamada ddrescueo dd_rescue. Se trata de dos utilidades diferentes que utilizan enfoques diferentes para hacer lo mismo. Copian datos de A a B, pero, a diferencia de cp, no fallan, sino que repiten los intentos varias veces y se saltan si no pueden leer los datos.
Esas utilidades no son compatibles con el sistema de archivos, pero puede ejecutarlas en archivos manualmente o con find.
Sin embargo, recomiendo, si es posible, copiar dd_rescuetoda la unidad dañada en un solo archivo de imagen en algún lugar seguro, luego montar esa imagen y copiar los archivos desde allí de la forma habitual. La imagen será legible sin errores.
Utilice dd_recue primero.

Respuesta2

Lo más fácil debería ser ejecutar fsck -ao fsck -yen el sistema de archivos dañado (si es el sistema de archivos raíz, inicie con un Live CD y móntelo como un volumen externo). Todos los archivos que se pueden recuperar terminarán en su lugar original, los demás terminarán en /lost+found... donde, si lo desea, puede intentar recuperar algo de ellos.

Las opciones mencionadas hacen lo siguiente:

Las opciones para diferentes fsck específicos del sistema de archivos no están estandarizadas. En caso de duda, consulte las páginas de manual del verificador específico del sistema de archivos. Aunque no están garantizados, la mayoría de los verificadores de sistemas de archivos admiten las siguientes opciones:

-a Repare automáticamente el sistema de archivos sin preguntas (use esta opción con precaución). Tenga en cuenta que e2fsck(8) admite -a solo por compatibilidad con versiones anteriores. Esta opción está asignada a la opción -p de e2fsck, que es segura de usar, a diferencia de la opción -a que admiten algunos verificadores de sistemas de archivos.

(...)

-y Para algunos verificadores específicos del sistema de archivos, la opción -y hará que el fsck específico de fs siempre intente reparar automáticamente cualquier corrupción detectada en el sistema de archivos. A veces, un experto puede hacerlo mejor conduciendo el fsck manualmente. Tenga en cuenta que no todos los verificadores específicos del sistema de archivos implementan esta opción. En particular, fsck.minix(8) y fsck.cramfs(8) no admiten la opción -y al momento de escribir este artículo.

información relacionada