将块设备或文件的特定子集挂载为没有 MBR/GPT 的 FS

将块设备或文件的特定子集挂载为没有 MBR/GPT 的 FS

如何从块设备挂载特定的块范围(或从文件中挂载字节范围),或者至少将其公开为循环设备而不加载完整的 MBR/GPT?

我有几个相关的用例:

  • 假设硬盘的 MBR/GPT 损坏了,我想挂载一个起始/结束扇区已知的分区(当然还有块大小),但dd由于分区大小等原因,无法先挂载它

  • 我有一个文件中完整磁盘(带分区表)的备份映像,我想从中挂载特定分区,而不将所有分区公开为设备

  • 我想通过将 FS 隐藏在具有开始/结束偏移的块设备或文件中来进行一些不明智的隐写术,以使其不那么明显(我知道由于熵和访问映射,这不是一个好选择,但这不是这里的重点)

最后一个用例更像是受第一个和第二个用例启发的黑客行为,它们是我遇到的实际问题。

我发现了一些相关的问题,例如:

但是这些问题的(有效)答案通常是dd分区或重新创建 MBR,但在这里这不是一个选择。

答案1

下面有一条评论这个已经链接的问题

losetup我找到了一个使用-o和选项的答案--sizelimit

现代也mount可以做到这一点。关于循环设备man mount

这种类型的安装知道大约四个选项,即loopoffset和,它们实际上sizelimitencryption的选项losetup

因此语法如下:

mount -o offset=OFFSET,other,options,here /image/file /mnt/foo

其中OFFSET以字节为单位。通常知道 512 字节扇区的偏移量。如果起始扇区为,2048则这很有用:

mount -o offset=$((512*2048)),other,options,here /image/file /mnt/foo

实际上您几乎不需要sizelimitmount因为您挂载的文件系统知道它自己的大小。

相关内容