读取引导磁盘上的扇区

Posted

技术标签:

【中文标题】读取引导磁盘上的扇区【英文标题】:Reading a sector on the boot disk 【发布时间】:2010-09-25 10:01:39 【问题描述】:

这是我关于reading the superblock 的问题的延续。

假设我想针对 Mac OS X 中的 HFS+ 文件系统。我如何读取引导盘的第 2 扇区?据我所知,Unix 只提供系统调用来读取文件,这些文件永远不会存储在那个位置。

这是否需要 1) 程序运行内核模式,或 2) 程序以汇编语言编写?我宁愿避免这些限制中的任何一个,尤其是后者。

【问题讨论】:

【参考方案1】:

我自己在 Mac 上完成了这项工作,请参阅我的磁盘编辑器工具:http://apps.tempel.org/iBored

您可以使用 /dev/diskN 或 /dev/rdiskN 打开驱动器(N 是从 0 开始的磁盘索引号)。然后您可以使用 lseek(确保使用 64 位范围的版本!)并对打开的文件进行读/写调用。

另外,使用 shell 命令“ls /dev/disk*”查看当前存在哪些驱动器。请注意,驱动器也存在“sM”扩展名,其中 M 是分区号。这样,也可以直接读取分区。

或者,您可以只使用 shell 工具“xxd”或“dd”来读取数据,然后使用它们的输出。可能会更容易。

但是,除非您以 root 身份运行,否则您将无法读取您的根磁盘和其他内部磁盘。只要用户安装了其他驱动器,或者禁用了它们的权限,您就可以访问其他驱动器。但您可能还需要先卸载驱动器的卷。在 shell 命令“diskutil”中查找卸载命令。

希望这会有所帮助。

2017 年更新:在 OS X 10.11 及更高版本上SIP 也可能会阻止您直接访问磁盘扇区。

【讨论】:

我知道这是一个旧线程,但是 Thomas,链接不起作用。您能否指向磁盘编辑器工具的正确 URL。谢谢。 知道了...为您搜索并浏览您的网站给了我链接:apps.tempel.org/iBored 我无法在 Mac OS X (10.6) 中运行它,但会发送更多详细信息邮件而不是破坏这个线程。【参考方案2】:

在Linux中,你可以从特殊设备文件/dev/sda中读取,假设你要读取的硬盘是第一个。您需要是 root 才能读取此文件。要读取第 2 扇区,您只需尝试偏移 2*SECTOR_SIZE 并读取 SECTOR_SIZE 字节。

我不知道这个设备文件在 OS X 上是否可用。检查/dev 下的有趣命名文件,例如/dev/sda/dev/hda

【讨论】:

嗯...我的机器上的 /dev 中没有 sda 或 hda。有一些有趣的,比如disk0,我会看看。【参考方案3】:

我还建议为该卷点击 /dev/ 设备文件,但您可能需要联系 Amit Singh,他编写了 hfsdebug utility 并且可能已经完成了您想做的事情。

【讨论】:

【参考方案4】:

这在权限方面是如何工作的?从 /dev/... 读取会不会不安全,因为如果您阅读得足够远,您将能够读取您没有读取权限的文件?

【讨论】:

只有超级用户 (root) 才能读取原始磁盘文件(Linux 上的 /dev/sda,OS X 上的 /dev/disk0)。

以上是关于读取引导磁盘上的扇区的主要内容,如果未能解决你的问题,请参考以下文章

读取磁盘时出现奇怪的错误

读取磁盘:CHS方式

操作系统---磁盘

Linxu:磁盘分区

Linux 磁盘IO

关于几个与IO相关的重要概念