LINUX.ORG.RU

Запуск Linux на ext4 с одного файла \vhd.img на ntfs разделе.

 , , , ,


0

1

Долго рылся в Интернете - но везде или 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

#!/bin/sh
###########################################################

/sbin/usablefs # mount: /proc /sys /dev / (proc sysfs devtmpfs rootfs)

# a full-install OS has 'fullinstall' param in the cmdline
# it's added by puppyinstaller (or you can add it manually)
for i in $(cat /proc/cmdline) ; do
  [ "$i" = "fullinstall" ] && exec /init_full_install
done
............................
### END ### 

или /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 то текст рвется внутри кода.

Что-то у тебя много букв и не очень понятно. Ну значит запускаешь ты из образа, груб у тебя файл монтирует, верно? В таком случае тебе нужен только подходящая initramfs которая будет монтировать этот образ и передавать ему управление. Можно её сделать с помощью mkinitrd в Slackware, там можно и отредактировать при желании стартовый скрипт.

Xenius ★★★★★ ()
Ответ на: комментарий от Xenius

Может разместил не там и мой вопрос слишком тривиальный тут.

Когда после 15 лет вернулся в Linux - удивило что не нашел аналога \WINBLOCK.GZ - оставляющий в винде монтированным образ после передачи управления.

У меня смонтированный Grub2 образ из - которого запущен initrd - слетает и в initrd уже нет этого монтированного образа.

Вот и вопрос - может что не так делаю.

1). А может все таки Grub2 или ядро linux может как-то оставить образ монтированным в initrd.

2). Если это не возможно в Linux - то конечно надо второй раз монтировать образ подходящей initramfs - на деле только вставить в тот initrd который уже запустился - в нужное место используя флаг в ядро vhdimg монтирование \vhd.img

 for i in $(cat /proc/cmdline) ; do
  [ "$i" = "vhdimg" ] && exec mount /dev/sdb3/vhd.img  /
done 
Это тоже для меня пока туманно - куда и как надо вставить монтирование образа второй раз.

alex52mail ()
Ответ на: комментарий от alex52mail

Grub и Linux это как две разные ОС, то что смонтировано в GRUB можно использовать только из-под него, как только запускается ядро Linux, оперативная память GRUB больше недоступна и считай, что ничего не было смонтировано, поэтому всё монтирование нужно делать заново.

Xenius ★★★★★ ()
Ответ на: комментарий от Xenius

Ясно что разные системы. Пока разбираюсь с современным Linux - и не хочется верить - что в Linux нет что есть в винде

