LINUX.ORG.RU

Скопировать систему с жесткого диска в SquashFS образ и закинуть его на флешку. Что я делаю не так?

 ,


0

1

SquashFS

. . .

Ставлю необходимые пакеты:

apt update
apt install squashfs-tools

...

Создаю каталог для монтирования рабочей файловой системы:

mkdir /mnt/root

...

Монтирую рабочую файловую систему в созданный каталог:

mount /dev/sda1 /mnt/root

...

Создаю SquashFS образ файловой системы:

apt install lz4
mksquashfs /mnt/root /tmp/out.squashfs -comp lz4 -noappend -no-fragments

...

После чего размонтирую рабочую файловую систему:

umount /mnt/root

. . .

Загрузочная флешка:

. . .

Узнаю физическое расположение флешки:

lsblk (в моем случае sdb)

...

Форматирую в FAT32:

apt install dosfstools mtools
mkfs.vfat /dev/sdb

...

Иду в /usr/lib/grub/ и смотрю какие каталоги там лежат.

В моем случае только /usr/lib/grub/i386-pc/

...

Устанавливаю GRUB:

grub-install --target=i386-pc --boot-directory=/mnt/flash/boot /dev/sdb

...

Создаю конфигурационный файл GRUB:

grub-mkconfig -o /mnt/flash/boot/grub/grub.cfg

...

Копирую образ SquashFS в корень флешки:

cp /tmp/out.squashfs /mnt/flash/

...

Добавляю в файл конфигурации grub (nano /mnt/flash/boot/grub/grub.cfg - в секцию menuentry) загрузку из образа:

linux /out.squashfs
function gfxmode {
	set gfxpayload="${1}"
}
set linux_gfx_mode=
export linux_gfx_mode
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-9322dd9e-2a03-469a-8c4d-64c840ae1edb' {
	load_video
	insmod gzio
	if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
	insmod part_msdos
	insmod ext2
	set root='hd0,msdos1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  9322dd9e-2a03-469a-8c4d-64c840ae1edb
	else
	  search --no-floppy --fs-uuid --set=root 9322dd9e-2a03-469a-8c4d-64c840ae1edb
	fi
	linux /out.squashfs
	echo	'Loading Linux 5.10.0-20-amd64 ...'
	linux	/boot/vmlinuz-5.10.0-20-amd64 root=UUID=9322dd9e-2a03-469a-8c4d-64c840ae1edb ro  quiet
	echo	'Loading initial ramdisk ...'
	initrd	/boot/initrd.img-5.10.0-20-amd64
}

...

Копирую файлы vmlinuz-5.10.0-20-amd64 и initrd.img-5.10.0-20-amd64 из директории /boot в директорию /mnt/flash/boot на флешке.

cp /boot/vmlinuz-5.10.0-20-amd64 /mnt/flash/boot/
cp /boot/initrd.img-5.10.0-20-amd64 /mnt/flash/boot/

...

Размонтирую флешку:

umount /mnt/flash

...

Файлы на флешке:

root@debian:/mnt/flash# find ./ -type f
./boot/initrd.img-5.10.0-20-amd64
./boot/grub/i386-pc/load.cfg
./boot/grub/fonts/unicode.pf2
./boot/grub/grubenv
./boot/grub/grub.cfg
./boot/vmlinuz-5.10.0-20-amd64
./out.squashfs
root@debian:/mnt/flash# 


Последнее исправление: Starover (всего исправлений: 1)

«Но в нем нелепостям нет счета…»

…загрузку из образа

Загрузки из образа здесь как-раз и нет.

Форматирую в FAT32

«UUID=9322dd9e-2a03-469a-8c4d-64c840ae1edb» - а почему УУИД-ы от «ext».

«insmod ext2» - почему модуль не «fat».

Флешка «/dev/sdb», а почему здесь root=‘hd0,msdos1’…

linux /boot/vmlinuz-5.10.0-20-amd64 root=UUID=9322dd9e-2a03-469a-8c4d-64c840ae1edb ro quiet

Как-раз параметр загрузки из образа здесь отсутствует.

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

Сначала все это происходило на гостевой системе, потом на хостовой. И, уже засыпая, скопировал и там и там.

Как-раз параметр загрузки из образа здесь отсутствует.

Спасибо! А вот этого я даже выспавшись бы не заметил. )

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

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

Загрузки из образа здесь как-раз и нет.

Вот чувствую, что в этом предложении тоже что-то существенное. Это про отсутствие параметра загрузки в указанной строке, или там еще моменты?

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

Я тебе уже давал ссылку. В той теме, чуть выше есть ссылка, как сделать в *бунту. Там написано побольше.

Этот вариант загрузки системы я обычно называю загрузкой из «набора файлов». Это свойство данной конкретной системы. Разные системы загружаются по-разному, требуются разные параметры.

Переходим к Дебиан. Подсистема, отвечающая за загрузку «живой системы», в Дебиане называется «live». Обычно это скрипты, находящиеся в инитрд. Эти скрипты есть только в инитрд, находящемся в исо-образе «live». В «netinsall» их может не быть (не знаю точно). В инитрд установленной системы этих скриптов нет, если только ты сам их туда не поместил.

Специальный параметр указывает ядру, где искать «набор файлов». Фрагмент кода:

...
src="${src}/live"; key="ignore_uuid live-media-path=${src} ${key}"
...

src - каталог, где находится «набор файлов», в исо-образе Дебиана обычно «/live», сохраняю структуру, для большей совместимости.

key - все параметры ядра.

«ignore_uuid» - чтобы отключить проверку УУИД-а squash-файла.

«live-media-path» - параметр, указывающий, где находится «набор файлов».

andytux ★★★★★
()