Mastodon

Shumaher’s_Blog@AlexZ.me

— yet another stupid personal weblog

Перенос Ubuntu в образ для Wubi

WubiНесколько лет назад я делал обратную операцию — перенос Ubuntu из VMware на раздел диска, однако с появлением у Windows 7 возможности загружаться с VHD-образа, решил перейти на такой вид виртуализации — чтобы все дополнительные ОС были в образах, а реально установлена на раздел была только одна основная. У меня, например, это до сих пор WinXP.

И перенести (а затем загрузить) в образ уже установленную Ubuntu гораздо проще, чем сделать тоже самое с Windows. Всё время в основном займет только копирование файлов.
Для осуществления этого даже не нужен какой-то специальный софт для создания образов (типа Acronis'а, etc.), всё необходимое есть в самой Ubuntu (и в любом линуксе).
А для непосредственно загрузки понадобится загрузчик из Wubi.


Создание образа

Потребуется загрузиться с LiveCD (я использовал ту же убунту), потому что скопировать файлы запущенной ОС не получится.
Для создания пустого RAW-образа размером 6 ГБ и сохранения его на NTFS-разделе используйте dd:

sudo su
dd bs=1M count=6144 if=/dev/zero of=/media/WINXP/ubuntu/disks/root.disk



Можно использовать и меньший размер, например 3 ГБ, ещё меньше не рекомендуется.

Здесь и далее некоторые очевидные команды вроде монтирования раздела с Windows или создания директорий для точек монтирования пропущены!

Теперь нужно инициализировать диск и создать и файловую систему (я использую ext3, но можно и ext4).
Я не знаю, как разбить диск при помощи отдельных команд (и есть ли вообще другие способы), но fdisk'ом это делается так:

fdisk /media/WINXP/ubuntu/disks/root.disk

далее, находясь уже в оболочке fdisk, нужно последовательно выбрать такие команды:

o   создание новой пустой таблицы разделов DOS
w   запись таблицы разделов на диск и выход

ВАЖНЫЙ момент:
Как нетрудно заметить, сами разделы на диске НЕ создаются, поэтому корнем файловой системы будет устройство /dev/sda, а не sda1 как обычно.
Это сделано так, потому что при обычной установке Wubi из-под Windows, образ создаётся также без разделов. Но по идее создание разделов ничем не грозит, и образ будет загружаться тоже. Пробуйте сами)

Создание ФС:

mkfs.ext3 /media/WINXP/ubuntu/disks/root.disk -L UBUNTU



Монтирование образа:

mount -o loop /media/WINXP/ubuntu/disks/root.disk /mnt/disk



Копирование файлов с раздела текущей установки Ubuntu (смонтированной в /media/UBUNTU) в образ:

