Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Category:

Задротство: dual boot Windows 7 c Linux

Есть система с Windows 7 bootmgr, на которой в соседней партиции стоит линукс без бутлоадера. Бутлоадер загружался с флешки и грузил линукс, но флешку я забыл.

Цель - заебаться. Задача - добавить в виндовый загрузчик пункт Linux, по возможности не сря в систему.

Интернеты советуют всякую чушь вроде создания для линукса бутовой fat-партиции или снесения виндового загрузчика из MBR, попутно используя гуи вроде wingrub и прочего шрота для записи секторов, написанные имбецилами. Это может и "нормально" для кого-то, но не удовлетворяет моему высокому критерию "не срать".

В результате придумал, как сделать, не меняя никаких партиций, мбр-ов и загрузочных секторов и сведя засирание к 3-м файлам, только один из которых нужно класть на винду в любое место NTFS-раздела, а остальное по желанию хоть на NTFS, хоть на Ext. Если б на бутовом разделе была btrfs, пришлось бы кернел с initramfs на NTFS держать, что было бы стрёмно с точки зрения дефекации, но в этом месте у меня стандартно ext3.

Сделал в результате так:

- берете из бинарного дистра grub4dos два файла - grldr и grldr.mbr
- grldr кладете в корень любого раздела, поддерживаемого grub4dos, в первом приближении в корень виндового раздела
- grldr.mbr кладете в любое место любого раздела, поддерживаемого bootmgr, в первом приближении в папку Boot самого bootmgr.
- прописываете по инструкции из интернетов grldr.mbr в BCD с помощью родного BCDEdit (application bootsect и т.д.)
- перегружаетесь, выбираете пункт Linux
- grub4dos ищет везде menu.lst, если найдет то готово, но у меня не нашел и бросил в свой шелл

Далее описываю приключения от первого лица

- я по памяти написал find --set-root /boot/vmlinuz-linux и угадал, но можно было какой-нибудь /bin/sh поискать или перебирать все разделы используя команды типа root (hd0,5)
- далее работает автокомплит имен, но по-прежнему надо помнить, как в линуксе называется устройство, на котором лежит корневой раздел

kernel /boot/vmlinuz-linux root=/dev/sda3
initrd /boot/initramfs-linux.img
boot

Выяснилось, что я не помнил, и попал в emergency shell из initrd. В нем нашел с помощью blkid нужный раздел, вспомнил, что его надо примонтировать в new_root, примонтировал и вышел из шелла. Продолжил грузиться, но тут оказалось, что нет /sbin/init, пришлось перегрузиться и заново вбить в грабе

find --set-root /boot/vmlinuz-linux
kernel /boot/vmlinuz-linux root=/dev/sda5 ro init=/usr/lib/systemd/systemd
initrd /boot/initramfs-linux.img
boot

В этот раз почему-то не загрузился slim, и вообще systemd говорил какую-то ерунду и не показывал даже текстовый login promt. Ничего, перегрузился с break в коммандлайне кернела и из эмерженси-шелла починил, зачрутясь вручную (с прибинживанием proc, sys и dev) и перегенерировав initrd.

Затем все загрузилось, я добавил /boot/grub/menu.lst c 3 строчками

find --set-root /boot/vmlinuz-linux
kernel /boot/vmlinuz-linux root=/dev/sda5 ro init=/usr/lib/systemd/systemd
initrd /boot/initramfs-linux.img

И теперь я счастливый обладатель дуалбута без флешки и говна.
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 3 comments