На Linux-версиях нетбуков eeePC компании ASUS предустановлена система собственной разработки на базе дистрибутива Xandros, и в комплекте с нетбуком идёт диск для восстановления этой системы в случае какого либо сбоя (хотя уже в самой системе предусмотрена функция восстановления, однако она не спасёт, если вы просто «снесли» систему, установив вместо неё что-либо другое, и теперь хотите вернуть оригинальную систему).
Далее будет показано, как можно восстановить оригинальную систему на eeePC, не имея под рукой USB-привода компакт-дисков. Всё описанное далее основано на личном (успешном) опыте автора.
Начальные условия:
- нетбук eeePC 701;
- фирменный диск восстановления системы.
Задача: восстановить оригинальную систему на нетбуке, не имея внешнего USB-привода компакт дисков.
Что нам потребуется (дополнительно):
- Флэш-карта на два (или более) гигабайта;
- Образ любого LiveCD с Linux (автор использовал Xubuntu);
- Компьютер с DVD-приводом.
Решение задачи
Первым делом установим на компьютер утилиту UnetBootIn и с её помощью запишем образ LiveCD с Linux на флэшку. Почему нельзя просто записать таким образом содержимое диска восстановления? Можно, однако потом система всё равно пытается обратиться к DVD-приводу и реально восстановление не работает.
Закончив запись образа на флэшку, скопируем на ту же флэшку (в корень) с диска восстановления системы файл P701L.gz, после чего вставляем флэшку в eeePC и загружаемся с неё.
Файл P701L.gz представляет собой сжатый образ (точнее часть образа) диска на eeePC, собственно он и будет использован для восстановления.
Сразу после загрузки Xubuntu запускаем терминал и вводим команду (ВНИМАНИЕ! Все данные, находящиеся на накопителе нетбука будут уничтожены!):
zcat /cdrom/P701L.gz | sudo dd of=/dev/sda bs=512k
После этого мы имеем восстановленный раздел с системой, и далее у нас два варианта:
- Мы можем восстановить точную копию оригинальной системы, установленной на двух разделах, один из которых монтируется в режиме «только для чтения», а второй используется для хранения данных.
- Мы можем немного модифицировать инсталляцию, чтобы вся система использовала один раздел. В этом случае не будет возможности восстановления системы после небольших сбоев, однако будет чуть больше свободного места на накопителе.
Для начала рассмотрим первый вариант. Запустим cfdisk командой:
sudo cfdisk /dev/sda
И создадим раздел sda2, который займёт всё оставшееся на накопителе место и будет использоваться системой для хранения данных. После создания раздела нужно записать изменения и отформатировать новый раздел в файловую систему ext3 командой:
sudo mkfs.ext3 /dev/sda2
После этого остаётся только перезагрузить нетбук, загрузиться со встроенного накопителя и начинать пользоваться.
Теперь рассмотрим второй вариант. Здесь нам надо «растянуть» раздел sda1 на весь накопитель. Перед изменением раздела его надо проверить:
sudo fsck.ext2 -f -y /dev/sda1
Затем запускаем cfdisk, удаляем имеющийся раздел sda1 и создаём новый, размером с весь накопитель, после сохранения изменений снова проверяем раздел sda1. Убедившись, что всё прошло гладко, приступаем к изменению файловой системы на разделе (заодно добавим к ней журналирование, которое сделает систему немного более надёжной):
sudo resize2fs /dev/sda1 && sudo tune2fs -j /dev/sda1 && sudo fsck.ext3 /dev/sda1
Теперь нам надо запустить оболочку с правами суперпользователя и модифицировать initrd-образ в системе на eeePC. Запускаем оболочку командой:
sudo su -
Создаём временную директорию:
mkdir 1
Монтируем в неё раздел /dev/sda1:
mount /dev/sda1 1
Переходим в директорию 1/boot, создаём там временную директорию и распаковываем в неё имеющийся initrd-образ:
cd 1/boot && mkdir tmp && cd tmp && gunzip -c ../initramfs-eeepc.img | cpio -i
Далее приводим файл init к виду:
#!/bin/sh mount -t proc proc /proc if [ -n "$XANDROSBOOTDEBUG" ]; then /bin/busybox sh set -x fi ROOT=`cat /proc/cmdline | sed 's/.*root=// ; s/ .*//'` mount -t ext3 -o rw,noatime $ROOT /mnt if [ $? -ne 0 ] ; then echo Could not mount OS on $ROOT. Starting debugging shell.... /bin/busybox sh fi umount /proc if [ -n "$INIT" ]; then if [ -n "$XANDROSBOOTDEBUG" ]; then exec switch_root /mnt $INIT </mnt/dev/console >/mnt/dev/console else exec switch_root /mnt $INIT </mnt/dev/null >/mnt/dev/null fi else exec switch_root /mnt /sbin/fastinit "$@" </mnt/dev/console >/mnt/dev/console fi echo echo Init Failed. Starting emergency shell.... /bin/busybox sh
Собираем новый initrd-образ командой:
find | cpio -H newc -o | gzip -9 > ../initramfs-eeepc-nounionfs-ext3.img
Модифицируем конфигурацию загрузчика:
sed -i 's/initramfs-eeepc-nounionfs-ext3/initramfs-eeepc/' ../grub/menu.lst
Модифицируем файл fstab:
cat ../../etc/fstab| grep -v sda2 | sed 's/ext2/ext3/' > fstab && mv fstab ../../etc/
Удаляем временную директорию:
cd ../ && rm -rfv tmp
Всё! Теперь можно перезагрузить нетбук, загрузиться со встроенного накопителя и начать пользоваться восстановленной системой.
На этом всё. Приятной работы!
Корректор: Регина Васильева (reggi86@mail.ru)
2009-10-19 22:27:04 (#)