LINUX.ORG.RU

Запустить debian в режиме Live с использованием squashfs

 


0

1

Доброго всем!

Решаю в качестве головоломки и расширения кругозора задачу по созданию iso-образа Linux (в частности Debian) с помощью на виртуальной машине с исходной точки, когда на виртуальный HDD исходной ВМ установлена гостевая ВМ с Debian 13.

На форуме нашёл две темы (первая - Скопировать систему с жесткого диска в SquashFS образ и закинуть его на флешку. Что я делаю не так? и вторая - Запустить debian в режиме Live (комментарий)). Прочитал, но не смог осознать в каком месте конфигурационного файла grub.cfg идёт указание на файл squashfs.

В итоге после определённого количества конфигураций имею следующее: на целевом диске (с которого надо создавать загрузочный iso-образ) имеется два каталога: /boot и /liveOS. В /boot/grub/grub.cfg прописана следующая строка загрузки ядра: linux /boot/vmlinuz_... boot=liveOS toram=filesystem.squashfs В /boot находятся ядро ОС и initrd.img. В /liveOS - filesystem.squashfs.

Загрузка с целевого диска проходит, но очень быстро останавливается на сообщениях, которое выводит ядро на этапе обнаружения USB.

Не могу понять куда копать, на каком этапе я не прав? Произошла загрузка squashfs в память или нет?

Спасибо.

Загрузка squashfs вызывается из initrd.img, в нём же можно и скрипт посмотреть. Grub.cfg можно посмотреть в официальном лайве. filesystem.squashfs можно хоть по http шгрузить опцией fetch= (или webfetch, не помню)

alt-tab-let ★★★
()

на каком этапе я не прав?

На этапе решения изобрести свой велосипед.

Произошла загрузка squashfs в память или нет?

Нет.

boot=liveOS

Это не просто набор букв «от балды». ‘live’ - это в дебиан подсистема работы режиме ‘live’. Ты написал собственную подсистему?..

в каком месте конфигурационного файла grub.cfg идёт указание на файл squashfs.

В общем случае, может и не указываться. Подсистема ‘live’ занимается поиском и загрузкой требующихся компонентов, в частности squashfs. «Живая система» необязательно именно squashfs. Это может быть каталог. Каталог проще и быстрей модифицировать, чем squashfs. По приведённой тобой ссылке, в качестве «живой системы» воообще, обычная установленная система.

andytux ★★★★★
()

в каком месте конфигурационного файла grub.cfg идёт указание на файл squashfs.

live-media-path=${src}

Параметр для ‘live’, в котором указан каталог, из которого брать «живую систему». Если параметр не задан, то в недрах подсистемы ‘live’ есть значение по умолчанию. Для Дебиана, это каталог /live в корне раздела. В качестве «живой системы» может быть файл ‘*.squashfs’, каталог ‘*.dir’.

То есть, если в этом параметре ты укажешь ‘/liveOS’, то будет брать «живую систему» этого каталога.

toram=filesystem.squashfs

Это чушь полная. В лучшем случае, хорошо, если ничему не мешает.

andytux ★★★★★
()
Последнее исправление: andytux (всего исправлений: 3)
Ответ на: комментарий от andytux

Поменял в целевой системе:

  • переименовал каталог /liveOS в /live;
  • в grub.cfg убрал всю муть в вызове ядра linux, оставил только параметр boot=live.

В итоге при загрузке система также «зависает» на определении USB-устройств. Ждал до получаса, думал, может быть содержимое squashfs грузится с диска в оперативку - никаких изменений.

ВМ имеет 16 Гигов оперативки (психанул), сквош-файл имеет 2,5 Гига - то есть оперативной памяти хватает. Или нет? При развёртывании он же раскрывается и разархивируется? Но на исходной системе хватает же.

А может быть проблема в том, что я не создаю с целевой системы (второй жёсткий диск на ВМ) загрузочный iso-образ, а просто переставив местами виртуальные жёсткие диски в свойствах ВМ - гружусь с жёсткого диска, а не с iso-образа? Может система «видит», что я хочу её «обмануть» и не грузится?

