Назад | Перейти на главную страницу

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

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

Почему копия не может быть «быстрой» в том смысле, что вместо этого она копирует ссылки на блоки и записывает новые блоки только при внесении изменений?

Я понимаю, что это приведет к разделению количества данных на диске (из-за ссылок на блоки) с потенциальной возможностью, что диск может содержать данные, превышающие его фактическую емкость. Это также может привести к тому, что при записи будет занимать много места из-за необходимости записи совершенно новых блоков при изменении их исходного блока.

Такая файловая система, безусловно, будет иметь уникальные штрафы, но это звучит как интересный вариант использования.

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

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

Вы имеете в виду файловую систему, которая «копирует при записи» или COW, а конкретная функция, о которой вы говорите, - это копия файла reflink.

Вместо копирования содержимого файла файловая система COW может сделать ссылку на новый файл содержимым другого файла, записывая только взаимную дельту между двумя файлами. Это делает процесс копирования, о котором вы говорите, почти мгновенным.

Файловая система COW также может использовать ту же модель для дедупликации существующих данных. Например, обратитесь к BTRFS с bedup или ZFS.

Наказанием этого метода является поддержка метаданных, необходимая для поддержки таких файловых ссылок - файловые системы COW, как правило, занимают изрядное количество дискового пространства для хранения метаданных. Для поддержки этой и других связанных функций также требуется изрядное количество процессорного времени.

Вы имеете в виду reflink. За Linux cp страница руководства:

когда --reflink[=always] указано, выполнить облегченное копирование, при котором блоки данных копируются только при изменении. Если это невозможно, копия не работает, или если --reflink=auto указано, вернуться к стандартной копии. Использовать --reflink=never чтобы обеспечить выполнение стандартной копии.

В Linux это реализовано в FICLONE ioctl() вызов:

Если файловая система поддерживает файлы, совместно использующие физическое хранилище между несколькими файлами ("ссылка"), это ioctl(2) операция может использоваться, чтобы сделать некоторые данные в src_fd файл появится в dest_fd файл путем совместного использования базового хранилища, что быстрее, чем создание отдельной физической копии данных. Оба файла должны находиться в одной файловой системе. Если запись файла должна произойти в разделяемую область, файловая система должна гарантировать, что изменения останутся частными для записываемого файла. Такое поведение обычно называют «копированием при записи».

Reflinks поддерживаются для BTRFS, и XFS в ядре Linux 4.8:

Ядро Linux 4.8 в августе 2016 года добавило новую функцию «обратное отображение». Это основа для большого набора запланированных функций: снимки состояния, данные копирования при записи (COW), дедупликация данных, копии ссылок, очистка онлайн-данных и метаданных, высокоточная отчетность о потере данных или поврежденных секторах, а также значительно улучшенная реконструкция. поврежденных или поврежденных файловых систем. Эта работа потребовала изменений в формате XFS на диске.

cp -z ... и в reflink() функция доступны в Solaris 11.4 для ZFS. Предполагается, что поддержка ссылок ZFS будет доступна в OpenZFS и ZFSonLinux в какое-то время. Видеть https://github.com/zfsonlinux/zfs/issues/405

Просто добавив пару ссылок на ответ @ Spooler:

  • ZFS в проекте Linux. Очень активно развивается, отлично работает по моему опыту. Доступны пакеты для многих популярных дистрибутивов Linux. (И в комплекте с Ubuntu.)
  • Страницы ZFS Аарона Топонсе. Несколько устарело, но отличное введение