在原始格式中挂载磁盘镜像

尝试使用以下命令挂载一个以Raw(dd)格式的磁盘镜像时,
mount  nps-2010-emails.dd /media/manu/

我收到了以下错误信息。
mount: you must specify the filesystem type

我知道使用-t可以指定文件系统,但是对于一个原始(dd)文件,可以作为参数传递给挂载命令的术语是什么?如果我的挂载文件系统的方法有误,请帮助我进行更正。
$ file -s nps-2010-emails.dd
nps-2010-emails.dd: x86 boot sector; 
partition 1: ID=0xb, starthead 254, startsector 1, 20479 sectors, extended partition table (last)\011, code offset 0x0

$ fdisk -l nps-2010-emails.dd
Disk nps-2010-emails.dd: 10 MB, 10485760 bytes
255 heads, 63 sectors/track, 1 cylinders, total 20480 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: 0x00000000

             Device Boot      Start         End      Blocks   Id  System
nps-2010-emails.dd1               1       20479       10239+   b  W95 FAT32 

请问你能否将命令file -s nps-2010-emails.dd的输出添加到你的帖子中呢? - steeldriver
我看了一下你的个人资料,也看到了另一个问题。也许这篇博客文章对你有所帮助。 - muru
@steeldriver 输出已添加... - spaceman_spiff
更简单的挂载选项 - 在这里可以找到/描述: http://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device - Hannu
3个回答

http://major.io/2010/12/14/mounting-a-raw-partition-file-made-with-dd-or-dd_rescue-in-linux/中,有一个建议是使用偏移量。首先通过fdisk(8)获取偏移量,然后在mount命令中使用offset选项来指定它。使用fdisk来确定分区的起始扇区和扇区大小。然后使用起始扇区号和扇区大小(以字节为单位)计算偏移量。请参考Mount single partition from image of entire disk (device)中的示例。 最后:
mount -o offset=<offset in bytes> nps-2010-emails.dd /media/manu/

在一个典型的硬盘中,存储数据的单元被分组。这些分组被称为扇区。通常情况下,我们将前几个扇区保留用于提供有关分区的信息,留下一个间隙。因此,如果我们有整个磁盘的镜像,这些扇区也会被包括在内。现在,mount命令不能直接从第一个字节开始,因为分区不是从第一个字节开始的。所以,我们需要告诉mount要跳过多少字节(以便它可以避免额外的信息)并进入实际的分区。这就是所谓的偏移量。现在,每个扇区可以存储一定数量的字节信息,这被称为扇区的大小。我们通过将扇区的大小乘以扇区数来计算出可以存储在这个间隙中的总信息大小。
fdisk的输出中,您可以看到扇区大小为512字节,并且从扇区1开始。所以偏移量是1*512=512。请尝试以下命令:
mount -t vfat -o offset=512 ps-2010-emails.dd /media/manu/

我添加了文件系统类型,因为fdisk显示它是FAT32。要以可写方式挂载它,使用"-o offset=512,rw"。

我已经阅读了你发布的第一个链接中的文章,但对于偏移量扇区号和其他概念并没有很好的理解。如果可能的话,你能否详细说明一下这个主题,或者提供一些相关的参考资料供我学习?谢谢。 - spaceman_spiff
帖子已更新,包括fdisk -l nps-2010-emails.dd的输出结果。 - spaceman_spiff
谢谢,我的背景是理论计算机科学(我是数学专业的),有没有一些参考资料可以从一个普通的角度来理解这个话题? - spaceman_spiff
这个话题是关于磁盘、扇区、文件系统等等的吗?也许你可以从操作系统教材中的IO/存储章节开始,比如Tannenbaum的书。除了这些基础知识和FAT32挂载类型之外,我在答案中发布的所有内容都来自tholinks。 - muru

你还可以让计算机自动扫描转储中的所有分区,并自动准备所有循环设备,如这里所述。
所以,假设你将整个/dev/sda转储到一个名为sda.img的文件中。你可以按以下方式访问其分区:
losetup -f -P sda.img

在我的系统上,它显示如下:

sda raw image

在非GUI环境下,您可以使用losetup -l列出创建的设备,这将告诉您环回设备的名称,例如:
# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /path/mmcblk0

你可以使用以下命令挂载第一个分区:
mount /dev/loop0p1 /mnt/mypartition

希望能有所帮助。

1完美地为我工作。 - praveen pathak
2在这个同样的方向上,在Ubuntu 18.04上,我没有任何问题执行"gparted backup.img"命令并获得分区列表。"fdisk -l backup.img"也显示了有用的信息。 - RoundSparrow hilltx
1如何撤销losetup命令? - Flimm
@Flimm 我相信应该是 losetup -d your_loop_device - aggregate1166877

由于声誉不足,无法添加评论,但想告诉那些使用GPT磁盘并在使用fdisk测试时遇到问题的人,可以尝试使用gdsik来获取起始扇区和正确的偏移量。这对我很有帮助。 fdisk -l给出了以下结果:
      Device Boot      Start         End      Blocks   Id  System
vm2080737.bak1   *           1        3901    31457279+  ee  GPT

无法使用512偏移量挂载,出现错误“mount: 您必须指定文件系统类型”
`gdisk -l` 给出了良好的结果:
Number  Start (sector)    End (sector)  Size       Code  Name
   1              34             545   256.0 KiB   A501  gpboot
   2             546          993825   485.0 MiB   A502  swap
   3          993826        62914526   29.5 GiB    A503  rootfs

1或者使用parted - muru