Как стать автором
Обновить

Восстановление 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, но хочет подружиться, либо на тех, у кого нет второй машины или свободных флешек под рукой.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.