title !!!!  Установка Setup %isodir%/*.iso прямо с образа без распаковки или записи CDRom 
echo WINBLOCK.GZ драйвер оставляет монтированными образы в запущенной системе
map --mem %isodir%/WINBLOCK.GZ (fd1)
map --mem %isodir%/WINBLOCK.GZ (fd0)
echo iso==%isodir%/%iso%
map %isodir%/%iso% (0xff) || map --mem %isodir%/%iso% (0xff)
map --hook
chainloader (0xff)
Тут же остается образ монтированным во 2ой системе.

Неужели такой возможности нет в Linux?

alex52mail ()
Ответ на: комментарий от alex52mail

В данном коде используется маппинг образов и доступ к ним происходит с помощью 16-битных прерываний BIOS.

То есть в той же UEFI работать уже не будет, например.

В линуксе прерывания BIOS уже не используются, поэтому надо монтировать всё заново. Не вижу в этом ничего особенно плохого.

Xenius ★★★★★ ()
Ответ на: комментарий от Xenius

Спасибо. Значить в этом направлении больше не будем рыть. Снова монтировать наверное самое простое - но методика должна работать на разных образах - в сети куча просьб - как запустить на реальной машине что установили в виртуалке в образ- такого же типа задача - не править же initrd каждый раз.

Выше предложили запуск с образов через Grub - пока разберемся с этим.

P.S. прочитал описание разметки Markdown или LORCODE но не получается спрятать под спойлер длинный текст между cut.... cut

alex52mail ()
Ответ на: комментарий от Radjah

Ранее смотрел и это wubi - это для богатых. На слабом компе wubi даже не стало загружать - остановилось с ошибкой.

У самого лаптоп Core i3, ram 4 gb - хватает на все. Но интереснее вытягивать все из старых компов. Помогаю нищим пенсионерам Файна-Юкраин со слабыми компами и тут Linux - продолжение. Сравнение с Windows на слабых компах. из 21 скачанного дистрибутива - на комп без SSE2 - установились и запустились только

  • debian-9.9.0-i386-xfce-CD-1.iso
  • MX-19.1_386.iso
  • Puppy Linux bionicpup32-8.0+18-uefi.iso
  • Runtu 14.04 c ~1,4 гб директории \stea на ntfs

И как ИТОГ тут Запуск и установка разных Linux

На Pentium-1400, 512 mb Ram разумнее оставить Linux:

1). Работа без установки - из 437 МБ директории \pra09-1910-i686

2). С установкой на диск или Linux Live - из 1,1 ГБ \antiX-19_386-full.iso

Эти два дистрибутива соответствуют мнению - и действительно - даже на antiX-19 Live - пока CPU не загружен полностью - все летает. Тогда как на других типа lubuntu-18, Runtu-16 - притормаживает, а на MX-19.1 - полные тормоза.

Сейчас снова попробовал - wubi установило - но даже *ubuntu-12 не стало запускаться далее Grub.

И тут именно запуск Grub2 - вытащил из /wubildr-disk.cfg

loopback loop0 /ubuntu/disks/root.disk
set root=(loop0)
search --set=diskroot -f -n /ubuntu/disks/root.disk
probe --set=diskuuid -u $diskroot
linux /vmlinuz root=UUID=$diskuuid loop=/ubuntu/disks/root.disk preseed/file=/ubuntu/install/preseed.cfg wubi-diskimage ro quiet splash
initrd /initrd.img
boot
буду приспосабливать под свой образ - только не понятно - что ставить вместо loop= в строке
linux /vmlinuz root=UUID=$diskuuid loop=/ubuntu/disks 
Спасибо, будем разбираться.

alex52mail ()
Ответ на: комментарий от alex52mail

Может тебе squashfs попробовать?

А почему вообще именно такая цель — запускать из раздела Windows? Не лучше ли все данные заархивировать на другой носитель, отформатировать весь диск в Ext4 или другую линуксовую файлосистему, сделав два раздела. Затем поставить какой-нибудь GNU/Linux и перенести все данные обратно.

Xenius ★★★★★ ()
Ответ на: комментарий от Xenius

Представьте ситуацию - прихожу к пенсионеру который трясется над своим старым компом (на новый естественно денег нет) и привык к винде (на которой без SSE2 в Windows уже отрезали Skype, youtube, заход в банк) - и говоришь ему - сейчас будем резать ваш диск на разделы .....

Проще принести 3-5 гб образ с Linux и организовать загрузку c привычного ntfs, оставляя и привычную винду. Вот это и пытаюсь отладить.

В винде - давно уже никому не ставлю россыпью Оптимальные ОС, их защита - *-diff.vhd RamDisk pagefile ewf - все системы в динамических *.vhd - типа приносишь на флешке и прописываешь загрузку полностью рабочего 2,01 гб с Офис-16 \W10LTF32O.vhd с lzx сжатыми файлами, в среднем в 2,5 раза.

Сейчас разберусь с Linux - как это делается в wubi, потом как вставить монтирование в /init

У них в строке

linux /vmlinuz root=UUID=$diskuuid loop=/ubuntu/disks/root.disk preseed/file=/ubuntu/install/preseed.cfg wubi-diskimage ro quiet splash
'loop= ' и ' wubi-diskimage ' - явно флаги в ядро\initrd - похоже и тут не обойтись без переделки \initrd

Спасибо и Удачи.

alex52mail ()
Ответ на: комментарий от alex52mail

P.S.

Может тебе squashfs попробовать?

Cначала было слово ....

Наученный опытом - сразу много слов - и потом копи их сюда.

Linux с многослойными sfs http://puppyrus.org тоже не плохи. И как ИТОГ - на Pentium-1400, 512 mb Ram разумнее оставить Linux:

1). Работа без установки - из 437 МБ директории \pra09-1910-i686 - каждая программа в своем *.pfs архиве - соответственно в своем слое - при загрузке до loop27

2). С установкой на диск, или Linux Live - из 1,1 gb \antiX-19_386-full.iso - все из одного большого *.sfs

А по squashfs еще не выяснено - только что разместил свои сомнения

Но все же ext4 - побыстрее, надежнее, доступнее, и есть свободное ext4 пространство. Поэтому интерес к запуску с /vhd.img

Пока разбираюсь с загрузкой с vhd через Grub2 типа

1). Загрузка с *.vhd (от Windows)

menuentry "VHD Ubuntu, Linux 2.6.31-14-generic" {
    insmod vhd
    vhd vhd0 (hd0,1)/ubuntu-910/ubuntu-910-desktop-i386.vhd --partitions
    linux (vhd0,1)/boot/vmlinuz-2.6.31-14-generic root=/dev/sda1 vloop=/ubuntu-910/ubuntu-910-desktop-i386.vhd quiet splash
# root=/dev/vhdhost/Partition1 
    initrd (vhd0,1)/boot/initrd.img-2.6.31-14-generic-vboot
}
достаточно ли этого модуля insmod vhd или vloop= специфический флаг в ядро - которое должно быть модифицировано под него, и не с каждым ядром эти применимо?

Сделал поиск скачать vboot-v2.zip или vhd.mod - не нашел где без регистрации можно скачать это? А можно ли где это скачать?

Обычно выставляют на форумах типа - но сам vhd.mod и тут не нашел. Тут просто назвали сайт vboot жадными и что этот сайт уже загнулся.

vboot есть в составе NTBOOT - а вот где взять отдельно vhd.mod ?

2). Загрузка с виртуального диска по UUID на примере wubi

menuentry " Boot /ubuntu/disks/root.disk  root=UUID" {
loopback loop0 /ubuntu/disks/root.disk
set root=(loop0)
search --set=diskroot -f -n /ubuntu/disks/root.disk
probe --set=diskuuid -u $diskroot
linux /vmlinuz root=UUID=$diskuuid loop=/ubuntu/disks/root.disk preseed/file=/ubuntu/install/preseed.cfg wubi-diskimage ro quiet splash
initrd /initrd.img
}

alex52mail ()