如何挂载由/ bin / dd硬盘创建的`img`?


19

我曾经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来还原驱动器?

Answers:


27

当您使用dd/dev/sdb,而不是/dev/sdb1或者/dev/sdb2,复制所有分区从所述驱动到一个文件中。

您必须分别安装每个分区。


要从文件挂载分区,必须首先找出该分区在文件中的位置。

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

sdb.img:x86引导扇区;分区1:ID = 0×12,starthead 1,startsector 63,10233342个部门; 分区2:ID =位于0xC,活性,starthead 0,startsector 10233405,72517410个部门; 隔壁3:ID =位于0xC,starthead 0,startsector 82750815,73545570个扇区,码偏移将0xC0

分区     Startsector
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,请参阅此问题以了解如何计算。


您也可以使用表格的形式获取startectors,方法file -l sdb.img是在问题的答案中张贴:unix.stackexchange.com/questions/2668/…–
学生,

@student:仅适用于将来的读者:那是 fdisk -l不会file -l
Runium

进一步说明-您可以通过在该命令中添加-u选项来获得512字节扇区的数量-因此fdisk -u -l sdb.img
Aaron Mason

如果file默认情况下您的版本不太健谈,请尝试添加-k开关以获取答案中显示的输出类型-像这样:file -k FILENAME.img
Christian Pietsch 2014年

7

在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

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

更新: 2012年util-linux-2.21中-P添加了该选项。因此在编写接受的答案时不可用。还要注意这一点,其他答案是特定于linux的。OpenBSD和NetBSD的vnode磁盘由vnconfig(8)而FreeBSD的内存磁盘由管理mdconfig(8)


2

另外,您可以使用一个名为的不错的工具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,例如,如果要在映像上放置第二个分区,则可以安装。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.