cp -axv /media/UBUNTU/* /mnt/disk/




Установка GRUB2 в образ и настройка

grub-install --force --no-floppy /dev/loop2

См. также примечание о параметре --allow-floppy.



В данном примере установка GRUB2 производится в блочное устройство /dev/loop2 (куда был смонтирован образ), узнать номер loopX можно в выводе mount.
Установка через grub-install может быть неудачной с первого раза, если это так, просто попробуйте ещё раз.

Конфиг /mnt/disk/etc/grub.d/40_custom:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
 
 
menuentry 'Ubuntu [WUBI]' --class ubuntu --class gnu-linux --class gnu --class os {
	insmod ntfs
	set uuid='XXXXXXXXXXXXXXXX'
	set disk='/ubuntu/disks/root.disk'
	search --no-floppy --fs-uuid --set=root $uuid
	loopback loop0 $disk
	set root='(loop0)'
	linux	/vmlinuz root=UUID=$uuid loop=$disk ro vt.handoff=7
	initrd	/initrd.img
}
menuentry 'Ubuntu (recovery mode) [WUBI]' --class ubuntu --class gnu-linux --class gnu --class os {
	insmod ntfs
	set uuid='XXXXXXXXXXXXXXXX'
	set disk='/ubuntu/disks/root.disk'
	search --no-floppy --fs-uuid --set=root $uuid
	loopback loop0 $disk
	set root='(loop0)'
	echo	'Loading Linux ...'
	linux	/vmlinuz root=UUID=$uuid loop=$disk ro single 
	echo	'Loading initial ramdisk ...'
	initrd	/initrd.img
}



Этот конфиг отличается от дефолтного, который устанавливает Wubi.

Не забудьте указать:
— свои пути к ядру (параметр linux) и initrd-образу (параметр initrd);
— правильный UUID NTFS-раздела на котором лежит образ root.disk (узнать можно в выводе команд ls -l /dev/disk/by-uuid или blkid) (параметр set uuid).

После сохранения файла необходимо сделать chroot в ФС образа и обновить конфиг GRUB'а:

mount -o bind /dev /mnt/disk/dev
mount -o bind /proc /mnt/disk/proc
mount -o bind /sys /mnt/disk/sys
chroot /mnt/disk
update-grub
exit
umount /mnt/disk/sys
umount /mnt/disk/proc
umount /mnt/disk/dev

ИЛИ:
Можно сохранить файл как /mnt/disk/boot/grub/custom.cfg, но сразу начиная с menuentry, БЕЗ первых двух строк!
В таком случае изменения загрузочного меню будут применяться сразу же, и выполнять update-grub не нужно.
Однако, из-за бага #927157 (фикс которого выпущен для 12.10 не так давно, но у меня ничего не изменилось!), записи из custom.cfg не появляются в меню [почти никогда]. Может быть когда-нибудь это изменится:) Если у вас так сработает — то хорошо, ибо это лучший вариант.


Установка wubildr на NTFS-раздел

Скачайте отсюда wubi.exe и распакуйте при помощи 7z в корень раздела с Windows 2 файла загрузчика Wubi:

apt-get install p7zip-full
7z e -o/media/WINXP/ ./wubi.exe winboot/wubildr
7z e -o/media/WINXP/ ./wubi.exe winboot/wubildr.mbr


Настройка основного загрузчика

Далее нужно настроить ваш основной загрузчик на запуск wubildr.

Для menu.lst GRUB1 (Legacy) и GRUB4DOS:

title Ubuntu [WUBI]
chainloader /wubildr.mbr



Для boot.ini Windows XP:

C:\wubildr.mbr="WUBI"



BAT-файл для создания загрузочной записи в BCD Windows Vista/7:

@echo off
Setlocal
for /f "tokens=2" %%A in ('bcdedit.exe /create /d "WUBI" /application bootsector') do set guid=%%A
bcdedit.exe /set %guid% device boot
bcdedit.exe /set %guid% path \wubildr.mbr
bcdedit.exe /displayorder %guid% /addlast
endlocal



Иногда после успешной загрузки Wubi появляется консоль GRUB2 и больше ничего не происходит. В таком случае нужно ввести:

configfile (hd0)/boot/grub/grub.cfg

— должно появиться меню из конфига выше.



Таким образом, процесс загрузки будет происходить в несколько шагов:
1) Загрузчик вашей основной ОС загружает wubildr;
2) wubildr находит образ и передаёт управление GRUB2, находящемуся внутри него;
3) GRUB2 загружает ядро Ubuntu;
4) Наконец — PROFIT!!!!


Недостатки

Как всегда без минусов не обошлось:
— так же как и при аналогичном способе загрузки Win7 (ссылка в самом начале), гибернация НЕ работает;
— из-за фрагментации NTFS-раздела с образом система может работать медленнее, чем при обычной установке.





P.S. после небольшой модификации конфига GRUB2 можно запускать тот же образ в виртуальной машине. Об этом я напишу в следующий раз.

VN:F [1.9.17_1161]
Rating: 0.0/5 (0 votes cast)
Оставьте свой комментарий




OpenID WordPress.com Yahoo

Это не спам.