1 октября 2009 г.

Конвертирование файловой системы ext3 в ext4

Ext4  - это современный вариант хорошо себя зарекомендовавшей ФС (файловой системы) - ext3. Все ее преимущества кратко, зато по-русски написаны здесь, более полно и по-английски - здесь. И самое в ней замечательное, что ее разработчики сделали возможным отконвертировать существующие разделы из ext3 в ext4.



Я решил систематизировать тот материал, который мне удалось найти в Интернете по данному поводу. Более того, все что приведено ниже сначала было оттестировано на двух виртуальных машинах (openSUSE 11.2 Milestone 7 и RHEL 5.4), а затем на данную ФС "переехал" мой ноутбук. При аккуратном выполнении того, что здесь приведено - Вам не грозит потеря данных. Подчеркиваю, при внимательном и аккуратном! И конечно же лучше делать это сначала (для тренировки) на виртуалках.

Подготовка
Итак, поехали... Перво-наперво - стандартный дисклеймер (отмазка!) перед конвертированием необходимо сделать backup важных данных, потому что хоть и процесс конвертации делался не раз и уже многими - у вас может возникнуть ситуация, когда данные могут потеряться. А лучше средства, для спасения данных, чем резервное копирование еще не придумали.

Далее вам обязательно следует проверить ядро дистрибутива на предмет поддержки ext4. Проще всего сделать это так:

grep -i ext4 /boot/config*

Если вы увидели нечто подобное CONFIG_EXT4_FS=m (или y) - значит все нормально. В противном случае - вам нужно найти пакет с  более свежим ядром для своего дистрибутива или зайти на kernel.org за исходниками. Опции ядра важные для работы с ext4 приведены здесь.

ВНИМАНИЕ: вам нужна именно ext4, а не ext4dev! Последняя представляет собой уже устаревшую версию для разработчиков.

Далее вам нужно проверить наличие в системе программ для работы с ext4 таких как: fsck.ext4, mkfs.ext4. Для RHEL 5.4 (и, как следствие, CentOS 5.4 и Scientific Linux 5.4) они находятся в пакете e4fsprogs, потому что инженеры Red Hat решили не ломать существующий пакет e2fsprogs. Если у вас в системе нет таких программ - озаботьтесь их получением. Пакет e2fsprogs от разработчиков этих утилит поддерживает работу с ext4 с версии 1.41.

Последнее, что стоит проверить - это поддержка Grub'ом ext4. Это понадобится только тогда, если у вас /boot не вынесен в отдельный раздел, У меня это так и есть, поэтому /boot  я оставил как есть в ext3.


Последовательность команд для разделов, которые можно размонтировать.

Для тех разделов, которые поддаются относительно безболезненному размонтированию, типа /home конвертация выполняется достаточно безпроблемно (предполагается наличие раздела на устройстве /dev/DEVICE - просто замените его своим):
  1. umount /dev/DEVICE
  2. fsck.ext3 -pf /dev/DEVICE
  3. tune2fs -O extents,uninit_bg,dir_index /dev/device (для RHEL 5.4 и производных (см.выше) tune4fs)
  4. fsck.ext4 -yfD /dev/DEVICE
  5. редактируем /etc/fstab меняя в нем для изменяемого раздела ext3 на ext4
  6. mount /dev/DEVICE (или, что проще mount -a)

Комментарии:
1. Размонтируем ФС для ее конвертации.
2. Для дополнительной уверенности в том, что мы будем конвертировать ФС, которая находится в целостном состоянии прогоняем ее проверку.
3. Включаем возможности ext4: extents - поддержку экстентов, uninit_bg - возможность проверки только использованного пространства при проверке всей ФС и dir_index - возможность создания индекса директории для более быстрого доступа к ней. Последняя возможность присутствует в ext3, но тем не менее тут она отнюдь не помешает.
4. После включения дополнительных возможностей ext4 - прогоняем проверку на ошибки. Она находит ошибки и исправляет их. ЭТО НОРМАЛЬНО! Можно для пущей уверенности запустить еще раз.


Последовательность команд для разделов, которые невозможно размонтировать

Вообще говоря, к таким разделам обычно относится только корневой, но на моем ноутбуке с CentOS 5.4 к ним почему-то также относились и /var с /usr. Поэтому я конвертировал их таким же точно образом. Ну и вообще говоря так можно отконвертировать любой из разделов. Конвертацию следует производить только для одного раздела, т.е. последовательно для нескольких имеющихся, а не одновременно для всех.

Итак:
  1. shutdown now (или init 1) - кому как больше нравится
  2. редактируем /etc/fstab меняя в нем для изменяемого раздела ext3 на ext4
  3. mount -o remount,ro /dev/DEVICE
  4. fsck.ext3 -pf /dev/DEVICE

Важное отступление!
В случае корневого раздела fsck может попросить вас перезагрузить компьютер. Лучше ее послушаться и сделать так, после чего повторить шаг 3 (перемонтировать ФС в режим только чтения).

Также перед перезагрузкой вам потребуется модифицировать initramfs для поддержки им файловых систем на ext4. Как это сделать смотрите в документации на свой дистрибутив.
Например, для RHEL это делается так:

mkinitrd /boot/initramfs-ext4.img $(uname -r)

Для openSUSE так:
сначала дописываем в /etc/sysconfig/kernel в строчку INITRD_MODULES ext4, а затем просто запускаем mkinitrd без параметров.


И не забудьте при изменении имени initramfs прописать его в загрузчик!!!
  1. tune2fs -O extents,uninit_bg,dir_index /dev/DEVICE (для RHEL 5.4 и производных (см.выше) tune4fs)
  2. fsck.ext4 -yfD /dev/DEVICE

Комментарии:
1. Переходим в однопользовательский режим
3. Перемонтируем файловую систему в режим только чтения, чтобы избежать потерь данных.
4. Дополнительная проверка ФС на ее целостность перед конвертированием
5. Включаем возможности ext4 (см.выше)
6. После включения дополнительных возможностей ext4 - прогоняем проверку на ошибки. Она находит ошибки и исправляет их. ЭТО НОРМАЛЬНО! Можно для пущей уверенности запустить еще раз. Опять-таки в случае корневой ФС - вас могут попросить перезагрузиться. Лучше послушаться :)

Итак теперь у вас все файловые системы преобразованы из ext3 в ext4. Правда только отчасти. Все данные, которые были записаны на диск в формате ext3, так в нем и остались. Запись новых данных на диск будет производиться в формате ext4. Таким образом, ваши данные плавно переедут на ext4. Для полного преобразования формата хранения данных из ext3 в ext4 (и ее онлайновой дефрагментации) существует инструмент под названием defrag. Но он еще не добрался до альфа-версии и использовать его без риска потерять данные нельзя. Нужно всего лишь подождать.

Автор с удовольствием выслушает конструктивную критику по поводу неточностей и опечаток, присутствующих в данной статье.

Комментариев нет:

Отправить комментарий