我曾经dd
备份过一个80GB 的驱动器
dd if=/dev/sdb of=~/sdb.img
Run Code Online (Sandbox Code Playgroud)
现在我需要访问该驱动器上的一些文件,但我不想将“.img”复制回驱动器。
mount ~/sdb.img /mnt/sdb
也不起作用。它返回:
mount: you must specify the filesystem type
Run Code Online (Sandbox Code Playgroud)
我试图找到文件系统类型 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
Run Code Online (Sandbox Code Playgroud)
是否可以安装sdb.img
,或者我必须使用它dd
来恢复驱动器?
Ste*_*fan 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
分区 起始扇区
1 63
2 10233405
3 82750815
要挂载单个分区,该分区X
的起始扇区在哪里,请运行:
mount ~/sdb.img /mnt/sdb -o offset=$((X*512))
Run Code Online (Sandbox Code Playgroud)
所以要挂载第二个分区,你必须运行:
mount ~/sdb.img /mnt/sdb2 -o offset=$((10233405*512))
Run Code Online (Sandbox Code Playgroud)
旁注:/mnt/sdb2
在运行之前确保它存在。
玩得开心!
更新:在答案中,我假设您图像的扇区大小为512
,请参阅有关如何计算的问题。
esc*_*crl 10
在接受的答案中的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
...
Run Code Online (Sandbox Code Playgroud)
您现在可以在所需的挂载点挂载每个分区,当然是只读的。
$ mount -r /dev/loop0p1 /tmp/backup_sdb1
Run Code Online (Sandbox Code Playgroud)
保持所有内容只读是可选的,但对于备份图像来说可能是一件好事。
更新: -P
选项是在 2012 年与 util-linux-2.21 一起添加的。所以在编写接受的答案时它不可用。另请注意这一点,其他答案特定于 linux。OpenBSD 和 NetBSD 的 vnode 磁盘vnconfig(8)
由mdconfig(8)
.