如何挂载使用硬盘的 /bin/dd 创建的“img”?

如何挂载使用硬盘的 /bin/dd 创建的“img”?

我曾经dd备份过一个80GB驾驶

dd if=/dev/sdb of=~/sdb.img

现在我需要访问该驱动器上的一些文件,但我不想将“.img”复制回该驱动器。

mount ~/sdb.img /mnt/sdb也不行。它返回:

mount: you must specify the filesystem type

我试图找到文件系统类型file -s

fox@shoebox $ file -s sdb.img
sdb.img: x86 boot sector; partition 1: ID=0x12, starthead 1, startsector 63, 10233342 sectors; partition 2: ID=0xc, active, starthead 0, startsector 10233405, 72517410 sectors; partition 3: ID=0xc, starthead 0, startsector 82750815, 73545570 sectors, code offset 0xc0

是否可以安装sdb.img,或者我必须使用它dd来恢复驱动器?

答案1

当您使用ddon/dev/sdb代替/dev/sdb1or时/dev/sdb2,您复制全部分区从上述驱动器进入文件。

您必须单独安装每个分区。


一个分区从文件,您必须首先找出该分区所在的文件中的位置。

使用您的输出,file -s sdb.img我们找到startsectors每个分区的:

sdb.img:x86引导扇区;分区1:ID=0x12,起始头1,启动扇区 63, 10233342 扇区;分区2:ID=0xc,活动,起始头 0,启动扇区 10233405, 72517410 扇区;分区3:ID=0xc,起始头0,起始扇区 82750815, 73545570 个扇区,代码偏移 0xc0

分割     起始扇区
1 63
2 10233405
3 82750815

要挂载单个分区,在X 哪里起始扇区该分区的运行:

mount ~/sdb.img /mnt/sdb -o offset=$((X*512))

所以要安装第二个分区,你必须运行:

mount ~/sdb.img /mnt/sdb2 -o offset=$((10233405*512))

边注:/mnt/sdb2在运行此命令之前请确保存在。

玩得开心!


更新:在答案中,我假设您图像的扇区大小为512,请参阅这个问题关于如何计算它。

答案2

在 Linux 上的挂载命令中接受的答案将隐式创建一个循环设备。假设完整磁盘映像具有正确的分区表(您的内核能够理解),您可能更喜欢使用losetup(8)直接为您省去计算偏移量的麻烦。此外,也不需要额外的工具,如kpartx其他工具中所建议的那样回答。它将执行与以下内容基本相同的操作:

losetup -Prf sdb.img会将第一个空闲循环设备(-f)作为只读(-r)与图像文件关联sdb.img。该-P选项强制内核扫描该循环设备的分区表,并为每个分区创建循环设备。

所以你可能会得到类似的东西:

$ lsblk
NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0       7:0    0 167.7G  1 loop
├─loop0p1 259:0    0   500M  1 loop
└─loop0p2 259:1    0 167.2G  1 loop
...

现在,您可以在所需的安装点安装每个分区,当然是只读的。

$ mount -r /dev/loop0p1 /tmp/backup_sdb1

将所有内容保持只读是可选的,但对于备份映像来说可能是一件好事。

更新: -P添加了选项2012 年使用 util-linux-2.21。所以在编写接受的答案时它不可用。另请注意,此答案和其他答案特定于 Linux。 OpenBSD 和 NetBSD 有 vnode 磁盘,由vnconfig(8)FreeBSD 的内存磁盘由mdconfig(8)

答案3

或者,您可以使用一个名为 的好工具kpartx。从手册页:

kpartx - 从分区表创建设备映射

这意味着您可以直接从 img 文件创建带有设备分区的“伪设备”:

$ kpartx -av sdb.img
add map loop0p1 (254:2): 0 2048 linear /dev/loop0 0
add map loop0p2 (254:3): 0 31162 linear /dev/loop0 2048
$ lsblk
.
.
.
loop0                     7:0    0  16.2M  0 loop
├─loop0p1               254:2    0     1M  0 part
└─loop0p2               254:3    0  15.2M  0 part

/dev/mapper/loop0p2例如,如果您想要映像上的第二个分区,则可以安装。

相关内容