Pull to refresh

Восстановление GRUB после установки Windows или «как не стоит делать»

image

Часа в 2 ночи мне написала подруга с просьбой одолжить ей нетбук на пару дней. Я, конечно, согласился, после чего она попросила меня поставить на него Windows с определенным софтом. Недолго думая, я накатил винду, совершенно забыв, что на нетбуке стояла Ubuntu 13.04. И все бы ничего, да вдруг вспомнил, что забыл на разделе убунты пару нужных мне файлов. Тут все и началось.

Предыстория

Ни для кого не секрет, что Windows при установке ставит свой загрузчик, не видя рядом стоящих систем. Когда я об этом вспомнил, на меня уже смотрел чистый рабочий стол Windows. Здесь был логичный выход из положения-скачать образ любого Linux-дистрибутива и запустить его в liveUSB, после чего обновить GRUB, но мне было слишком лень качать образ и записывать его на флешку. Поэтому я пошел более трудным путем. При установке Ubuntu диск был абсолютно чистым. Предвидя, что Windows рано или поздно вернется на нетбук я оставил часть диска неразмеченной. Обычно, я всегда создавал один раздел для " / " (hd0,0 в будущем) и swap (hd0,2), но в этот раз я решил поэкспериментировать и создал еще один раздел для " /home " (hd0,1).Спустя некоторое время была установлена Windows (hd0,3)

Запуск ядра

Я вспомнил, что есть программа EasyBCD, позволяющая создать свое меню загрузки. Получив некоммерческую копию программы я сделал свое меню и перезагрузился в надежде, что тут же вернусь в Ubuntu, но, как говорится, «не тут-то было». Какие бы параметры для раздела (hd0,0) я не ставил, он либо зависал, либо «падал» в grub4dos. Он-то мне и помог. Тщетно я пытался набирать
root (hd0,0)
воспринимать он команду отказался, а вот по команде
hd(0,0)
перепрыгнул в раздел как в папку. Так как я еще новичок в общении с Linux, мне пришлось поискать, что нужно для запуска ядра, после чего набрал
kernel /vmlinuz
initrd /initrd
boot

и как по волшебству ядро запустилось. Но и тут не все так просто.

Initramfs

При запуске меня встретил не GDM Login Manager, а (initramfs) и предложение что-нибудь ввести. Попытка ввести exit закончилась kernel panic'ом. Первым делом я попытался примонтировать разделы, после чего сразу выполнил chroot
mkdir /mnt
busybox mount /dev/sda1 /mnt
busybox mount /dev/sda2 /mnt/home
chroot /mnt

«Ура! Осталось просто запустить update-grub!»,-подумал я, но обновление GRUB'а выдало ошибку, он попросту не увидел дисков. Выйдя из chroot, и еще немного поискав решения, я нашел такой флаг команды mount, как bind, который позволяет привязать физические устройства в систему, запущенную из-под chroot.
mkdir /mnt/dev
mount --bind /dev /mnt/dev
chroot /mnt
# update-grub
# exit
reboot

После перезагрузки меня уже ждал GRUB. Загрузившись в убунту еще раз прописал
sudo update-grub

и получил возможность загружаться в Windows.

P.S. Предположу, что местные обитатели смогут и сами выкрутиться из подобной ситуации, поэтому статья ориентирована на тех, кто не особо дружит с Linux, но хочет подружиться, либо на тех, у кого нет второй машины или свободных флешек под рукой.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.