Usermode-fs-tools
Пакет usermode-fs-tools предоставляет утилиты для работы с файловыми системами в режиме обычного пользователя, т.е. не требуется получения прав root чтобы создавать загрузочные образы дисков и распаковывать их содержимое. Данный набор утилит позволяет работать с образами файловых систем ext2/3/4 и vfat, как с обычными архивами, форматировать, подбирать нужный размер, дополнять их файлами, заполнять /dev, назначать любые права и владельцев, устанавливать системный загрузчик.
Краткий обзор инструментов
- grub2dirs: выполняет grub-install в несколько каталогов в режиме обычного пользователя.
- dir2extfs: упаковывает содержимое каталога в образ файловой системы extfs.
- dir2vfat: упаковывает содержимое каталога в образ файловой системы vfat.
- dev2extfs: заполняет /dev узлами устройств в существующем образе extfs.
- parts2img: объединяет образы разделов в единый образ диска.
- img2parts: разделяет образ диска на образы отдельных разделов.
- iso2stick: перепаковывает официальные образы ALT ISO-9660 в образы USB-дисков.
- extfsinfo: выводит информацию об образе файловой системы extfs.
- extfs2dir: распаковывает содержимое файловой системы extfs в каталог.
- vfat2dir: распаковывает содержимое файловой системы vfat в каталог.
Поддерживаемые целевые архитектуры и возможности
Упаковка и распаковка образов дисков extfs и vfat реализована на SHELL-скриптах с использованием coreutils, util-linux, e2fsprogs, mtools и dosfstools, таким образом поддерживается на всех архитектурах, используемых в ОС Альт. Установка загрузчика GRUB в режиме обычного пользователя возможна на всех архитектурах, для которых в ОС Альт собирается GRUB, и даже чуть больше (добавлена поддержка 32-бит ARM). Загрузочные образы дисков можно также создавать для e2k, e2kv4, e2kv5 и ppc64le.
На 64-бит платформах Intel возможна установка подписанного загрузчика для поддержки SecureBoot в режиме загрузки UEFI. В версии для p9 и Сизифа (но не на p8 и ниже) SecureBoot может поддерживаться также на 32-бит платформах Intel (i386-efi). Допускается разметка образов дисков с использованием схем разметки DOS/MBR и GUID/GPT. Для работы с образами дисков и разделов, помимо grub-efi, grub-pc и сопутствующих пакетов, также используются утилиты dd, fdisk и sfdisk.
Средства и особенности реализации
В современных версиях mke2fs появилась опция -d <каталог>, позволяющая заполнить образ форматируемой файловой системы из указанного каталога. Для ранних версий и для распаковки используется утилита debugfs, работающая через libe2fs со структурами на диске без обращения к ядру ОС. dir2extfs во многом повторяет семантику mke2fs, поддерживает большую часть передаваемых ей опций, а также реализует механизм максимального уменьшения образа (resize2fs) и резервирования заданного пространства. dir2vfat реализует схожее поведение по аналогии, при этом являясь надстройкой над mkfs.fat, во многом повторяя её семантику.
Установка загрузчика GRUB в режиме UEFI тривиальна, поскольку это просто копирование файлов в нужные каталоги. Для поддержки Power PReP раздела (SLOF-загрузка) grub-ieee1275 умеет создавать соответствующий powerpc.elf и другие необходимые файлы. На e2k/e2kv4/e2kv5 GRUB не ставится, там достаточно создать отдельный раздел /boot (ext2) и поместить в него boot.conf с нужным содержимым. GRUB stage0 (boot.img) на Intel/PC помещается в первый сектор образа диска, GRUB stage1.5 (core.img) -- в следующие сектора при DOS/MBR-разметке или в раздел BIOS Boot при GUID/GPT-разметке. При этом адреса нужных секторов корректируются прямо в образе диска.
Обычный вызов grub-install под пользователем root выполняет множество действий, вызывает несколько программ и требует прямой доступ к дискам и разделам. Настоящий набор скриптов тоже разделяет установку загрузчика на две логические части. Сначала скриптом grub2dirs и вызываемым им grub-mkimage создаются все необходимые файлы в отдельных подкаталогах. Затем, когда отдельные образы разделов полностью подготовлены и сконвертированы в соответствующие *.img файлы, они объединяются в единый образ диска скриптом parts2img. На данном этапе выполняется заключительная часть встраивания различных стадий загрузчика, в том числе, с использованием ранее созданных файлов.
Установка grub-efi в режиме обычного пользователя схожа с запуском grub-install --removable ..., а установка grub-pc в режиме обычного пользователя аналогична запуску grub-install --no-rs-codes ..., т.е. код Рида-Соломона в core.img не встраивается, хотя по умолчанию grub-bios-setup это делает.
Практика использования
Нет способа лучше понять инструмент, чем на конкретном примере его использования. В состав каждой утилиты входит встроенная помощь, её можно получить, запустив скрипт с опцией --help. Здесь и далее я буду использовать длинные названия опций для лучшего понимания.
Сначала вездесущий Intel
Возьмём за основу свежий ISO-образ ALT Rescue и создадим из него руками деплойный USB-stick. Для этого нам потребуется:
1) Создать временный/рабочий каталог и перейти в него. Все файлы из него потом можно будет удалить. Места в нём должно быть достаточно для создания, по меньшей мере, двух образов.
$ cd ~/path/to/workdir/
2) Сгенерировать UUID будущего корневого (системного) раздела флэшки и сохранить его куда-нибудь.
$ read uuid < /proc/sys/kernel/random/uuid $ echo $uuid 56d838b1-ace9-45fc-ad10-50c89fd75356
3) Подготовить файлы GRUB для загрузки в режимах UEFI и Legacy BIOS:
$ grub2dirs --quiet --dual-boot --secure-boot --uuid=$uuid $ ls -1 efi-part sys-part i386-efi-core.efi i386-pc-boot.img i386-pc-core.img x86_64-efi-core.efi
В результате в текущем каталоге будут созданы подкаталоги: efi-part с файлами будущего образа EFI, sys-part с файлами будущего образа корневого раздела и ещё несколько файлов, которые потребуются на заключительной стадии встраивания загрузчика в финальный образ диска. С указанными параметрами (по умолчанию) мы готовимся к созданию образа диска с разметкой DOS/MBR. Если же требуется разметка GUID/GPT, следует добавить опцию --guid-gpt.
Опция --secure-boot предписывает по возможности использовать для UEFI-загрузки подписанный ALT Shim'ом GRUB, что аналогично запуску grub-install --uefi-secure-boot ... или без параметров. Опция --dual-boot предписывает на 64-бит архитектурах добавлять UEFI-загрузчик и для 32-бит платформ, т.е. мы будем ставить цели x86_64-efi и i386-efi одновременно. Для 32-бит цели ALT Shim также используется, при его наличии.
4) Вытащить из ISO-образа ALT Rescue ядро, initrd, squashfs стадии rescue и расположить их в определённых местах будущей корневой системы.
Обратите внимание, что в зависимости от сборки ядро с initrd могут называться по-разному и находиться в разных местах. Обычно их следует искать в /boot, в /EFI/BOOT или в /syslinux/alt0, названия могут иметь суффикс в виде версии, initrd обычно называется либо initrd.img, либо full.cz (на старых дисках). Для нашего примера существенное значение имеет имя, под которым мы это сохраняем при копировании.
$ cp -Lf /media/ALT-Rescue/rescue sys-part/ $ cp -Lf /media/ALT-Rescue/boot/vmlinuz sys-part/boot/vmlinuz $ cp -Lf /media/ALT-Rescue/boot/initrd.img sys-part/boot/full.cz
5) Подсчитать размер RAM-диска для размещения стадии rescue и запомнить его где-то.
$ ramsize=$((4 * $(du -lsB4k sys-part/rescue |cut -f1) + 1)) $ echo $ramsize 471949
6) Создать простую конфигурацию загрузчика, вставив в него полученные ранее значения $uuid и $ramsize.
$ cat > sys-part/boot/grub/grub.cfg <<EOF insmod part_msdos insmod part_gpt insmod ext2 insmod gzio if keystatus --shift; then set timeout=-1 else set timeout=60 fi menuentry 'Rescue Deploy (dangerous for you data!)' --class gnu-linux --class gnu --class os --unrestricted { search --no-floppy --fs-uuid --set=root $uuid echo 'Loading Linux kernel...' linux /boot/vmlinuz initrd=/boot/full.cz fastboot live root=bootchain bootchain=fg,altboot automatic=method:disk,uuid:$uuid ramdisk_size=$ramsize stagename=rescue splash=0 showopts quiet autorun=method:disk echo 'Loading initial RAM-disk...' initrd /boot/full.cz } EOF
7) Создать скрипт автоматического запуска, он будет стартовать при загрузке на первой консоли.
$ cat > sys-part/autorun <<EOF #!/bin/sh -efu echo; echo echo "ALT Deploy TEST-PROGRAM started..." echo; echo exec /bin/bash -i EOF $ chmod +x sys-part/autorun
Ничто не мешает добавить сюда же и другие файлы, по необходимости.
8) Создать образ корневого (системного) раздела будущей флэшки: SYS.img.
$ dir2extfs --quiet -L alt-autorun -U $uuid sys-part SYS.img $ rm -rf sys-part
9) Создать образ EFI-раздела будущей флэшки: EFI.img.
$ dir2vfat --quiet --pad-space -n STICK-ESP efi-part EFI.img $ rm -rf efi-part
10) Объединить все ранее созданные файлы и образы разделов в единый образ загрузочного диска.
$ parts2img --quiet /tmp/MBR.img
Оставшиеся файлы в текущем каталоге можно удалить, а полученный образ /tmp/MBR.img записать на флэшку командой dd. Опция --guid-gpt, если задавалась на шаге 3, должна задаваться и на этом.
Закрепление пройденного
Теперь ещё раз всё вместе, исключая ручное создание и копирование файлов, сначала для DOS/MBR-разметки:
grub2dirs -qds -U $uuid dir2extfs -q -L alt-autorun -U $uuid sys-part SYS.img dir2vfat -q -P -n STICK-ESP efi-part EFI.img rm -rf efi-part sys-part parts2img -q /tmp/MBR.img
И то же самое для разметки GUID/GPT:
grub2dirs -qgds -U $uuid dir2extfs -q -L alt-autorun -U $uuid sys-part SYS.img dir2vfat -q -P -n STICK-ESP efi-part EFI.img rm -rf efi-part sys-part parts2img -qg /tmp/GPT.img
В результате мы получим образ загрузочной флэшки, на первой консоли которой будет стартовать наш скрипт. Загрузка в данном случае поддерживается в режиме UEFI с включенным SecureBoot, без SecureBoot, на 64-bit и 32-bit UEFI-firmware, а также в режиме Legacy BIOS (i386-pc). Спрашивается: зачем это надо, если исходная ALT Rescue и так всё это умеет "из коробки"? Ответ прост: мы добавили автоматику, можем добавить нужные нам файлы в образ, убрать "лишнее", а ещё мы заменили загрузчики isolinux и refind+elilo+grub32 на GRUB, "оторвав графику", а могли бы "оторвать" не нужные варианты загрузки, например, сделав образ только для Legacy/BIOS-загрузки или только для UEFI-загрузки без поддержки SecureBoot. Начиная с версии 1.1-alt1 всё перечисленное можно выполнить одной командой -- см. описание #iso2stick.
Возвращаем всё обратно
Начинаем с "чистого листа". Всё, что нам потребуется -- ранее созданный образ.
$ cd ~/path/to/workdir/ $ rm -f * $ ls -l /tmp/MBR.img -rw-r--r-- 1 klark klark 575668224 окт 15 15:32 /tmp/MBR.img
Посмотрим на полученный образ диска:
$ img2parts --list /tmp/MBR.img part1 3M EFI part2 545M EXTFS
Видим два раздела -- 3M EFI и 545M extfs. Посмотрим внимательней:
$ img2parts --info /tmp/MBR.img Disk /tmp/MBR.img: 549 MiB, 575668224 bytes, 1124352 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x13d1090d Name: part1-fat.img Start: 2048 End: 8191 Sectors: 6144 Cylinders: 1 Size: 3M Id: ef Type: EFI (FAT-12/16/32) Start-C/H/S: 0/32/33 End-C/H/S: 0/130/2 Name: part2-ext.img Boot: * Start: 8192 End: 1124351 Sectors: 1116160 Cylinders: 70 Size: 545M Id: 83 Type: Linux Start-C/H/S: 0/130/3 End-C/H/S: 69/251/54 Attrs: 80
Теперь распакуем всё доступное содержимое:
$ img2parts /tmp/MBR.img Extracting 'part1-fat.img'... Extracting 'part2-ext.img'... $ ls -1 part1-fat.img part2-ext.img
Посмотрим ещё внимательней на раздел extfs:
$ extfsinfo part2-ext.img fstype: ext2 label: alt-autorun uuid: 56d838b1-ace9-45fc-ad10-50c89fd75356 imgsz: 545 MiB blksz: 4096 bytes alloc: 544 MiB free: 0 MiB rsrvd: 0 MiB usage: 100 %
Распакуем раздел vfat:
$ mkdir efi-part $ vfat2dir -s efi-part part1-fat.img Copying ::/ Copying ::/EFI Copying ::/EFI/enroll Copying ::/EFI/enroll/altlinux.cer Copying ::/EFI/BOOT Copying ::/EFI/BOOT/BOOTX64.EFI Copying ::/EFI/BOOT/grubx64.efi Copying ::/EFI/BOOT/BOOTIA32.EFI Copying ::/EFI/BOOT/grub.cfg Copying ::/.pad $ rm -f part1-fat.img
Распакуем раздел extfs:
$ mkdir sys-part $ extfs2dir -q part2-ext.img sys-part $ rm -f part2-ext.img
Работа с образами дисков GUID/GPT полностью аналогична:
$ img2parts --list /tmp/GPT.img part1 3M EFI part2 1M SKIP part3 546M EXTFS $ img2parts --info /tmp/GPT.img Disk /tmp/GPT.img: 551 MiB, 577765376 bytes, 1128448 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 56D7DD51-4C6E-4782-BE5D-97178338A097 Name: part1-fat.img Start: 2048 End: 8191 Sectors: 6144 Size: 3M Type: EFI System Type-UUID: C12A7328-F81F-11D2-BA4B-00A0C93EC93B UUID: 96F1D5BE-5836-4479-A00F-E848CE314BE9 Name: part3-ext.img Start: 10240 End: 1128414 Sectors: 1118175 Size: 546M Type: Linux filesystem Type-UUID: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 UUID: 9C623A02-C913-4D5F-8A26-0FB43B7A35E4 Attrs: LegacyBIOSBootable
Эльбрус e2k/e2kv4/e2kv5
На e2k/e2kv4/ekv5 GRUB не ставится, соответственно, скрипт grub2dirs не используется. Нужно подготовить раздел ext2, который будет монтироваться как /boot, сложить туда ядро, initrd и файл boot.conf примерно такого содержания:
$ cd ~/path/to/workdir/ $ mkdir -p e2k-part/alt0 $ cp -Lf .../vmlinuz e2k-part/alt0/vmlinux.0 $ cp -Lf .../full.cz e2k-part/alt0/full.cz $ cat > e2k-part/boot.conf <<EOF default=rescue timeout=60 label=rescue partition=0 image=/alt0/vmlinux.0 cmdline=console=ttyS0,115200 console=tty0 hardreset fastboot live root=bootchain bootchain=fg,altboot automatic=method:disk,uuid:$uuid stagename=rescue initrd=/alt0/full.cz label=deploy partition=0 image=/alt0/vmlinux.0 cmdline=console=ttyS0,115200 console=tty0 hardreset fastboot live lowmem root=bootchain bootchain=fg,altboot automatic=method:disk,uuid:$uuid stagename=rescue autorun=method:disk initrd=/alt0/full.cz EOF $ dir2extfs --quiet -L E2K-BOOT e2k-part E2K.img $ rm -rf e2k-part
Обратите внимание: полученный образ должен называться E2K.img, на это имя ориентируется скрипт parts2img. Предупреждение: на практике ещё не проверялось, требуется помощь и железо.
aarch64 и armh
Для ARM64 есть поддержка загрузки UEFI без SecureBoot (цель arm64-efi). В апстримном grub-efi также поддерживается цель arm-efi, но в Альте grub-efi собран пока без неё. Так что ставить можно с --dual-boot на aarch64, равно как и ставить просто на armh только после пересборки grub-efi с включением этой поддержки. Ставить на aarch64 при наличии grub-efi без --dual-boot безусловно можно и сейчас. Предупреждение: на практике ещё не проверялось, требуется помощь и железо.
Power SLOF: ppc64le
Для данной архитектуры создаётся отдельный загрузочный раздел Power PReP определённого типа, в него помещается powerpc.elf, на системный диск также помещаются определённые файлы. Перечисленное выполняется парой скриптов grub2dirs и parts2img автоматически. Предупреждение: на практике ещё не проверялось, требуется помощь и железо.
Формальное описание
grub2dirs
$ grub2dirs -h Usage: grub2dirs.sh [<options>...] [--] [<partsdir>] Options: -b, --bios-only Make BIOS-only boottable system on x86. -d, --dual-boot Add both 32-bit and 64-bit UEFI firmware boot loaders for 64-bit target system, such as x86_64 or aarch64. -f, --foreign=<PATH> Use alternate root path for search required source files. -g, --guid-gpt Use GUID/GPT disk label instead BIOS/MBR. -l, --libdir=<PATH> Use images and modules under specified grub directory <PATH> (default is "/usr/lib64/grub"). -m, --module=<NAME> Pre-load specified grub module. This option can set many times. -n, --no-rootfs Do not use 'sys-part' sub-directory. -q, --quiet Suppress additional diagnostic. -S, --swap-part Add SWAP partition before ROOT. -s, --secure-boot Use ALT shim's for UEFI Secure Boot. -t, --target=<ARCH> Use specified target architecture: i586, x86_64, aarch64, armh, ppc64le or e2k/v4/v5. -u, --uefi-only Make UEFI-only boottable system on x86. -U, --uuid=<UUID> UUID of the ROOT filesystem. -v, --version Show this program version and exit. -h, --help Show this help message and exit. Please, report bugs to https://bugzilla.altlinux.org/
Идеологически запуск данного скрипта эквивалентен той части grub-install, которая отвечает за подготовку и размещение файлов в определённых каталогах. Поскольку для финального загрузочного диска важна разметка, этот скрипт всегда используется в паре с parts2img с учётом соответствующих опций. Так, если grub2dirs вызывался с опцией --guid-gpt, parts2img должен вызываться с этой же опцией. То же относится и к опции --no-rootfs. Если grub2dirs вызывался с опцией --swap-part, parts2img должен вызываться с опцией --swap=<SIZE> либо в файле SWP.img следует предварительно подготовить образ SWAP-раздела.
Обратите внимание: начиная с версии 1.1-alt1 параметр '-r' (--root) устарел. Вместо него следует использовать '-U' (--uuid). Начиная с этой версии также появилась возможность указывать альтернативный корень "для других архитектур", что позволяет заранее распаковать необходимые RPM'ки с установочного носителя во временный каталог и указать к нему путь через '-f' (--foreign). Начиная с версии 1.3-alt1 появился параметр '-n' (--no-rootfs), используемый совместно с режимом загрузки UEFI на x86_64 и aarch64. Он позволяет разместить все файлы на единственном разделе ESP, отказавшись от создания системного раздела extfs.
dir2extfs
$ dir2extfs -h Usage: dir2extfs.sh [<options>...] [--] [<srcdir>] <image> [<size>] mke2fs pass through options (not used in append mode): -C <number> Specify the size of cluster, in bytes. -f <number> Specify the size of fragment, in bytes. -G <number> Specify the number of block groups. -g <number> Specify the number of blocks in a block group. -I <number> Specify the size of each inode, in bytes. -i <number> Specify the bytes/inode ratio. -L <label> Specify the filesystem volume label. -m <number> Specify the percentage of the filesystem blocks, reserved for the super-user. The default percentage is 5%. -N <number> Overrides the default calculation of the number of inodes that should be reserved for the filesystem. -o <creator-os> Overrides the default value of the "creator operating system" field. -T <usage-type...> Specify one or more usage types, using a comma separated list and /etc/mke2fs.conf. -U <UUID> Specify the filesystem volume UUID. See man 8 mke2fs for more details. Common options: -a, --append Add files to an existing extfs image file, mke2fs options can't be used in append mode. -d <filename> Specify devices table for populate /dev nodes. -e, --exclude <path> Specify path to exclude from image. -M, --mindev Populate minimalistic /dev nodes. -n, --no-clean Keep temporary files on exit. -q, --quiet Suppress additional diagnostic. -r <number> Reserve specified free space, in MiB. -t <fstype> Specify the filesystem type (ext2, ext3, ext4 or ext4new - last is alias for ext4 with some additional features). -v, --version Show this program version and exit. -h, --help Show this help message and exit. Please, report bugs to https://bugzilla.altlinux.org/
Без опции --append вызов данного скрипта схож с созданием файловой системы через mkfs.ext2, при этом большинство опций поддерживается и передаётся прямо в mke2fs. Опция --append позволяет добавить файлы к уже существующему образу extfs. Чтобы файлы в образ попадали сразу с нужными владельцами и правами, запуск должен производиться в хэшере под пользователем rooter, а версия mke2fs должна быть не менее 1.44 (p9, p10 и Сизиф).
Опции -d <filename> и --mindev позволяют добавить в образ каталог /dev с соответствующим содержимым, что может быть полезно для реальной корневой Linux-системы, но не только. Те же опции обеспечивают создание всевозможных PIPE/FIFO-файлов, симлинков, задание альтернативных прав доступа к файлам, задание владельцев, отличных от root. Подробнее см. скрипт dev2extfs.
Поддерживается создание файловых систем ext2, ext3, ext4 и ext4new. Последняя требует отдельного пояснения. mke2fs до версии 1.43 создавала ext4 с одними возможностями, но начиная с версии 1.43, дефолты e2fsprogs поменялись таким образом, что файловая система ext4 по умолчанию создаётся с дополнительными фичами: 64bit и metadata_csum, поддержка которых появилась в новых ядрах. Для создания дистрибутивных образов такая неоднозначность неудобна и чтобы её избежать, было добавлено определение файловой системы ext4new для тех случаев, когда явно требуется создание ext4 с двумя указанными фичами. Разумеется, создать ext4new на p8 не получится.
Можно создавать образы указанного в MiB размера -- главное, чтобы хватило места для размещения в нём всех файлов. Также можно указывать в MiB резервируемое свободное место для обычного пользователя. Если не указывать ничего из перечисленного, свободное место в образе будет стремиться к нулю, так задумано.
Обратите внимание: начиная с версии 1.3-alt1 добавлена опция -e (--exclude), позволяющая указать путь, который не следует включать в образ. Чтобы исключить несколько путей опция может указываться многократно.
dir2vfat
$ dir2vfat -h Usage: dir2vfat [<options>...] [--] [<srcdir>] <image> [<size>] mkfs.fat pass through options (not used in append mode): -A Use Atari variation of the MS-DOS filesystem. -b <backup-sector> Location of the backup boot sector for FAT32. -D <drive-number> Specify the BIOS drive number. -F <FAT-size> Select the FAT type used (12, 16 or 32 bit). -f <number-of-FATs> Specify the number of file allocation tables. -H <hidden-sectors> Select the number of hidden sectors in the volume. -i <volume-id> Sets the volume ID of the newly created filesystem. -M <FAT-media-type> Media type to be stored in the FAT boot sector. -m <message-file> Sets the message the user receives on attempts to boot this filesystem without having properly installed an operating system. -n <volume-name> Sets the volume name (label) of the filesystem. -R <reserved-sects> Select the number of reserved sectors. -r <root-entries> Select the number of entries available in the root directory. -S <log-sect-size> Specify the number of bytes per logical sector. -s <sects-per-clust> Specify the number of disk sectors per cluster. --invariant Use constants for normally randomly generated or time based data such as volume ID and creation time. See man 8 mkfs.fat for more details. Common options: -a, --append Add files to an existing VFAT image file, mkfs.fat options can't be used in append mode. -p <reserved-space> Reserve specified free space, in MiB. -P, --pad-space Fill all free space by zero's. -q, --quiet Suppress additional diagnostic. -v, --version Show this program version and exit. -h, --help Show this help message and exit. Please, report bugs to https://bugzilla.altlinux.org/
dev2extfs
$ dev2extfs -h Usage: dev2extfs [<options>...] [--] [<device-table>] <image> Options: -m, --minimal Populate minimalistic /dev. -n, --no-clean Keep temporary files at exit. -v, --version Show this program version and exit. -h, --help Show this help message and exit. Device table format and examples: <node> <type> <major> <minor> <mode> <uid> <gid> /dev d - - - - - /dev/mem c 1 1 640 0 0 /dev/tty c 5 0 666 0 5 /dev/nvme0n1 b 259 1 660 0 6 /dev/initctl p - - - - - /dev/stderr l - - - - /proc/self/fd/2 /etc/shadow f - - 600 0 0 /usr/bin/passwd f - - 2711 0 26 Node types: d Directory, default mode: 0755 f Regular file, default mode: 0644 b Block special device, default mode: 0600 c Character special device, default mode: 0600 p FIFO (named PIPE), default mode: 0600 l Symbolic link, mode no changed Please, report bugs to https://bugzilla.altlinux.org/
parts2img
$ parts2img -h Usage: parts2img.sh [<options>...] [--] [<partsdir>] [<image>] Options: -g, --guid-gpt Use GPT disk label instead MBR. -n, --no-clean Keep temporary files on exit. --no-rootfs Do not use 'sys-part' sub-directory. -q, --quiet Suppress additional diagnostic. -s, --swap=<size> Specify SWAP partition size, in MiB. -v, --version Show this program version and exit. -h, --help Show this help message and exit. Please, report bugs to https://bugzilla.altlinux.org/
Ищет файлы образов разделов и другие в каталоге partsdir (либо текущем, если partsdir не указан), и на их основе создаёт окончательный образ загрузочного диска. Если не указан целевой образ, будет создан файл probe.img в том же каталоге, что исходные файлы. Образы разделов всегда выравниваются по границе 1MiB. Финальная разметка диска создаётся автоматически и зависит от опций --guid-gpt, --swap=<SIZE>, --no-rootfs (начиная с версии 1.3-alt1) и наличия в partsdir файлов с определёнными именами:
- EFI.img -- VFAT образ раздела EFI System Partition.
- i386-pc-boot.img -- содержимое GRUB stage0, встраиваемое в первый сектор образа диска.
- i386-pc-core.img -- содержимое GRUB stage1.5, встраиваемое в раздел BIOS Boot (BIOS Grub Partition) либо сразу за MBR.
- E2K.img -- загрузочный раздел E2K /boot, описанный выше.
- powerpc-ieee1275-powerpc.elf -- предположительно, содержимое загрузочного раздела Power PReP, размером 1-7 MiB.
- SWP.img -- заранее подготовленный с особыми параметрами раздел SWAP для полноценной корневой системы.
- SYS.img -- корневой (системный) раздел Linux, единственный обязательный во всех случаях, если не указана опция --no-rootfs.
- HOME.img -- дополнительный раздел /home с данными пользователя для полноценной корневой системы.
Сразу после создания финального образа диска, исходные файлы удаляются. Можно указать --no-clean для изменения этого поведения.
img2parts
$ img2parts -h Usage: img2parts [<options>] [--] <image> [<part-no>...] Options: -c, --check Check only for valid disk image. -i, --info Show partition(s) information. -l, --list List all partitions and exit. -o, --output=<path> Specify directory for save files. -v, --version Show this program version only. -h, --help Show this help message and exit. Please, report bugs to https://bugzilla.altlinux.org/
iso2stick
$ iso2stick -h Usage: iso2stick [<options>...] [--] <iso9660> <image> [<size>] Options: -B, --keep-boot Use existings /boot directory. -b, --bios-only Make BIOS-only boottable system on x86. -D, --datadir=<PATH> Add specified files to the boot disk. -d, --dual-boot Add both 32-bit and 64-bit UEFI firmware boot loaders for 64-bit target system, such as x86_64 or aarch64. -e, --excludes=<FILE> Set list for exclude files from ISO-9660. -f, --files=<FILE> Set list for include files from ISO-9660. -G, --keep-grub Use existings /boot/grub/grub.cfg config. -g, --guid-gpt Use GUID/GPT disk label instead BIOS/MBR. -m, --mode=<MODE> One of the followed repack modes: rescue, deploy, install, live, install+rescue, install+live or install+live+rescue. -L, --lang=<LIST> List of the languages, for example: '"ru_RU=Russian" "en_US=English"'. -l, --initlang=<CODE> Initial/default language code ('ru_RU' used by default). -n, --no-clean Keep temporary files on exit. -P, --pad-space Fill free space on EFI-part by zero's. -q, --quiet Suppress additional diagnostic. -r, --reserved=<SIZE> Reserved space on the boot disk, in MiB. -S, --swap=<SIZE> Specify SWAP partition size, in MiB. -s, --secure-boot Use ALT shim's for UEFI Secure Boot. -T, --timeout=<SECS> Specify boot menu timeout, in seconds. -t, --target=<ARCH> Use specified target architecture: i586, x86_64, aarch64, armh, ppc64le or e2k/v4/v5. -U, --uuid=<UUID> Specify UUID of the ROOT filesystem. -u, --uefi-only Make UEFI-only boottable system on x86. -v, --version Show this program version and exit. -h, --help Show this help message and exit. Please, report bugs to https://bugzilla.altlinux.org/
Достаточно мощный конвертер, у которого много разных возможностей. Подробно описан на отдельной странице.
extfsinfo
$ extfsinfo -h Usage: extfsinfo [<option>] [--] {<image>|<device>} Options: -a, --allocated Show allocated space only, in MiB. -b, --blksize Show block size only, in bytes. -c, --check Check only for extfs filesystem. -f, --free Show free space only, in MiB. -i, --info Show all information about image. -L, --label Show filesystem volume label only. -r, --reserved Show reserved space only, in MiB. -s, --size Show image size only, in MiB. -t, --type Show filesystem type only. -U, --uuid Show filesystem UUID only. -u, --usage Show percent of usage only. -v, --version Show this program version only. -h, --help Show this help message and exit. Please, report bugs to https://bugzilla.altlinux.org/
Позволяет вывести оптом всю информацию о файловой системе extfs либо только одно указанное поле, что может быть полезно в скриптах. Например: LABEL="$(extfsinfo --label -- part3-ext.img)". Также можно использовать для проверки корректности образов файловой системы. Обратите внимание, что при выводе дифференцируется разница между ext4 и ext4new, так что если вторая по смыслу задачи не подходит, значение следует нормализовать:
fstype="$(extfsinfo --type -- part2-ext.img)" [ "$fstype" != "ext4new" ] || fstype="ext4"
extfs2dir
$ extfs2dir -h Usage: extfs2dir [<options>...] [--] <image> [<target>] Options: -q, --quiet Suppress additional diagnostic. -r, --root=<path> Unpack specified directory only. -v, --version Show this program version and exit. -h, --help Show this help message and exit. Please, report bugs to https://bugzilla.altlinux.org/
vfat2dir
$ vfat2dir -h Usage: vfat2dir [<options>...] [--] [<target>] <image> [<files>...] Options: -s, --subdir Recursive copy directories and their contents. -q, --quiet Suppress additional diagnostic. -v, --version Show this program version and exit. -h, --help Show this help message and exit. Please, report bugs to https://bugzilla.altlinux.org/
Под занавес
Настоящий набор скриптов (более 4 тыс. строк) впервые опубликован в репозитории Сизиф 15.10.2020 под свободной лицензией GPL v3+. Первоначальный автор программы: Леонид Кривошеин -- спасибо подвигшим на это mike@ и antohami@. Присоединение к разработке приветствуется!
Enjoy! ;-)