我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 文件系统格式化它?
答案1
您可以通过环回功能访问磁盘映像及其各个分区。您已经发现某些磁盘实用程序可以在磁盘映像上(合理地)愉快地运行。然而,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
要访问您创建的分区,您有多种选择
明确的路线
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
隐式路由
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
答案2
一般来说,还有另一种方法可以做到这一点,使用kpartx
(不是kde相关)
sudo kpartx -a binary.img
现在您应该将所有分区设备定义/dev/mapper
为循环0p1,循环0p2, ...
进而
sudo mkfs.ext4 /dev/mapper/loop0p1
或者,完成后,您也可以运行
sudo kpartx -d binary.img
摆脱loop0p?设备
答案3
我不知道为什么它会寻找
binary.img1
(……后来埋binary.img2
在评论中。)
这是因为这些工具期望文件名遵循特定的模式。该模式是系统上实际光盘和光盘卷的设备文件所使用的模式,即:
- 包含整个光盘的设备文件被命名
sda
(或其他名称)。这就是fdisk
期望利用的。 - 磁盘各个片的设备文件(按其分区进行描述)被命名为
sda1
、sda2
、sda3
等。这就是诸如此类的工具在告诉您执行操作gparted
时期望使用的工具mkfs
单独的光盘卷。
当然,普通文件不会像光盘设备文件那样重叠。您所看到的涉及环回文件系统的讨论都是关于获取单个整盘映像文件,并在写入所需的分区布局后使用环回创建反映其中各个切片的1
、2
、3
等文件到分区表。
答案4
虽然这个主题没有直接相关,但它提到了很多相同和相关的信息。
Debian 维基 | Raspberry Pi 和 qemu-user-static
如果您无法使用apt
安装本文中提到的某些命令,请尝试使用apt-cache search [package_name]
。如果命令来自不同名称的包,则可能不会出现任何结果。
例如,以前可以使用 usinglosetup
安装,但现在它是Ubuntu 存储库的一部分。要找出哪个包充当另一个包的容器,您必须使用搜索 Linux 发行版的在线存储库的方法。或者,如果您必须从其他来源安装它,请使用 Web 搜索引擎。losetup
apt install losetup
util-linux
一些值得一看的包...
util-linux genisoimage dosfstools squashfs-tools fsarchiver xfsprogs reiserfsprogs reiser4progs jfsutils ntfsprogs btrfs-tools
每个 Linux 发行版也有自己的在线联机帮助页。有时使用手册页比教程更容易。手册页还将告诉您所有命令选项和参数。教程通常只关注所使用的内容。