Создание в виртуальной машине из CD-ISO образа загружаемого виртуального диска VMDK
-----------------------------------------------------------------------------------
Здесь не только о Slitaz-Linux, тема относится и к другим системам, поэтому свои заметки приведу полностью. Возможно кому-то пригодится.
0. Здесь речь о некоторых особенностях использования Линукс систем. Установка Windows выполняется (как правило) с установочного дистрибутивного диска, создает виртуальный жесткий диск и проблем почти не имеет. Сама же виртуальная машина интересна тем, что в ней можно установить различные системы (GUEST) и переключаться между ними не выходя из главной (HOST)системы, в которой виртуальная машина загружена. Даже в 32-битном Линуксе пользователю доступно 3.5 ГБ оперативной памяти, а при условии выделения каждой GUEST-OS памяти по 256--512 МБ можно получить достаточную мобильность без перезагрузки компьютера - это все конечно "азы".
1. Работа в виртуальной машине (Vmware Player, Oracle VirtualBox) настроена (в первую очередь) на использование CD-ISO образа той или иной операционной системы.
Образы ОС в виде Live-CD (DVD) предусматривают установку ОС на реальный раздел физического жесткого диска (HDD или "винчестера"), но из виртуальной машины это не всегда возможно, а в случае "маленьких" Linux-OS это особенно проблематично. Кроме того "плодить" разделы на физическом жестком диске не всегда возможно/нужно.
2. Но виртуальные машины имеют в своем составе так называемый виртуальный жесткий диск, который устанавливается по умолчанию как устройство SCSI-0.0 Hard-Disk. При этом испытуемую ОС чаще всего можно установить только на устройство IDE Hard-Disk.
3. Надо удалить (или не удалять) устройство SCSI Hard-Disk и добавить новое устройство IDE Hard-Disk.
IDE необходимо для того, чтобы из загруженной с CD-ISO образа виртуальной машины (с виртуальной ОС) без проблем перенести эту машину-ОС на то, что позволит настаивать, сохранять изменения и повторно загружать систему и даже сохранять ее различные варианты.
4. Исходный CD-ISO образ загруженный в виртуальной машине изменить невозможно. Но можно его "развернуть" на виртуальный диск, сконфигурировать и сохранить в измененном виде. Для этого виртуальный диск надо "оформить" также, как и реальный физический. То есть создать на нем таблицу разделов, создать на нем хотя бы один раздел (ext2/ext3/ext4 для Unix-Linux, fat32/ntfs для Windows). Для этого нужна программа gparted (или аналог).
5. Скопировать загруженную систему на вновь созданный раздел виртуального диска /dev/sda1 - здесь надо понимать, что реально необходимо, а что лишнее. Советов дать не могу - надо читать, думать и конечно пробовать.
6. Теперь этот диск надо сделать загружаемым - для этого есть как минимум lilo, syslinux/isolinux, grub. В связи с "широким распространением" линукс-загрузчика grub-2 и из соображений совместимости с последними "большими" Линуксами, выбран именно он (хотя использование grub-legacy (просто grub), или grub4dos много проще и понятней).
Диск монтируется в /mnt и по этому "адресу" в него переписывается/копируется стандартный набор /bin /etc /home /root ... ... ..., /boot в случае Live-CD может отсутствовать, тогда надо добавить его вручную.
Затем на этот диск (имя его скорее всего будет /sda - так устроен gparted) устанавливается загрузчик. Файл конфигурации загрузчика вероятно придется создавать вручную, но даже если установка загрузчика создаст файл grub.cfg (что в виртуальной машине не всегда происходит) его все равно придется править и помещать в "правильное" место.
Авторы загрузчика grub-2 по всей видимости предполагают, что система (каноническая) уже установлена, имеет /boot /etc и ждет "оплодотворения" в эти директории от загрузчика, а это не всегда так в случае с маленькими Линуксами (они нередко устроены несколько иначе, чем например Linux-Ubuntu - хотя бы в части /dev).
7. Важный момент - как именовать новый диск и новый раздел на нем для загрузчика в новом файле grub.cfg - вот реальный пример этого файла для работы со сверх-маленьким Live-линуксом на основе ядра 3.2.0 от Юбунты:
для загрузки в виртуальной машине CD-ISO образа
menuentry "3 SFSL 121114 (Ubuntu-12.10)" {
set root='(cd)'
linux /CDlinux/_sfsl/live/vmlinuz320 <ключи загрузки ядра пропускаю>
initrd /CDlinux/_sfsl/live/initrd320.img
}
а для загрузки новоиспеченного виртуального диска (CD-ISO образ отключается за ненадобностью)
menuentry "3 SFSL 121114 (Ubuntu-12.10)" {
set root=(hd0,1)
linux /CDlinux/_sfsl/live/vmlinuz320 root=(hd0,1) <ключи загрузки ядра пропускаю>
initrd /_sfsl-121114/live/initrd320.img
}
Установка переменной для обозначения корня диска отличается и если set root='(cd)' необходим для загрузки "никакого" диска с образа CD-ISO, то для загрузки IDE-Hard-Disk (который в системе /dev/sda --> sda1) нужен канонический set root=(hd0,1) Если поменять их местами, то обе загрузки станут нерабочими.
8. Виртуальный IDE-Hard-Disk, имеющий таблицу разделов, из VMware-Player можно примонтировать в материнскую (HOST) /mnt и смотреть и править, если что-то не так.
9. Для более продуктивной работы с готовыми Live-CD-ISO образами можно/нужно распаковать их во временный рабочий каталог на HOST-машине (например архиватором file-roller или peazip) и в процессе изменений-совершенствования паковать в CD-ISO образ снова и загружать в виртуальную машину. Вот как это может выглядеть:
/home/<имя_пользователя>/"Рабочий стол"/cd-dir/<распакованный_ISO-образ>
/cd-dir/mkisofs.sh такого содержания (пример для загрузчика eltorito-grub - это grub-2):
#!/bin/bash
#
# build CD-sfsl ISO image
MKISO=type -p genisoimage 2>/dev/null
||
MKISO=type -p mkisofs 2>/dev/null
|| {
type -a xorriso 2>/dev/null &&
set `xorriso --version 2>/dev/null |
sed -n 's/^xorriso version\s*:\s*//p' |
tr . " "` 0 &&
[ $1 -ge 1 ] &&
[ $2 -ge 1 ] &&
MKISO="xorriso -as mkisofs"
} || {
echo "Sorry, genisoimage, mkisofs, or xorriso 1.1.0+ is needed."
exit 1
}
$MKISO -v -R -J -joliet-long -input-charset utf8 \
-c boot.cat -hide boot.cat -b CDlinux/boot/i386-pc/eltorito.img \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-o /tmp/sfsl121114grub2.iso dirname "$0"
Этот скрипт пытается использовать genisoimage, mkisofs, или xorriso для создания CD-ISO образа из содержимого каталога /cd-dir и пишет его в /tmp под именем sfsl121114grub2.iso (в данном примере).
Далее этот образ можно переместить, если надо, а можно из /tmp загружать в виртуальную машину.
Загрузчик eltorito-grub взят из дистрибутива (Live-CD-ISO) CDlinux, который и сам по себе интересен:
http://www.cdlinux.info/wiki/doku.php/
10. Упомянутый выше для примера дистрибутив SFSLinux еще более интересен:
http://uco.puppyrus.org/forum/thread176.html
Автор скромно, но с юмором назвал его так: "SFSLinux. Самоделка. Попытка скрестить Debian с Puppy". Создал несколько версий от CrunchBang до Linux-Ubuntu 12.10 и переключился на другие задачи.
А интересен дистрибутив своей идеологией и производными от нее возможностями. К ядру системы подключается один или более модуль, упакованный в squashfs. Модулей может быть много или мало. Их можно создавать в системе самому, можно использовать готовые sfs-пакеты из репозитория Puppy-Linux, а можно устанавливать готовые deb-пакеты из репозиториев Debian и Ubuntu.
Можно сохранять содеянное, а можно завершать работу без сохранения. И много чего еще интересного. Но Linux-Ubuntu 12.10 "уложенная" в ISO-образ размером 180 MB вызывает удивление и восхищение. Можно почитать от самого автора. Сейчас он тоже самое проделал с Arch-linux (но есть реализации и с другими "донорами"):
http://forum.puppyrus.org/index.php/topic,13843.0.html
11. Тоже самое проделал с дистрибутивом Slitaz-Linux 4.0 - погонял несколько раз cd-dir <--> CD-ISO и перенес на виртуальный IDE-Hard-Disk - файл *.vmdk подключается и в VirtualBox машине.
В Slitaz-Linux есть gparted - им отформатировал виртуальный диск. Загрузчик в Slitaz-Linux по умолчанию grub-legacy, воспользовался им для установки загрузчика на виртуальный диск /dev/sda. Slitaz имеет свой встроенный установщик на HDD/FlashDisk с его помощью установил систему на виртуальном диске.
Выключение виртуальной машины. Отключение в настройках загрузки с CD-ISO образа и включение загрузки с виртуального диска IDE Hard-Disk, на котором теперь стоит полноценная система Slitaz-Linux с загрузчиком. Загрузившись с такого диска можно дальше настраивать/переделывать систему под свои нужды, можно сохранять промежуточные результаты в архив на HOST-диске. Можно такой диск (а это файл *.vmdk) переносить на флэшке в другие места, передавать друзьям (на новом месте нужна установленная виртуальная машина).
12. Все это можно выполнить и в VMware и в VirtualBox и при этом нет нужды устанавливать дополнения типа wm-ware-tools. Выбор машины - дело вкуса/привычки.