我目前正在尝试使用 分区然后格式化磁盘映像parted
,首先将空白磁盘映像安装到循环上,创建适当的分区,然后使用 格式化这些分区mkfs
,如下所示:
# Create and loop a blank image.
touch disk.img
truncate disk.img --size 6G
disk_loop=$(sudo losetup -Pf disk.img --show)
echo "Loop at $disk_loop."
# Set up partitions.
sudo parted $disk_loop mklabel gpt mkpart primary fat32 4MiB 516MiB mkpart primary ext4 516MiB 6143MiB
之后,我尝试分别使用mkfs.fat
和格式化创建的分区,但是这些都失败了,因为它们无法在或 处mkfs.ext4
找到分区:/dev/loopNp1
/dev/loopNp2
mkfs.fat 4.1 (2017-01-24)
mkfs.fat: unable to open '/dev/loop32p1': No such file or directory
mke2fs 1.45.5 (07-Jan-2020)
The file '/dev/loop32p2' does not exist and no size was specified.
我认为这可能是循环尚未设置这些分区的问题,所以我尝试了以下操作:
partprobe
在格式化之前对设备执行一次partprobe /dev/loopN
。- 做完以上的事情,还要提前睡5-20秒。
- 添加分区
partx -v -a /dev/loopN
,这会抱怨设备或资源正忙。
在睡眠期间,我还打开了另一个控制台窗口并执行了,这表明和ls /dev
处的分区确实已创建并且可见,但是在脚本中睡眠后无法找到它们。我在这里忽略了什么,如何在格式化之前使这些分区可用?/dev/loopNp1
/dev/loopNp2
一些示例脚本输出:
... prior script output, then fdisk -l /dev/loop0 is called ...
Device Start End Sectors Size Type
/dev/loop0p1 8192 1056767 1048576 512M Microsoft basic data
/dev/loop0p2 1056768 12580863 11524096 5.5G Linux filesystem
mkfs.fat 4.1 (2017-01-24)
mkfs.fat: unable to open '/dev/loop0p1': No such file or directory
mke2fs 1.45.5 (07-Jan-2020)
The file '/dev/loop0p2' does not exist and no size was specified.
答案1
请尝试改用qemu-nbd
:
sudo qemu-nbd -c /dev/nbd0 disk.img