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 inode
que, 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
ioctl
Documentation/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-tree
muestra 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:
btrfs-debug-tree
para enumerar las extensiones en un nombre de archivo dado?Además de mi respuesta anterior , acabo de publicar
fienode
que 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.fuente