Объединение разделов на ASUS eeePC 701

()

Если не все, то почти все знают что на ASUS eeePC 701 4G встроенный накопитель разбит на два основных раздела: раздел с системой, монтируемый в режиме "только чтение" и второй, монтируемый вместе с первым через unionfs. На нём хранятся все изменения, сделаные в системе.

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

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

В принципе всё что нужно описано на wiki, однако приводимые там инструкции достаточно хаотичны и пытаются покрыть сразу все версии eeePC. Эта же статья описывает только один конкретный путь и только для модели 701. А самое главное достоинство этой статьи - она на русском языке:)

Итак, что же мы будем делать? Мы будем объединять разделы sda1 и sda2 и получившийся раздел преобразуем в файловую систему ext3.

Что нам понадобиться? Автор использовал USB-брелок со SLAX. Новый initrd-образ, который можно собрать и самому, но проще использовать готовый. Этот образ сохранён в корень брелка со SLAX и прямые руки:)

Итак. Сразу после включения eeePC нажимаем F2 и попадаем в BIOS. Там всё достаточно понятно. Нам нужно выбрать загрузку с USB-Flash. Затем выходим и загружаемся с брелка. Разделы eeePC SLAX "видит" как /dev/hdc1 и /dev/hdc2, и монтирует их соответственно в /mnt/hdc1 и /mnt/hdc2.

Здесь всё происходит так, как описано в оригинальной статье. Для начала разберёмся в устройстве unionfs. Она состоит из двух разделов - один доступен только для чтения, а на другом сохраняются все изменения. В нашем случае это hdc1 и hdc2 соответственно. Когда мы удаляем файл или папку с именем "name" с раздела hdc1 реально он не удаляется, но на hdc2 появляется файл или папка с именем ".wh.name" и нулевым размером. Зная это мы можем реально удалить эти файлы и папки с hdc1. Для этого воспользуемся командами:


cd /mnt/hdc2
find . -name .wh.__dir_opaque -exec sh -c 'F="{}";echo rm -rf /mnt/hdc1/${F%/*}' \;
find . -name .wh.\* ! -name .wh.__dir_opaque -exec sh -c 'F="{}"; rm -rf /mnt/hdc1/${F/\/.wh./\/}' \;

Следующим шагом нам надо скопировать новые файлы с hdc2 на hdc1. Для этого выполним команду:


cd /mnt/hdc2 && cp -a sbin etc bin usr home lib var opt dev /mnt/hdc1/

Поскольку вместе с полезными данными у нас на hdc1 скопировались и файлы и папки с именами вида: .wh.*, которые нам не нужным - их надо удалить. Удалим их командой:


find /mnt/hdc1 -name .wh.\* -exec rm -f {} \; ''

Если вы обновляли OpenOffice до версии 2.4 то вам нужно ещё удалить симлинки /usr/bin/oo* и заменить их на скрипты:


rm -fv /mnt/hdc1/usr/bin/oo*
cp -v /mnt/hdc2/usr/bin/oo* /mnt/hdc1/usr/bin/

Отмонитруем разделы hdc1 и hdc2:


umount /mnt/hdc1
umount /mnt/hdc2

Запускаем cfdisk для диска hdc:


cfdisk /dev/hdc

И с его помощью удаляем разделы hdc1 и hdc2 а на их месте создаём один большой раздел hdc1 с типом файловой системы 83 (Linux). Далее записываем изменения и выходим. После этого нужно выполнить последовательность команд:


# Изменяем размер файловой системы
e2fsck -f /dev/hdc1
resize2fs /dev/hdc1
e2fsck -f /dev/hdc1

# Создаём журнал:
tune2fs -j /dev/hdc1

Всё! Теперь вместо двух разделов

Монтируем раздел /dev/hdc1:


mount -t ext3 /dev/hdc1 /mnt/hdc1

Редактируем файл /mnt/hdc1/etc/fstab, приводя его к виду:


/dev/sda1 /     ext3 defaults 0 0
proc      /proc proc rw       0 0

Далее копируем скаченный заранее файл initramfs-eeepc-nounionfs-ext3.img в каталог /mnt/hdc1/boot и приводим файл /mnt/hdc1/boot/grub/menu.lst к виду:


default=0

timeout=0

fallback=2

title Normal Boot
        root (0x80,0)
        kernel /boot/vmlinuz-2.6.21.4-eeepc quiet rw vga=785 irqpoll root=/dev/sda1
#       initrd /boot/initramfs-eeepc.img
        initrd /boot/initramfs-eeepc-nounionfs-ext3.img


title Perform Disk Scan
        root (0x80,0)
        kernel /boot/vmlinuz-2.6.21.4-eeepc quiet rw vga=785 irqpoll root=/dev/sda1 XANDROSSCAN=y
#       initrd /boot/initramfs-eeepc.img
        initrd /boot/initramfs-eeepc-nounionfs-ext3.img

title Restore Factory Settings
        root (0x80,0)
        kernel /boot/vmlinuz-2.6.21.4-eeepc quiet rw vga=normal nosplash=y irqpoll root=/dev/sda1 XANDROSRESTORE=y
#       initrd /boot/initramfs-eeepc.img
        initrd /boot/initramfs-eeepc-nounionfs-ext3.img


На этом всё. Теперь нужно перезагрузиться и извлечь брелок со SLAX. Теперь система будет работать без unionfs что позволяет сэкономить место и повысить скорость работы.

Приятной работы!

Ключевые слова: eeepc, cfdisk, resize2fs, tune2fs, fsck.

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

eugene 2008-09-13 18:41:42 (#)

Не для слабонервных операция. Я под чутким онлайн-руководством MooSE всю процедуру проделал, заняло часа 4 или около того. Были скользкие моменты - ресайз объединённой партиции пришлось повторить - resize2fs /dev/hdc1 - в слаксе, ксандрос посчитал, что партиция sda1 (в слаксе - hdc1) заполнена полностью. Было ссыкотно, но обошлось :-) Огромное гранмерси MooSE - гуру и корифею ;-)

eugene 2008-09-13 18:45:22 (#)

Кстати. С партиции hdc2 лучше заранее удалить ручками содержимое /hdc2/var/tmp и /hdc2/var/cache/apt/archives - у меня первое очень долго копировалось, там было порядка 90000 файлов .ws.*, а из-за второго на партиции hdc1 тупо не хватило места, копирование (cd /mnt/hdc2 && cp -a sbin etc bin usr home lib var opt dev /mnt/hdc1/) пришлось повторять. Имейте в виду.

А ещё в строке
find . -name .wh.__dir_opaque -exec sh -c 'F="{}";echo rm -rf /mnt/hdc1/${F%/*}' \;

лишнее echo - тут выводится просто список файлов, и ничего не удаляется.

MooSE 2008-09-15 08:26:39 (#)

статью подправил:)

а про то что надо написать про удаление лишнего... я как-то не подумал. казалось что оно вроде как итак очевидно:)
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE