Я знаю, что современные снимки файловой системы занимают очень мало места, пока не начнут расходиться из-за изменений в файлах. Однако мне не удалось определить, с какой степенью детализации btrfs управляет изменениями. Другими словами, вызовет ли небольшое изменение в файле перераспределение всего файла в измененном снимке, или будет перераспределена только часть файла?
Причина в том, чтобы знать, чего ожидать при работе со снимками очень больших файлов.
Да, btrfs делится частями файлов в снимках. Он не перераспределяет весь файл.
Снимки работают так же, как и другие операции COW, согласно официальная вики. Исходные блоки указываются в снимке, и если файл в снимке изменяется, COW создает новый экстент. COW делает это независимо от того, нет ли предыдущих снимков с файлом, один или сотня.
Btrfs отслеживает данные файла в списках блоков, называемых экстентами. Когда блок обновляется, btrfs может скопировать весь экстент, если он маленький, или может разбить экстент на части, сохраняя неизмененные разделы файла в виде меньших экстентов, называемых «книжными краями», плюс новый измененный раздел. Эти новые меньшие экстенты книжной формы являются просто новыми указателями на исходные блоки данных, поэтому неизмененные данные не копируются. Видеть Описание экстента Википедии.
Таким образом, снимки будут разделять неизмененные блоки в большом файле.
(Обратите внимание, что вы можете отключить COW для большого файла, но тогда вы не сможете сделать его снимок, судя по тому, что я прочитал.)