Создание img файла

IMG файл - это побайтовый образ диска. Иногда, полезно создать загрузочного live img файл, чтобы протестировать его в qemu или перенести данный образ на несколько флешек.

Также:

Создание 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