Создание img файла
IMG файл - это побайтовый образ диска. Иногда, полезно создать загрузочного live img файл, чтобы протестировать его в qemu или перенести данный образ на несколько флешек.
Также:
- Видеоинструкция установки Ubuntu через IMG файл и создание USB флешки
- Установка Debian 12 и Ubuntu 22.04 через debootstrap
Создание img файла
Создайте img файл размером больше на 2гб чем предполагаемые данные, но при этом размер должен быть меньше чем флешка, на которую будет записан этот образ.
dd if=/dev/zero of=/media/debian/usb.img bs=1M count=8192 conv=fsync status=progress
Синхронизируйте файлы
sync -f
Выполните команду создания GPT разметки для img файла
parted /media/debian/usb.img mklabel gpt
Запустите программу управления дисками
cfdisk /media/debian/usb.img
Создайте primary раздел на весь диск
Size | Type | |
1 | 100M | EFI System |
2 | All space | Linux root (x86-64) |
Выведите на экран результат
fdisk -lu /media/debian/usb.img
Должно вывести
Disk /media/debian/usb.img: 8 GiB, 8589934592 bytes, 16777216 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: EDFCC007-0E71-47D3-B6D7-031EF67843E9
Device Start End Sectors Size Type
/media/debian/usb.img1 2048 206847 204800 100M EFI System
/media/debian/usb.img2 206848 16777182 16570335 7,9G Linux root (x86-64)
Создайте loop устройства
losetup -Pf /media/debian/usb.img
Проверьте к какому loop устройству они подключены
losetup -a
Создайте файловую систему
mkfs.vfat -F32 /dev/loop0p1
mkfs.ext4 -L live_usb /dev/loop0p2
Проверьте файловую систему
fsck -fv /dev/loop0p1
fsck -fv /dev/loop0p2
Проверьте правильно ли создали разметку
parted /media/debian/usb.img print
У меня выдало следующее:
Model: (file)
Disk /media/debian/usb.img: 8590MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 106MB 105MB fat32 boot, esp
2 106MB 8590MB 8484MB ext4
Монтирование img файла образа
Создайте папку и смонтируйте root usb
mkdir -p /media/debian/root
mount /dev/loop0p2 /media/debian/root
Создайте папку для загрузчика
mkdir -p /media/debian/root/boot/efi
mount /dev/loop0p1 /media/debian/root/boot/efi
Смонтируйте системные папки
mkdir -p /media/debian/root/proc
mkdir -p /media/debian/root/sys
mkdir -p /media/debian/root/dev
mount -t proc proc /media/debian/root/proc
mount -t sysfs sys /media/debian/root/sys
mount -o bind /dev /media/debian/root/dev
mount -t devpts none /media/debian/root/dev/pts
Увеличение image файла
Если у вас, в процессе копирования, не хватило места в img файле, то его можно увеличить. Добавляем 1 гб к файлу.
truncate -s +1G /media/debian/usb.img
Проверьте новый размер
fdisk -l /media/debian/usb.img
Если у вас выдает ошибку
GPT PMBR size mismatch (16777215 != 62333951) will be corrected by w(rite).
То ее можно исправить запустив команду:
gdisk /media/debian/usb.img
Выполните последовательно команды x, e, v, w
x - extra functionality (experts only)
e - relocate backup data structures to the end of the disk
v - verify disk
w - write table to disk and exit
Примерно должно получиться следующее:
$ gdisk /media/debian/usb.img
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): x
Expert command (? for help): e
Relocating backup data structures to the end of the disk
Expert command (? for help): v
No problems found. 45558750 free sectors (21.7 GiB) available in 2
segments, the largest of which is 45556736 (21.7 GiB) in size.
Expert command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
После выполнения этих команд таблица должна быт исправлена. Проверьте ее командой
fdisk -l /media/debian/usb.img
Затем сделайте resize раздела 2 используя cfdisk
cfdisk /media/debian/usb.img
Смонтируйте файл
losetup -Pf /media/debian/usb.img
Сделайте resize ext4
e2fsck -y -f /dev/loop0p2
resize2fs /dev/loop0p2
Также можно проверить целостность boot раздела
fsck -fvy /dev/loop0p1
fsck -fvy /dev/loop0p2
Отмонтируйте loop
losetup -d /dev/loop0