绑定一个Linux原始字符设备
命令语法格式
raw /dev/raw/raw<N> <major> <minor>
raw /dev/raw/raw<N> /dev/<blockdev>
raw -q /dev/raw/raw<N>
raw -qa
命令描述
命令raw用于将Linux原始字符设备绑定到块设备。可以使用任何块设备:在绑定时,甚至不必访问设备驱动程序(它可以在以后作为内核模块按需加载)。
命令raw以两种模式使用:它设置原始设备绑定;或者查询现有绑定。
设置原始设备时,/dev/raw/raw<N>是文件系统中现有原始设备节点的设备名称。要绑定到的块设备可以根据其主设备号和次设备号指定,也可以指定为现有块设备文件的路径名/dev/<blockdev>。
可以使用-q选项查询已存在的绑定,该选项与原始设备文件名一起用于查询该设备,或使用-a选项查询所有绑定的原始设备。
可以通过指定major和minor 0来完成解绑。
一旦绑定到块设备,就可以打开、读取、写入原始设备,就像它绑定的块设备一样。但是,原始设备的行为与块设备不完全相同。特别是,对原始设备的访问完全绕过了内核的块缓冲区缓存:所有I/O都直接与执行I/O的进程的地址空间相连。如果底层块设备驱动程序可以支持DMA,则根本不需要数据复制来完成I/O.
由于原始I/O涉及对进程内存的直接硬件访问,因此必须遵守一些额外的限制。所有I/O必须在内存和磁盘上正确对齐:它们必须从磁盘上的扇区偏移开始;它们必须是精确的扇区数;并且虚拟内存中的数据缓冲区也必须与多个扇区对齐。对于大多数设备,扇区大小为512字节。
命令支持的选项及含义
-q, –query
设置查询模式。命令raw将查询现有绑定,而不是设置新绑定。
-a, –all
与-q一起使用,指定应查询所有绑定的原始设备。
-V, –version
显示版本信息并退出。
-h, –help
显示帮助信息并退出。
注意事项
Linux dd(1)命令应该在没有bs=选项的情况下使用,或者blocksize需要是设备扇区大小的倍数(通常为512字节),否则它将失败并显示“Invalid Argument”消息(EINVAL)。
原始I/O设备不与Linux块设备缓冲区高速缓存保持高速缓存一致性。如果使用原始I/O覆盖缓冲区高速缓存中已有的数据,则缓冲区高速缓存将不再对应于下面的实际存储设备的内容。 这是故意的,但根据您的要求,它被视为错误或功能!
与使用原始设备的应用程序相比,应该优先选择带有O_DIRECT标志的open(2)设备,例如/dev/sda1。
参考文献
- man 8 raw, Version 2.32.1-0.1
更新日志
- 10/08/2018 创建文章