为什么'dd'命令使用不同的bs(块大小)不会影响bi_size?

时间:2015-09-17 01:43:00

标签: linux-kernel linux-device-driver

我正在尝试测试块设备驱动程序。

当我使用具有不同bs块大小的'dd'命令时,'bio'结构中的bi_size字段似乎没有改变。它仍然是4KB。

我做错了什么?

顺便说一句,我正在运行'dd'直接输出到我的设备(= / dev / xxx)而不是通过VFS。

2 个答案:

答案 0 :(得分:0)

似乎4KB是块设备的扇区大小,因此对它的所有请求都与该值对齐。

来自LDD3, Chapter 16

  

完成后,内核会遵守设备的硬件扇区大小。所有I / O请求都在硬件扇区的开头正确对齐,每个请求的长度是一个整数扇区。

注意,通过在块设备文件(= / dev / xxx)上使用dd,您实际上通过VFS 。块设备的接口与文件之一不同,因此代表块设备的文件上的操作(例如,读/写)是块设备操作的包装。 (此外,对任何文件的任何访问都通过VFS。)

答案 1 :(得分:0)

dd的块大小就是dd读取和写入文件时使用的块大小。内核不需要使用与请求写入该大小的用户空间进程相同的块大小(或同时)写入设备。内核对VFS操作进行缓冲(并且还保证某些块大小写入将是原子的,这是4KB IIRC)。顺便说一句,/dev/块设备确实通过了VFS(块大小不受你控制的事实应该足够证据)。

所以是的,bs中的dd选项不会影响内核在实际序列化写入设备时使用的块大小。