Долго рылся в Интернете - но везде или Linux в VM, или Linux в *.vhd - инструмент Windows и нет причины его тащить в Linux - хотя тут это обсуждают- но все ссылки как делать - битые.
И Grub2 не понимает *.vhd c Windows - хотя в Windows - *.vhd очень эффективны
Linux с многослойными sfs http://puppyrus.org тоже не плохи - но все же - ext4 побыстрее, надежнее и доступнее.
Идея - где не пахнет Linux и проблема резать диск - например у пенсионера трясущего за свой старый комп - на котором без SSE2 в Windows уже отрезали Skype, youtube, заход в банк. Там запуск Linux Live c iso или с раздела ntfs - хоть многослойные хоть с \filesystem.squashfs и создаем \vhd.img на ntfs разделе
sudo dd if=/dev/zero of=/mnt/sdb3/vhd.img bs=1M count=5000
и в нем Linux на ext4.
Проблема - как запускать Linux с такого \vhd.img
Grub2 монтирует с ntfs раздела образ \vhd.img и с него в памяти запускает /initrd.gz
menuentry " Boot /vhd.img root=(lp) " {
loopback lp (hd1,3)/vhd.img
set root=(lp)
echo '===ls / '
ls / # видно содержание образа \vhd.img
linux /vmlinuz fullinstall root=/ vhdimg
initrd /initrd.gz
}
Но при передаче управления initrd - монтирование \vhd.img образа слетает.
В принципе - развернутые на ext Linux запускаются и без /initrd - так при запуске с \vhd.img - но с
linux /vmlinuz root=/dev/sdb1
# откуда установленный там Linux был скопирован в \vhd.img - то Linux запускается с этого ext4 sdb1 раздела и без /initrd
А с \vhd.img - наверное проще сделать и запустить свой /init-vhd в котором - пока /initrd.gz в памяти - снова монтировать Linux в \vhd.img с ntfs - чтобы успеть его сделать / перед
mount -t rootfs -o remount,rw rootfs /
И передать управление в Linux /sbin/init
Сделать это с ядра - у меня не сработало
linux /vmlinuz root=/dev/sdb3/vhd.img
Сам вернулся к Linux после долгой разлуки == моя инструкцию по первому Live-CD_Linux-Knoppix и приходится многое вспоминать, да и новое осваивать. Поэтому вопросы:
1). Или все же можно как-то смонтировать \vhd.img образ с ядра (или оставить монтированным после Grub2) и запускать без initrd ?
2). Можно ли чтоб после loopback lp (hd1,3)/vhd.img
- (lp) - представлялось типа /dev/(lp)
- которое можно представить типа root=/dev/(lp)
3). Если нет - то как и где лучше вставить
используя флаг в ядро vhdimg - монтирование \vhd.img
for i in $(cat /proc/cmdline) ; do
[ "$i" = "vhdimg" ] && exec mount /dev/sdb3/vhd.img /
done
3.1). Править существующие в начале /init
( читать дальше... )
или /sbin/usablefs
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
mount -t rootfs -o remount,rw rootfs /
mount -t devtmpfs devtmpfs /dev 2>/dev/null
# got a kernel panic in dpup stretch with debian kernel 4.9
# this solved the issue
sleep 0.5
# this is not required for huge kernels and actually fails
# but it's needed by other type of kernels for the usb stuff to work
mkdir -p /proc/bus/usb 2>/dev/null
mount -t usbfs none /proc/bus/usb 2>/dev/null
ln -s /proc/mounts /etc/mtab 2>/dev/null
# loop1-15
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
[ -e /dev/loop${i} ] && continue
mknod /dev/loop${i} b 7 $i
done
# busybox 1.25 losetup somehow requires /dev/loop/X in the initrd to work..
# edit: only if CONFIG_FEATURE_DEVFS is enabled
### END ###
3.2). Или делать новый /init-vhd - и как его сделать правильно?
==========
Это в рамках Linux на слабых компах для нищих пенсионеров Файна-Юкраин.
P.S. Первый пост на этом форуме.
1). Не уверен что разместил пост в правильном месте. Может мой уровень низкий и вопрос простой для этой ветки.
2). Не получилось спрятать под спойер ' cut code ..... /code /cut ' 2 длинных последних сода. Если без code то текст рвется внутри кода.