普通文件系统映像可以很容易地安装:

mount system.img /mnt


已检查和修改。但是,当我在Raspberry Pi系统映像(例如raspbian)上尝试此操作时,我得到:

mount: unknown filesystem type '(null)'


无论我对-t尝试什么,它都行不通。如何安装此映像?

评论

MS Windows的并行问题:raspberrypi.stackexchange.com/questions/28457 / ...?

#1 楼

这个问题是对其他问题的回答的一部分,但是在这里应进行规范处理,因此不必重复进行。包含两个分区和一个引导扇区。但是,如果知道各个分区在文件中的偏移量,则可以在映像中装入各个分区。要找到它们,请使用fdisk -l whatever.img将图像作为块设备进行检查。输出应包括这样的表:

Device         Boot     Start       End  Blocks  Id System
whatever.img1            8192    122879   57344   c W95 FAT32 (LBA)
whatever.img2          122880   5785599 2831360  83 Linux


这是两个分区。第一个标记为“ FAT32”,另一个标记为“ Linux”。在此表上方,有关于设备整体的其他信息,包括:

Units: sectors of 1 * 512 = 512 bytes


我们可以通过将单位大小乘以Start块来找到以字节为单位的偏移量分区的编号:


第一分区512 * 8192 = 4194304
第二分区512 * 122880 = 62914560

这些可与offset选项一起使用mount命令的我们还从fdisk了解到每个分区的类型。因此,假设我们有目录/mnt/img/one/mnt/img/two作为挂载点:第一个分区的大小以及偏移量。卸下该分区,然后使用块数(57344)* 512(= 29360128):

mount -v -o offset=4194304 -t vfat whatever.img /mnt/img/one
mount -v -o offset=62914560 -t ext4 whatever.img /mnt/img/two


第二个分区不需要大小限制,因为后面没有任何限制在图像中。

现在可以访问两个分区。如果您不想更改其中的任何内容,请也使用mount(只读)开关。如果您进行了任何更改,则这些更改将包含在-r文件中。

请注意,当系统运行时,第一个分区可能已安装在第二个分区的.img上。

评论


kpartx使您更轻松:kpartx -a what.img使适当的(循环)节点,以后可以随意安装。运行kpartx -d what.img删除(卸载的)循环节点。

–user29510
15/12/28在11:39



相似:stackoverflow.com/a/1421075/544721

– Grzegorz Wierzowiecki
17年2月4日在8:42

如何同时安装根分区和引导分区:unix.stackexchange.com/q/342463/9689?

– Grzegorz Wierzowiecki
17年2月4日在10:35

附言如果要同时安装两个分区,为了避免“重叠”错误,只需使用sizelimit选项指定分区的大小即可。有关更多信息:unix.stackexchange.com/a/342466/9689。 (顺便说一句,以上答案可能会更新以提供该选项的示例用法)

– Grzegorz Wierzowiecki
17年2月4日在21:56



您可以使用bash的算术扩展:$((8192 * 512))而不是手动乘法。

–俄罗斯
17年8月8日在13:46

#2 楼

losetup通过-P提供分区探测。使用此功能使安装整个磁盘映像(例如Raspbian SD卡映像)的分区非常容易:

losetup -P /dev/loop0 raspbian.img
mount /dev/loop0p2 /mnt
mount /dev/loop0p1 /mnt/boot


评论


这似乎不太容易出现人为错误。我还可以在mount命令中使用标签吗?

–ctrl-alt-delor
18年2月1日在11:26

#3 楼

最初,我使用awk / grep解析fdisk并提取偏移量,但是发现它可能有点复杂,易碎,并且以后很难理解。我发现的最简单的方法是:

 IMAGE_FILE="YOUR IMAGE FILE GOES HERE"
TMP=$(mktemp -d)
LOOP=$(sudo losetup --show -fP "${IMAGE_FILE}")
sudo mount ${LOOP}p2 $TMP
sudo mount ${LOOP}p1 $TMP/boot/

# do stuff to ${TMP}/ which is rpi filesystem

# cleanup
umount ${TMP}/boot/
umount ${TMP}
rmdir ${TMP}
 


这会为您创建一个临时目录,自动分配下一个循环设备并将其设置为p1p2分区设备,并安装引导和根目录。

还可以将清理部分放在出口陷阱中,因此发生某些故障,您将无法悬挂安装文件/文件:

 set -e
function cleanup {
  sudo umount -f $TMP/boot/
  sudo umount -f $TMP
  rmdir $TMP
}
trap cleanup EXIT
 


#4 楼

Raspbian / Raspberry Pi OS存储库具有Gnome磁盘实用程序软件包,该软件包可安装Image Mounter并在右键单击上下文菜单中添加“ Mount Image”。
Viz .:
sudo apt-get install gnome-disk-utility

这使您可以安装并使用具有多个分区的磁盘映像的内容。
我不知道它是否安装了R / O或R / W。

#5 楼

如果fdisk -l在Arch linux上显示的是扇区而不是块,则...在“重叠循环错误”的情况下查找块数的另一种方法是从第二个分区中减去第一个分区的字节偏移量再除以二例如(62914560-4194304)/ 2 = 29360128