¿Cómo verificar que una copia de archivo sea reflink / CoW?

8

Estoy jugando con btrfs, que me permite cp --reflinkcopiar y escribir. Otros programas, como lxc-clone, pueden usar esta función también. Mi pregunta es, ¿cómo saber si un archivo es una vaca de otro? Al igual que para hardlink, puedo decir por el número de inodo.

Wu Yongzheng
fuente

Respuestas:

5

Buena pregunta. Parece que actualmente no hay formas fáciles de saber de alto nivel.

Un problema es que un archivo solo puede compartir parte de los datos a través de Copiar en escritura. Esto se denomina extensión física, y algunas o todas las extensiones físicas pueden compartirse entre archivos CoW.

No hay nada análogo a lo inodeque, cuando se compara entre archivos, le diría que los archivos comparten las mismas extensiones físicas. (Editar: ver mi otra respuesta ).

La respuesta de bajo nivel es que puede preguntarle al kernel qué extensiones físicas se usan para el archivo que usa , que está documentado en . En principio, si todas las extensiones físicas son iguales, entonces el archivo debe compartir el mismo almacenamiento subyacente.FS_IOC_FIEMAP ioctlDocumentation/filesystems/fiemap.txt

Pocas cosas implementan una forma de ver esta información en un nivel superior. Encontré un código de go aquí . Aparentemente filefrag, se supone que la utilidad muestra las extensiones con -v. Además, btrfs-debug-treemuestra esta información.

Sin embargo, sería cauteloso, ya que estas cosas pueden haber tenido poco uso en la naturaleza para este propósito, puede encontrar errores que le dan respuestas incorrectas, así que tenga cuidado de confiar en estos datos para decidir las operaciones que podrían causar corrupción de datos.

Algunas preguntas relacionadas:

pwaller
fuente
¡Gran respuesta! ¿Cómo usaría btrfs-debug-treepara enumerar las extensiones en un nombre de archivo dado?
Tom Hale
4

Además de mi respuesta anterior , acabo de publicar fienodeque calcula un hash SHA1 de las extensiones físicas del archivo y se puede utilizar para encontrar algunas copias (idénticas) de enlace de referencia. Sin embargo, tenga cuidado, hay advertencias (consulte la documentación ). BTRFS decidió cambiar algunas, pero no todas, las extensiones físicas de una copia de actualización que hice sin provocación ni advertencia, lo que provocó que el valor cambiara.

pwaller
fuente