如何将我的磁盘视为一个大文件?

如何将我的磁盘视为一个大文件?

我正在阅读有关 FreeBSD 中的设备文件的内容,但我的理解不是很好。为了练习,我想出了以下场景。我怀疑可以使用设备文件来解决该问题。

想象一下,我是一名兼职间谍,我需要生成一些一次性便笺簿。我可以转到我的安全 FreeBSD 盒子并将一些内容写入/dev/urandompad 文件,因为我知道来自此源的随机性足够好(tm)。我的带有 pad 文件的闪存驱动器将交付给我未来的联系人。

然而,由于该驱动器仅包含一个充满随机字节的文件,因此将整个文件系统写入磁盘似乎是一种浪费。为什么不将随机数据填满 USB 呢?

我的问题:如何实现从磁盘读取原始数据和向磁盘写入原始数据的目标?我应该指向dd磁盘的设备文件吗?

答案1

是的,您可以将设备文件视为原始设备文件,并使用与访问普通文件相同的 API 从中读取/写入数据。在大多数情况下,您可以使用dd或简单地从设备文件中获取数据。

请记住,原始设备和文件系统上的真实文件之间存在一些实际差异:

  • 设备具有固定的大小。写入较少的数据将使剩余空间保持不变。除非您有其他方式来传达该信息,否则您无法确定实际写入了多少数据。
  • 设备没有权限。设备文件表示设备具有权限,但这些权限不会随设备本身一起传播,它们只是由设备所连接的系统分配。如果您使用chmod代表 USB 驱动器的设备文件,将其拔出并将其连接到另一个(或同一)系统,则权限更改将不会持续。
  • 设备没有名称,或者至少没有用户可更改的名称。您的操作系统将为您的设备分配任何您认为合适的设备节点名称。卷名称之类的东西存储在文件系统或分区表中,当您将整个设备作为原始存储访问时,就不存在这样的东西了。
  • 大多数操作系统不会允许随机非 root 用户访问设备文件,而有些操作系统可能允许非 root 本地用户挂载 USB 驱动器等内容。

(注:我有 Linux 背景,但这些概念在任何类 UNIX 系统上几乎都是相同的)

相关内容