Алексей Федорчук
Одна из уникальных особенностей btrfs — возможность конвертации в неё иной файловой системы без потери данных. Конечно, все мы знаем о том, что etx2fs можно безболезненно преобразовать в ext3fs. Но — лишь потому, что в внутренне это одна и та же файловая система, лишь с добавлением журнала. Уже в случае с ext4fs — косметическим костылём для линии ext* — конвертация оказывается невозможной, по крайней мере на современном этапе развития социализма… пардон, файловых систем. О том, чтобы преобразовать reiserfs, XFS, JFS во что угодно более иное (и наоборот), я не слышал даже разговоров.
Поэтому заявление о возможности конвертации ext2/ext3 в btrfs я поначалу воспринял несколько скептически. И скепсис мой сохранялся до момента детального знакомства ссоответствующей страницей на сайте проекта. Из которой становится ясным механизм, каким путём это преобразование совершается.
В двух словах: утилита конвертации создаёт полную копию метаданных исходной файловой системы ext2/ext3, а блоки данных получают адресацию в нововооюразованной файловой системе btrfs. Новые же данные, записанные уже в btrfs, используют «пустые» блоки внутри бывшей ext2/ext3. Для чего, разумеется, эти блоки должны иметь место быть — то есть для целиком заполненной файловой системы конвертация, возможно, повлечёт ошибки; это голое предположение, основанное на общих соображениях, в реале я этого не проверял.
Благодаря этому возможен «откат» к предыдущему состоянию — то есть восстановление ext2/ext3 в её первозданном виде, с потерей всего, что было записано после конвертации. А можно, напротив, удалив файл образа ext2/ext3, сделать конверсию перманентной — без возможности «отката», но зато с высвобождением дискового пространства, занятого реликтами прежней файловой системы.
Столь замечательная возможность, разумеется, требовала экспериментальной проверки. Что я и не замедлил проделать — благо имелся подходящий кандидат для конверсии, раздел /home/soft
, предназначенный для всякого рода программ, скачиваемых из сети и имеющий атрибуты доступа, аналогичные домашнему каталогу моего рабочего пользовательского аккаунта. С одной стороны, он достаточно интенсивно используется для создания должной нагрузки, с другой, содержимое его не представляет собой непреходящей ценности — всё, что скачано и потеряно, может быть перекачано заново.
Итак, имеем смонтированную (благодаря записи в /etc/fstab
) в /home/soft
файловую систему ext3 на устройстве /dev/sda7
— нетрудно догадаться, на логическом разделе в extended partition, что в значительной мере обесценивает преимущества btrfs; но, как сказал бы товарищ Сталин, другого устройства у меня не было.
Для начала вспоминаем, что конверсионная утилита не собирается по умолчанию при компиляции пакета btrfs-progs — эту процедуру надо выполнить отдельно. Отправляюсь в каталог с деревом исходников означенного пакета (см. одну из прежних заметок ) и даю команду
$ make convert
а затем, получив права root’а,
# make install convert
После этого просматриваю содержимое каталога на подлежащей отмонтированию файловой системе — дабы не забыть, с чем потом сравнивать:
$ ls -1 /home/soft/
каковое в тот момент выглядит следующим образом:
btrfs-progs-unstable/ linux-2.6.29-rc1.tar.bz2 lost+found/
Отмонтирую наличную файловую систему ext3:
# umount /home/soft
Затем, в соответствие с указаниями в документации, запускаю её проверку:
# fsck.ext3 -f /dev/sda7
где опция -f отвечает за принудительное восстановление «бита чистого размонтирования». В моём случае особой необходимости в такой процедуре не было — выполняю её чисто для порядка.
Теперь — собственно конверсия:
# btrfs-convert /dev/sda7
и монтирование новобразованной файловой системы на прежнее место:
# mount -t btrfs /dev/sda7 /home/soft/
Просмотр содержимого каталога /home/soft/ показывает, что всё, что имело место быть там ранее, сохранилось, плюс добавился подкаталог ext2_saved/ с единственным файлом — image: это тот самый образ исходной файловой системы, который и позволит выполнить обратное преобразование в неё.
Обратное преобразование стоит сделать сугубо ради интереса. Но сначала записываю на новорожденную btrfs некий файл (причём делаю это от имени пользователя — конвертированная файловая система унаследовала атрибуты доступа системы исходной):
$ cp path2/any_file /home/soft/
и убеждаюсь в том, что он благополучно скопировался:
$ ls -1 /home/soft/ any_file btrfs-progs-unstable/ ext2_saved/ linux-2.6.29-rc1.tar.bz2 lost+found/
Затем:
# umount /home/soft # btrfs-convert -r /dev/sda7 rollback complete. # mount /dev/sda7 /home/soft/
И теперь просмотр каталога /home/soft/ показывает полную идентичность его содержимого исходному: каталог ext2_saved/ и файл any_file исчезли без следа.
Интересно, что попытка непосредственного воссоздания btrfs на том же месте повлечёт за собой сообщение об ошибке. И хотя файловая система btrfs будет как бы создана, и даже окажется способной к монтированию, получить доступ к ней не удастся. И вообще, эта процедура создаёт такое количество процессов-зомби, убить которых через
# kill -9 #_процесса
оказывается невозможным, как и корректно выйти из системы, что дело у меня закончилось Reset’ом и обнулением бывшего дважды конвертированного раздела посредством
# dd if=/dev/zero of=/dev/sda7
Так что поверьте на слово — лучше этого не делать: либо уж оставайтесь на btrfs, либо откатывайтесь на ext3 и обратно не приходите…
Для себя я в итоге избрал (после указанных проб и ошибок) первый вариант. Для увековечивания которого вписал в /etc/fstab строку:
/dev/sda7 /home/soft btrfs defaults,noatime 1 0
И на этом пока успокоился. Разумеется, интересен вопрос о конверсии в btrfs корневой файловой системы. Но об этом как-нибудь в другой раз.
> Так что поверьте на слово — лучше этого не делать: либо уж оставайтесь на btrfs,
> либо откатывайтесь на ext3 и обратно не приходите…
Вообще если так это баг.Если останется после объявления доделаным — разработчиков пинать и еще раз пинать :)
Нет, я всетаки на btrfs останусь — как-то надежнее будет!