Filesystems

如何格式化img文件內的分區?

  • September 20, 2019

img通過以下命令創建了一個文件:

dd if=/dev/zero bs=2M count=200 > binary.img

它只是一個帶有零的文件,但我可以使用它fdisk並創建一個分區表:

# fdisk binary.img

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x51707f21.

Command (m for help): p
Disk binary.img: 400 MiB, 419430400 bytes, 819200 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: 0x51707f21

比方說,一個分區:

Command (m for help): n
Partition type
  p   primary (0 primary, 0 extended, 4 free)
  e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-819199, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-819199, default 819199): 

Created a new partition 1 of type 'Linux' and of size 399 MiB.

Command (m for help): w
The partition table has been altered.
Syncing disks.

當我檢查分區表時,我得到以下結果:

Command (m for help): p
Disk binary.img: 400 MiB, 419430400 bytes, 819200 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: 0x7f3a8a6a

Device      Boot Start    End Sectors  Size Id Type
binary.img1       2048 819199  817152  399M 83 Linux

所以分區存在。當我嘗試通過 gparted 格式化此分區時,出現以下錯誤:

在此處輸入圖像描述

我不知道它為什麼要查找binary.img1,我也不知道如何從命令 live 格式化分區。

有誰知道如何使用 ext4 文件系統對其進行格式化?

您可以通過環回功能訪問磁碟映像及其各個分區。您已經發現一些磁碟實用程序會(合理地)在磁碟映像上愉快地執行。然而,mkfs不是其中之一(但奇怪mount的是)。

這是來自的輸出fdisk -lu binary.img

Disk binary.img: 400 MiB, 419430400 bytes, 819200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
...

Device           Boot Start    End Sectors  Size Id Type
binary.img1            2048 819199  817152  399M 83 Linux

要訪問您創建的分區,您有幾個選擇

  1. 顯式路由
losetup --offset $((512*2048)) --sizelimit $((512*817152)) --show --find binary.img
/dev/loop0

輸出/dev/loop0是已分配的循環設備的名稱。該--offset參數只是分區的偏移量 ( Start) 乘以扇區大小 ( 512)。而--sizelimit是分區的大小,您可以通過以下方式計​​算它: End-Start+1,即 819199-2048+1=817152 ,該數字還必須乘以扇區大小。

然後,您可以將其/dev/loop0用作對分區的引用:

mkfs -t ext4 -L img1 /dev/loop0
mkdir -p /mnt/img1
mount /dev/loop0 /mnt/img1
...
umount /mnt/img1
losetup -d /dev/loop0
  1. 隱式路線
losetup --partscan --show --find binary.img
/dev/loop0

輸出/dev/loop0是已分配的主迴路設備的名稱。此外,該--partscan選項告訴核心掃描設備以查找分區表並自動分配輔助循環設備。在您的情況下,您還可以獲得一個分區/dev/loop0p1,然後您可以將其用作對該分區的引用:

mkfs -t ext4 -L img1 /dev/loop0p1
mkdir -p /mnt/img1
mount /dev/loop0p1 /mnt/img1
...
umount /mnt/img1
losetup -d /dev/loop0

引用自:https://unix.stackexchange.com/questions/209566