Из всех тем, которые успел прочитать, понял что:

  • ядро и initrd-образы должны уметь делать то, что от них просят, то есть если мы хотим загружаться из squashfs - то они должны уметь это делать. Может быть в этом причина проблемы (помимо ДНК конечно)?
  • после загрузки ядра и инитрд-образа из grub.cfg - всё управление загрузкой находится внутри инитрд. А дальше моё понимание процесса загрузки заканчивается. Если внутрение процессы инитрд (скрипт init) принимают на себя управление, то как вообще возможна загрузка из squashfs-файла, если он находится вне пределов образа initrd.img?
Ramirezkiv2
() автор топика
Ответ на: комментарий от andytux

Убрал boot=live в вызове команды linux из grub.cfg в итоге загрузка продвинулась дальше, написав, что я не указал root device: «Boot arguments must include root=».

В итоге загрузка остановилась на командной строке initramfs, где мне предложили ввести help.

Не понимаю, должен ли я создавать загрузочный iso-образ, если указываю в grub.cfg boot=live, должен ли я в этом случае указывать параметр root. Сейчас же без указания boot=live при загрузке с жёсткого диска какое значение нужно указывать в параметре root в случае использования squashfs-файла?

Ramirezkiv2
() автор топика
Последнее исправление: Ramirezkiv2 (всего исправлений: 1)
Ответ на: комментарий от Ramirezkiv2

Тебе нужно самому понять, что ты там наколобродил, что откуда хочешь грузить. Потом это внятно объяснить. Я не понял ничего. «Виртуалка в виртуалке» - слишком сложно, чтобы работало. Обманул ты только сам себя.

Предлагаю. Конфиг груба отсюда и описание использовать в качестве отправной точки и учебного пособия.

может быть содержимое squashfs

Что за скваш?.. Стандартный из конкретного исо-образа или самоделка? По умолчанию, проверяется УУИД, «левый скваш» грузить не будет.

При развёртывании он же раскрывается и разархивируется?

Он монтируется. То есть, сам скваш оперативную память не занимает. Её занимают произошедшие изменения.

я не создаю с целевой системы (второй жёсткий диск на ВМ) загрузочный iso-образ…

Ещё и исо-образ. Это совсем другая песня, там другие параметры загрузки. Тут я не понял, чего ты нагородил.

Далее. Загружать «живую систему» умеет только /live/initrd, находящийся в исо-образ ‘live’ (в нём есть подсистема ‘live’). Другие инитрд, в частности инитрд установленной системы, не имеют подсистемы ‘live’ и загружать «живую систему» не умеют.

после загрузки ядра и инитрд-образа из grub.cfg - всё управление загрузкой находится внутри инитрд…

Да. Распакуй инитрд и изучай, что, откуда и как.

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

я не указал root device: «Boot arguments must include root=».

Это загрузка обычной установленной системы. Никаких скваш или исо она грузить не умеет.

Ещё раз. берёшь конфиг груба по ссылке и учишься загружать стандартный исо-образ дебиана и из «набора файлов».

Ты пытаешься вскочить на гоночный мотоцикл, не освоив детский самокат.

andytux ★★★★★
()
Последнее исправление: andytux (всего исправлений: 1)
Ответ на: комментарий от andytux

Тебе нужно самому понять, что ты там наколобродил, что откуда хочешь грузить. Потом это внятно объяснить. Я не понял ничего. «Виртуалка в виртуалке»

Я создал ВМ и установил в ней на первый HDD - ОС Debian 13. Потом воспользовавшись вот этой темой: Скопировать систему с жесткого диска в SquashFS образ и закинуть его на флешку. Что я делаю не так? - воспроизвёл действия с использованием второго виртуального HDD в ВМ. Никакой «виртуалки в виртуалке».

Что за скваш?.. Стандартный из конкретного исо-образа или самоделка?

Нет, не из конкретного образа, а самодельный, из установленной на виртуальный HDD в ВМ Debian 13 с помощью команды mksquashfs из ссылки по статье.

