Btrfs Wiki
Перевод: Алексей Федорчук
2009-01-28
ОригиналBtrfs содержит очень мало метаданных, которые имеют фиксированное положение, что делает относительно лёгкой разработку утилит преобразования в неё из других файловых систем. Алгоритмы Copy on write позволяют Btrfs сохранять неизмененную копию исходной файловой системы, а администратору позволяют отменить преобразование, даже после выполнения изменений в итоговой файловой системе Btrfs.
Программа преобразования использует libe2fs для чтения метаданных Ext3, и использует свободные блоки в ней для помещения в них новую файловую систему Btrfs. Основной алгоритм преобразования работает так:
Таким образом создаются копии всех метаданных Ext3, но файлы Btrfs являются просто указателями на те же самые блоки, которые заняты файлами Ext3. Это разделяет большую часть блоков между этими двумя файловыми системами. Поскольку Btrfs использует Copy on write для всех модификаций файла, оригинальная версия блоков данных файла Ext3 сохраняется.
Первый 1 МБ устройства копируется в альтернативную область для того, чтобы в него могли быть записаны метаданные Btrfs. Отмена преобразования заключается просто в восстановлении этих блоков.
Результат преобразования выглядит примерно так:

Конверсионная программа создает в Btrfs снапшот со ссылками на все блоки, используемые Ext3, позволяя администратору определять время, в течение которого будет сохраняться оригинальная файловая система Ext3. Если администратор захочет освободить место, занимаемое реликтами Ext3, снапошот можно удалить, после чего преобразование станет необратимым.
Пока снапшот не удален, для хранения новых модификаций Btrfs могут использоваться только те блоки, которые были помечены в Ext3 как свободные. Это означает, что преобразование может быть отменено когда угодно в любое время, с восстановлением исходной файловой системы Ext3. Конвертер создает отдельный файл, содержащий все ссылки на исходную файловую систему Ext3, и смещения в этом файле соответствуют смещениям на блочном устройстве. Это позволяет администратору монтировать этот файл как loopback-устройство в режиме read only и видеть исходную файловую систему Ext3 и преобразованную файловую систему Btrfs одновременно.
Пример использования:
# Сначала запустить fsck fsck.ext3 -f /dev/xxx # Преобразование из Ext3 в Btrfs btrfs-convert /dev/xxx # Монтирование новообразованной файловой системы Btrfs mount -t btrfs /dev/xxx /btrfs # Монтирование снапшота ext3 mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved # Монтирование файла образа как loopback-устройства mount -t ext3 -o loop,ro /ext2_saved/image /ext3
В приведённом выше примере файлы в /ext3 и в /btrfs будут идентичны. Любые модификации, выполненные в /btrfs, не будут видны в /ext3. Обратное преобразование делается так:
# Полное отмонтирование файловой системы Btrfs unmount /ext3 unmount /ext2_saved unmount /btrfs # Обратное преобразование btrfs-convert -r /dev/xxx # Монтирование исходной файловой системы mount -t ext3 /dev/xxx /ext3
Если вы хотите освободить место, занятое исходной файловой системой Ext3 и сделать преобразование постоянным, просто удалите файл /ext2_saved/image. После удаления файла образа диск будет выглядеть примерно так:
