¿Cómo duplicar un archivo sin copiar sus datos con btrfs?

14

No tengo experiencia con btrfs, pero se anuncia que puede desduplicar archivos.

En mi aplicación, necesitaría duplicar árboles de directorios completos.

Por lo que aprendí, btrfs solo se desduplica en algunas exploraciones posteriores, no de inmediato. Incluso el solo uso cpno parece desencadenar ninguna desduplicación (al menos, dfmuestra un mayor uso del disco en el tamaño de los archivos copiados).

¿Puedo evitar mover datos por completo y decirle btrfsdirectamente que duplique un archivo en otra ubicación, esencialmente solo clonando sus metadatos?

En esencia, similar a un enlace duro, pero con metadatos independientes (permisos, tiempos de modificación, ...).

Udo G
fuente
77
cp --reflink=always.
mikeserv
3
Tenga en cuenta que esto no es nada como un enlace duro. Cuando usted cp --reflink=always, el resultado desde la perspectiva del usuario será dos archivos completamente independientes en todos los sentidos. El hecho de que el sistema de archivos subyacente está abstrayendo eso a través de copia en escritura es solo un detalle de implementación. No obtienes "un enlace duro, pero con metadatos independientes". Que yo sepa, btrfs todavía no realiza ninguna deduplicación automática. Creo que es un plan de futuro, pero no soy positivo al respecto.
ormaaj
@ormaaj: un enlace duro no tendría metadatos independientes . y Udo pidió un detalle de implementación . cuando haces un enlace de referencia a un archivo esencialmente clonas sus metadatos . es solo cuando las referencias cambian independientemente que los archivos divergen, ¡y de eso se trata la deduplicación!
mikeserv
1
@mikeserv Er, estoy bastante seguro de que la deduplicación tiene un sentido diferente. La deduplicación es tomar copias redundantes de datos ya existentes y volver a unificarlas. COW es un medio para minimizar la duplicación, no es deduplicación.
ormaaj
@ormaaj: creo que eso es algo extraño: la deduplicación no se trata de minimizar la duplicación.
mikeserv

Respuestas:

12

Hay dos opciones:

  1. cp --reflink=always
  2. cp --reflink=auto

El segundo es casi siempre preferible al primero. Usar autosignifica que recurrirá a hacer una copia verdadera si el sistema de archivos no admite el reenlace (por ejemplo, ext4 o copiar a un recurso compartido NFS). Con la primera opción, estoy bastante seguro de que fallará por completo y dejará de copiar.

Si está utilizando esto como parte de un script que necesita ser robusto frente a condiciones no ideales, autole servirá mejor.

eestrada
fuente
¿Eres Eric Estrada?
mikeserv
2
@mikeserv Lol, no. Mi primer nombre es Ethan. Sin embargo, eso sería divertido; Eric Estrada: actor de día, administrador de sistemas de noche. Lo creas o no, esta es la primera vez en más de una década de usar el identificador en línea eestradaque alguien me ha preguntado eso.
eestrada
2
Claro, Eric. de todos modos, buena respuesta.
mikeserv