从脚本中找不到循环设备的分区,在其他地方可见

从脚本中找不到循环设备的分区,在其他地方可见

我目前正在尝试使用 分区然后格式化磁盘映像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

相关内容