我有一个SATA块设备报告的容量小于其可访问空间,我想使用Linux为块设备创建的文件读取和写入报告的容量。所以我希望使用open({"/dev/sda", O_RDWR
)返回的描述符进行操作。但是,当我尝试使用lseek
来寻找设备的容量时,我收到错误并且错误设置为EINVAL (22)
。
有没有办法在不修改设备驱动程序的情况下访问超出设备容量的数据,同时仍然使用open()
返回的文件描述符?
我的Linux版本是内核3.10.0-514.21.1.el7.x86_64的CentOS 7,虽然我对解决方案感兴趣,即使它们涉及其他Linux发行版。
编辑:我正在使用的驱动器是一个FLEX协议驱动器,它报告驱动器的常规容量,但也有一个叠加的磁记录,其偏移量高于报告的驱动器容量。如果您有兴趣,可以在T13 website上找到该协议的详细信息。
答案 0 :(得分:1)
如果我没记错的话,那个错误是由于设备本身无法读取或写入该柱面而引起的,表明它可能不存在。请注意,许多制造商使用1000B = 1KB等,并且该文件系统也保留自己的空间。
简短的回答是,你没有。设备仅报告您可以使用的空间,也不会报告缓存大小。这种误报不是在操作系统级别,而是在设备上。