Хороший вопрос. Похоже, в настоящее время нет простых высокоуровневых способов сказать это.
Одна проблема состоит в том, что файл может совместно использовать только часть данных через Copy-on-Write. Это называется физическим экстентом , и некоторые или все физические экстенты могут совместно использоваться файлами CoW.
Нет ничего похожего на то, inode
что при сравнении файлов сообщало бы, что файлы имеют одинаковые физические экстенты. (Изменить: см. Мой другой ответ ).
Низкоуровневый ответ состоит в том, что вы можете спросить ядро, какие физические экстенты используются для файла, используя , что описано в . В принципе, если все физические экстенты одинаковы, файл должен совместно использовать одно и то же хранилище.FS_IOC_FIEMAP
ioctl
Documentation/filesystems/fiemap.txt
Немногие вещи реализуют способ взглянуть на эту информацию на более высоком уровне. Я нашел здесь код для перехода . Очевидно, filefrag
утилита должна показывать экстенты с -v. Кроме того, btrfs-debug-tree
показывает эту информацию.
Тем не менее, я бы проявил осторожность, так как эти вещи, возможно, мало использовались в дикой природе для этой цели, вы можете найти ошибки, которые дают вам неправильные ответы, поэтому остерегайтесь полагаться на эти данные для принятия решения об операциях, которые могут привести к повреждению данных.
Некоторые связанные вопросы:
btrfs-debug-tree
чтобы перечислить экстенты по данному имени файла?В дополнение к моему предыдущему ответу , я только что выпустил,
fienode
который вычисляет хэш SHA1 физических экстентов файла и может использоваться для поиска некоторых (идентичных) копий ссылок. Однако будьте осторожны, есть предостережения (см. Документацию ). BTRFS решила изменить некоторые, но не все, физические размеры копии, которую я сделал, без провокаций и предупреждений, что привело к изменению значения.источник