Ещё и исо-образ. Это совсем другая песня, там другие параметры загрузки. Тут я не понял, чего ты нагородил.

Это моя цель - в конечном итоге имея исходную установленную систему с Debian 13 получить из неё загрузочный iso-образ. Я знаю, что в статье про iso и речи не шло, но я умею создавать загрузочные iso-образы из файлов на дисках.

Далее. Загружать «живую систему» умеет только /live/initrd, находящийся в исо-образ ‘live’ (в нём есть подсистема ‘live’). Другие инитрд, в частности инитрд установленной системы, не имеют подсистемы ‘live’ и загружать «живую систему» не умеют.

Понял, а можно ли узнать, каким образом я мог бы получать initrd, которые умеют в live, имея на руках установленный Debian?

Это загрузка обычной установленной системы. Никаких скваш или исо она грузить не умеет.

Понял, спасибо.

Ещё раз. берёшь конфиг груба по ссылке и учишься загружать стандартный исо-образ дебиана и из «набора файлов».

Я смотрел этот конфиг, но мне кажется, что он мне не очень подходит. Цель конфига из вашей ссылки - получить многозагрузчик, который использует множество готовых iso-образов. Моя же цель - своими руками самому научиться создавать загрузочные iso-образы, имея установленную ОС Debian.

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

каким образом я мог бы получать initrd, которые умеют в live

Взять из live исо-образа, из которого ты устанавливал этот Дебиан.

а самодельный, из установленной на виртуальный HDD

Параметр ядра ‘ignore_uuid’.

мне кажется, что он мне не очень подходит…

Он работает. А вот твой точно не подходит, хотя я его даже не видел.

Вообще, проитай ту тему хорошенько, раз на восемь.

andytux ★★★★★
()
Последнее исправление: andytux (всего исправлений: 1)
Ответ на: комментарий от andytux

Взять из live исо-образа, из которого ты устанавливал этот Дебиан.

Debian на ВМ я устанавливал не из live iso-образа, а из обычного iso-образа Debian, который не live.

Он работает. А вот твой точно не подходит, хотя я его даже не видел.

Работает, но готовых загрузочных iso-образах, подготовленных не мной. Я к нему обязательно вернусь, как только захочу получить мультизагрузочник из нескольких iso-образов.

Спасибо большое за советы и за потраченное на мою проблему время.

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

который не live…

Этим всё сказано. Вообще, с live в Дебиане мутновато. Та тема с этого и началась, что Дебиан сам себя не видит. Читай тему, где брать правильный live.

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

Скачал live iso-образ Дебиана и залез в его grub.cfg, увидел в самом верху следующее:

linux	/live/vmlinuz-6.12.63+deb13-amd64 boot=live components quiet splash findiso=${iso_path}

Не пойму, где определяется переменная iso_path и какое у неё значение?

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

Между делом. Скачал исо-образ debian 13. Обратил внимание, два ядра, размер одинаковый. Разные имена: просто vmlinuz и чудное, как в твоём примере. Попробовал загрузиться из исо-образа по технике ‘loopback-bootable’. Система загрузилась, пробовал с обоими ядрами.

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

Исо, исо… А зачем он вообще нужен, этот исо, только лишние сложности при создании и эксплуатации.

Из исо-образа debian mate в каталог скопировал ядро, инитрд, скваш. Добавил в этот каталог ещё один скваш. Загрузил систему из этого «набора файлов». Дебиан загрузился, автозапустился mc, применились настройки оформления, всё это было в добавленном скваше. Получилось примерно как здесь, добавочный скваш тот-же самый. То есть, работает многослойность, смонтирует все скваши, которые есть в каталоге live.

andytux ★★★★★
()
Последнее исправление: andytux (всего исправлений: 1)
Ответ на: комментарий от Ramirezkiv2
linux	/live/vmlinuz-6.12.63+deb13-amd64 boot=live components quiet splash findiso=${iso_path}

Не пойму, где определяется переменная iso_path и какое у неё значение?

А сверху по коду нет? Обычно я вручную задаю эту переменную или явно или методом поиска. Вот пример

AZJIO
()