grub 2 - загрузка с iso и img



На ubuntuforums попался рецепт, как с помощью Grub 2 загрузить компьютер с iso-образа, лежащего на винте. Это может быть удобно, когда нет привода в компьютере или просто лень диск записывать. Кроме того, что не нужно вставлять диск в привод, сам процесс загрузки проходит заметно быстрее. К сожалению, не все загрузочные образы подходят для такой загрузки. Умеют такой "фокус", например, Ubuntu 9.10 и новее, Gparted CD, Parted Live CD, SystemRescue CD и некоторые другие. Кроме *.iso возможна загрузка с некоторых *.img-образов.

В данном примере предлагается размещать файлы загрузочных образов в директорию /boot/iso/ и в Grub 2 указывать их как, например, (hd0,1)/boot/iso/<имя_образа.iso>.

Поскольку 'rescue CD' как правило грузятся в память компьютера, тип файловой системы, где лежат образы, не имеет большого значения. Ведь Grub 2 уже с него умеет загружаться.

После того как вы скопируете образы в /boot/iso/, остаётся лишь прописать их в меню Grub 2.

Обратите внимание, если вы хотите загружать образы из домашней директории. У большинства пользователей /home - это отдельный раздел. Соответственно, необходимо указывать путь не в виде (hdA,B)/home/user/iso/name.iso, а примерно так: (hdX,Y)/user/iso/name.iso. Думаю, это понятно.

Итак, создаём нужные пункты в grub-меню. Открываем для правки файл /etc/grub.d/40_custom. Все добавленные в него записи появятся последними пунктами меню. Если вы хотите добавить записи выше, то нужно их писать в файл с меньшим номером, например - 06_custom. Главное, не забыть сделать его исполняемым.

Пример /etc/grub.d/40_custom:

<br>#!/bin/sh<br>echo "Adding 40_custom." >&2<br>exec tail -n +3 $0<br># This file provides an easy way to add custom menu entries. Simply type the<br># menu entries you want to add after this comment. Be careful not to change<br># the 'exec tail' line above.<br><br>menuentry "Lucid ISO" {<br>loopback loop (hd0,1)/boot/iso/ubuntu-10.04-desktop-i386.iso<br>linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/iso/ubuntu-10.04-desktop-i386.iso noprompt noeject<br>initrd (loop)/casper/initrd.lz<br>}<br><br>menuentry "Karmic 64-bit ISO" {<br>loopback loop (hd0,1)/boot/iso/ubuntu-9.10-desktop-amd64.iso<br>linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/iso/ubuntu-9.10-desktop-amd64.iso noprompt quiet splash<br>initrd (loop)/casper/initrd.lz<br>}<br><br>menuentry "Gparted Live ISO" {<br>loopback loop (hd0,1)/boot/iso/gparted-live-0.6.1-2.iso<br>linux (loop)/live/vmlinuz boot=live union=aufs noswap noprompt ip=frommedia findiso=/boot/iso/gparted-live-0.6.1-2.iso toram=filesystem.squashfs<br>initrd (loop)/live/initrd.img<br>}<br>menuentry "SystemRescue CD ISO" {<br>loopback loop (hd0,1)/boot/iso/systemrescuecd-x86-1.5.8.iso<br>linux (loop)/isolinux/rescue64 setkmap=us isoloop=/systemrescuecd-x86-1.5.8.iso<br>initrd (loop)/isolinux/initram.igz<br>}<br><br>menuentry "Parted Magic ISO" {<br>loopback loop (hd0,1)/boot/iso/pmagic-5.2.iso<br>linux (loop)/pmagic/bzImage iso_filename=/boot/iso/pmagic-5.2.iso boot=live load_ramdisk=1 prompt_ramdisk=0 noeject noprompt<br>initrd (loop)/pmagic/initramfs<br>}<br><br>menuentry "Boot IMG - Seagate Tools" {<br>linux16 /memdisk bigraw<br>initrd16 /SeaTools.img<br>}<br>

После внесения любых изменений в этот файл необходимо выполнить команду:

<br>sudo update-grub<br>


Для загрузки с img-образов необходим файл memdisk. Он поставляется с пакетом syslinux. Последний обычно установлен в системе. Файл нужно скопировать в /boot. Для debian/ubuntu это будет выглядеть так:

<br>cp /usr/lib/syslinux/memdisk /boot/<br>


Так же, процесс добавления img-образов можно автоматизировать, создав файл /etc/grub.d/50_memdisk со следующим кодом:

#!/bin/sh<br>set -e<br><br>IMAGES=/boot/images<br>. /usr/lib/grub/grub-mkconfig_lib<br>if test -e /boot/memdisk ; then<br> MEMDISKPATH=$( make_system_path_relative_to_its_root "/boot/memdisk" )<br> echo "Found memdisk: $MEMDISKPATH" >&2<br> find $IMAGES -name "*.img" | sort | <br> while read image ; do<br> IMAGEPATH=$( make_system_path_relative_to_its_root "$image" )<br> echo "Found floppy image: $IMAGEPATH" >&2<br> cat << EOF<br>menuentry "Bootable floppy: $(basename $IMAGEPATH | sed s/.img//)" {<br>EOF<br> prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e "s/^/\t/"<br> cat << EOF<br> linux16 $MEMDISKPATH bigraw<br> initrd16 $IMAGEPATH<br>}<br>EOF<br> done<br>fi


После чего, как уже писалось, необходимо выполнить:
<br>chmod +x /etc/grub.d/50_memdisk<br>update-grub<br>


Теперь, если мы поместим образы *.img в /boot/images, они автоматически появятся в меню загрузки.