Я решил систематизировать тот материал, который мне удалось найти в Интернете по данному поводу. Более того, все что приведено ниже сначала было оттестировано на двух виртуальных машинах (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 - просто замените его своим):
- umount /dev/DEVICE
- fsck.ext3 -pf /dev/DEVICE
- tune2fs -O extents,uninit_bg,dir_index /dev/device (для RHEL 5.4 и производных (см.выше) tune4fs)
- fsck.ext4 -yfD /dev/DEVICE
- редактируем /etc/fstab меняя в нем для изменяемого раздела ext3 на ext4
- mount /dev/DEVICE (или, что проще mount -a)
Комментарии:
1. Размонтируем ФС для ее конвертации.
2. Для дополнительной уверенности в том, что мы будем конвертировать ФС, которая находится в целостном состоянии прогоняем ее проверку.
3. Включаем возможности ext4: extents - поддержку экстентов, uninit_bg - возможность проверки только использованного пространства при проверке всей ФС и dir_index - возможность создания индекса директории для более быстрого доступа к ней. Последняя возможность присутствует в ext3, но тем не менее тут она отнюдь не помешает.
4. После включения дополнительных возможностей ext4 - прогоняем проверку на ошибки. Она находит ошибки и исправляет их. ЭТО НОРМАЛЬНО! Можно для пущей уверенности запустить еще раз.
Последовательность команд для разделов, которые невозможно размонтировать
Вообще говоря, к таким разделам обычно относится только корневой, но на моем ноутбуке с CentOS 5.4 к ним почему-то также относились и /var с /usr. Поэтому я конвертировал их таким же точно образом. Ну и вообще говоря так можно отконвертировать любой из разделов. Конвертацию следует производить только для одного раздела, т.е. последовательно для нескольких имеющихся, а не одновременно для всех.
Итак:
- shutdown now (или init 1) - кому как больше нравится
- редактируем /etc/fstab меняя в нем для изменяемого раздела ext3 на ext4
- mount -o remount,ro /dev/DEVICE
- 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 прописать его в загрузчик!!!
- tune2fs -O extents,uninit_bg,dir_index /dev/DEVICE (для RHEL 5.4 и производных (см.выше) tune4fs)
- fsck.ext4 -yfD /dev/DEVICE
Комментарии:
1. Переходим в однопользовательский режим
3. Перемонтируем файловую систему в режим только чтения, чтобы избежать потерь данных.
4. Дополнительная проверка ФС на ее целостность перед конвертированием
5. Включаем возможности ext4 (см.выше)
6. После включения дополнительных возможностей ext4 - прогоняем проверку на ошибки. Она находит ошибки и исправляет их. ЭТО НОРМАЛЬНО! Можно для пущей уверенности запустить еще раз. Опять-таки в случае корневой ФС - вас могут попросить перезагрузиться. Лучше послушаться :)
Итак теперь у вас все файловые системы преобразованы из ext3 в ext4. Правда только отчасти. Все данные, которые были записаны на диск в формате ext3, так в нем и остались. Запись новых данных на диск будет производиться в формате ext4. Таким образом, ваши данные плавно переедут на ext4. Для полного преобразования формата хранения данных из ext3 в ext4 (и ее онлайновой дефрагментации) существует инструмент под названием defrag. Но он еще не добрался до альфа-версии и использовать его без риска потерять данные нельзя. Нужно всего лишь подождать.
Автор с удовольствием выслушает конструктивную критику по поводу неточностей и опечаток, присутствующих в данной статье.
Комментариев нет:
Отправить комментарий