Как скопировать файл без копирования его данных с помощью btrfs?

14

У меня нет опыта работы с btrfs, но он рекламирует возможность дублирования файлов.

В моем приложении мне нужно будет дублировать целые деревья каталогов.

Из того, что я узнал, btrfs только дедуплицирует в некоторых пост-сканированиях, а не сразу. cpКажется, даже простое использование не вызывает дедупликации (по крайней мере, dfпоказывает увеличенное использование диска в размере копируемых файлов).

Могу ли я вообще избежать перемещения данных и сказать btrfsнапрямую, чтобы дублировать файл в другом месте, по сути, просто клонируя его метаданные?

По сути, похоже на жесткую ссылку, но с независимыми метаданными (разрешения, мод. Раз, ...).

Удо Г
источник
7
cp --reflink=always,
mikeserv
3
Обратите внимание, что это не что-то вроде жесткой ссылки. Когда вы cp --reflink=always, результатом с точки зрения пользователя будут два совершенно независимых файла во всех отношениях. Тот факт, что базовая файловая система абстрагируется от копирования при записи, является лишь деталью реализации. Вы не получаете «жесткую ссылку, но с независимыми метаданными». Насколько мне известно, btrfs пока не выполняет автоматическую дедупликацию. Я думаю, что это план на будущее, но я не уверен в этом.
ormaaj
@ormaaj - жесткая ссылка не будет иметь независимых метаданных . и Удо попросил детали реализации . когда вы делаете ссылку на файл, вы клонируете его метаданные . только когда ссылки независимо меняются , файлы расходятся - и в этом и заключается дедупликация!
mikeserv
1
@mikeserv Э-э, я уверен, что дедупликация имеет другой смысл. Дедупликация берет уже существующие избыточные копии данных и объединяет их. COW - это средство минимизации дублирования, а не дедупликации.
ormaaj
@ ormaaj - я думаю, что это странная вещь: дедупликация не
mikeserv

Ответы:

12

Есть два варианта:

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

Второе почти всегда предпочтительнее первого. Использование autoозначает, что резервное копирование будет выполнено, если файловая система не поддерживает пересылку ссылок (например, ext4 или копирование в общий ресурс NFS). С первым вариантом я почти уверен, что он потерпит неудачу и прекратит копирование.

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

eestrada
источник
ты Эрик Эстрада?
mikeserv
2
@mikeserv Lol, нет. Меня зовут Итан. Это было бы смешно, хотя; Эрик Эстрада: актер днем, сисадмин ночью. Верьте или нет, это первый раз за более чем десятилетие, eestradaкогда кто-то когда-либо спрашивал меня об этом.
Эстрада
2
конечно, Эрик в любом случае, хороший ответ.
mikeserv