我使用以下命令创建了我的 Raspberry Pi SD 卡的图像dd
:
sudo dd if=/dev/sdf of=/home/myusername/raspberry-backup-2014-04-10.img
SD 卡包含两个分区(一个 vfat,一个 ext4),当我插入卡时会自动安装。
我的问题:我如何从 .img 文件挂载这些分区?
更多细节:
$ fdisk -l raspberry-backup-2014-04-10.img
Disk raspberry-backup-2014-04-10.img: 3974 MB, 3974103040 bytes
255 heads, 63 sectors/track, 483 cylinders, total 7761920 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
Disk identifier: 0x000981cb
Device Boot Start End Blocks Id System
raspberry-backup-2014-04-10.img1 8192 122879 57344 c W95 FAT32 (LBA)
raspberry-backup-2014-04-10.img2 122880 7761919 3819520 83 Linux
答案1
为了避免为每个分区创建单独的映像或安装类似的实用程序,您可以通过在命令中kpartx
指定来单独挂载每个分区。offset
mount
首先检查图像文件中的分区并使用以下命令确定偏移量fdisk
:
$ fdisk -u -l rpi_image280914
Disk rpi_image280914: 16.0 GB, 16012804096 bytes
255 heads, 63 sectors/track, 1946 cylinders, total 31275008 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
Disk identifier: 0x000cdac7
Device Boot Start End Blocks Id System
rpi_image280914p1 * 2048 514047 256000 c W95 FAT32 (LBA)
rpi_image280914p2 540672 31242239 15350784 83 Linux
取出Start
所需分区的扇区,并将该值乘以大小Units
。因此,如果您想要第二个分区,您将得到540672 * 512 = 276824064
。
现在创建一个文件夹并挂载分区:
mkdir rpi_partition2
sudo mount -o loop,offset=276824064 rpi_image280914 rpi_partition2/
对分区数据进行完操作后:
sudo umount rpi_partition2/
rm -r rpi_partition2/
答案2
经过一些额外的测试后,我自己找到了解决方案:kpartx
sudo kpartx -a raspberry-backup-2014-04-10.img
此命令创建/dev/mapper/loop0p1
和/dev/mapper/loop0p2
。之后可以直接挂载这些分区:
sudo mount -o rw -t ext4 /dev/mapper/loop0p2 mount_target/
答案3
如果你的目标是探索或修改分区(文件系统)的内容,此命令行将挂载 SD 卡转储的文件系统我的 SD 卡转储进入目录安装目录。
part_id=2; INFILE=my_sdcard_dump.img; MOUNTPT=mount_dir PARTITION=${part_id}; sudo mount "$INFILE" "$MOUNTPT" -o loop,offset=$[ `/sbin/sfdisk -d "$INFILE" | grep "start=" | head -n $PARTITION | tail -n1 | sed 's/.*start=[ ]*//' | sed 's/,.*//'` * 512 ]
答案4
处理具有多个分区的整个磁盘的映像是相当棘手。Linux 并非设计用于从常规文件中读取分区表,即使连接到环回设备也是如此,因此您必须仔细识别分区的偏移量并将其传递给命令mount
。
最好的方法是创建每个分区的单独图像:
sudo dd if=/dev/sdf1 of=/home/myusername/raspberry-backup-sdf1-2014-04-10.img
sudo dd if=/dev/sdf2 of=/home/myusername/raspberry-backup-sdf2-2014-04-10.img
现在,您可以轻松地将这些文件视为磁盘上的单独分区,通过将它们映射到循环设备。循环设备或环回设备是一种虚拟设备,它为 Linux 提供一个转换层,以将文件视为块设备(如磁盘或分区)。
循环设备通常/dev/loop0
通过/dev/loop8
。使用以下命令识别未使用的循环设备losetup
:
$ sudo losetup /dev/loop0
loop: can't get info on device /dev/loop0: No such device or address
此响应表示未分配循环设备。现在我们可以将循环设备分配给我们的某个图像文件:
$ sudo losetup /dev/loop0 /home/myusername/raspberry-backup-sdf1-2014-04-10.img
此命令没有输出表示成功。现在/dev/loop0
在大多数情况下功能相当于/dev/sdf1
您的 SD 卡,您可以像平常一样安装它:
sudo mount -t vfat /dev/loop0 /media/sdimage-1
使用另一个循环设备重复该过程以挂载另一个分区。完成后,卸载文件系统并取消分配循环设备:
sudo umount /dev/loop0
sudo losetup -d /dev/loop0