0

我有一个 SATA 块设备,它报告的容量小于其可访问空间,我想使用 Linux 为块设备创建的文件读取和写入它超过报告的容量。所以我希望使用从open({ "/dev/sda", O_RDWR)返回的描述符进行操作。但是,当我尝试使用lseek来查找设备的容量时,我收到一个错误,并且 errno 被设置为EINVAL (22). 有没有办法在不修改设备驱动程序并且仍然使用返回的文件描述符的情况下访问超出设备容量的数据open()

我的 Linux 版本是内核 3.10.0-514.21.1.el7.x86_64 的 CentOS 7,尽管我会对解决方案感兴趣,即使它们涉及其他 Linux 发行版。

编辑:我正在使用的驱动器是一个 FLEX 协议驱动器,它报告驱动器的常规容量,但也有在驱动器报告容量以上的偏移处可用的叠瓦式磁记录。如果您有兴趣,可以在T13 网站上找到该协议的详细信息。

4

1 回答 1

1

如果我没记错的话,这个错误是因为设备本身无法读取或写入该柱面,这表明它可能不存在。请注意,许多制造商使用 1000B = 1KB 等,并且文件系统也会保留自己的空间。

简短的回答是,你没有。设备只会报告您可以使用的空间,也不会报告缓存大小。这种误报不在操作系统级别,而是在设备级别。

于 2018-02-08T01:47:27.213 回答