Как проверить, что копия файла является reflink / CoW?

8

Я играю с btrfs, который позволяет cp --reflinkкопировать при записи. Другие программы, такие как lxc-clone, также могут использовать эту функцию. У меня вопрос, как узнать, является ли файл CoW другого? Как и для hardlink, я могу сказать по номеру инода.

У Юнчжэн
источник

Ответы:

5

Хороший вопрос. Похоже, в настоящее время нет простых высокоуровневых способов сказать это.

Одна проблема состоит в том, что файл может совместно использовать только часть данных через Copy-on-Write. Это называется физическим экстентом , и некоторые или все физические экстенты могут совместно использоваться файлами CoW.

Нет ничего похожего на то, inodeчто при сравнении файлов сообщало бы, что файлы имеют одинаковые физические экстенты. (Изменить: см. Мой другой ответ ).

Низкоуровневый ответ состоит в том, что вы можете спросить ядро, какие физические экстенты используются для файла, используя , что описано в . В принципе, если все физические экстенты одинаковы, файл должен совместно использовать одно и то же хранилище.FS_IOC_FIEMAP ioctlDocumentation/filesystems/fiemap.txt

Немногие вещи реализуют способ взглянуть на эту информацию на более высоком уровне. Я нашел здесь код для перехода . Очевидно, filefragутилита должна показывать экстенты с -v. Кроме того, btrfs-debug-treeпоказывает эту информацию.

Тем не менее, я бы проявил осторожность, так как эти вещи, возможно, мало использовались в дикой природе для этой цели, вы можете найти ошибки, которые дают вам неправильные ответы, поэтому остерегайтесь полагаться на эти данные для принятия решения об операциях, которые могут привести к повреждению данных.

Некоторые связанные вопросы:

pwaller
источник
Отличный ответ! Как бы вы использовали, btrfs-debug-treeчтобы перечислить экстенты по данному имени файла?
Том Хейл,
4

В дополнение к моему предыдущему ответу , я только что выпустил, fienodeкоторый вычисляет хэш SHA1 физических экстентов файла и может использоваться для поиска некоторых (идентичных) копий ссылок. Однако будьте осторожны, есть предостережения (см. Документацию ). BTRFS решила изменить некоторые, но не все, физические размеры копии, которую я сделал, без провокаций и предупреждений, что привело к изменению значения.

pwaller
источник