最新消息:

dd命令的新了解

Linux admin 3220浏览 0评论
这一阵子的工作是在给ext4加feature,就是“让ext4的extent length的单位由block变为cluster“。一边写代码一边加测试用例,这个测试用例我就简单的用shell实现的,就用dd命令来写文件。
顺序写的时候还好,等到偏移写(seek一段再write)的时候出了kernel crash,原因是某个extent的length突然变成了0。一开始当然是怀疑我自己哪里写错了,于是加断点,调试,直到我去南京出差周末在宾馆也在调试(感谢马涛同学提供的虚拟机镜像,不然连不上vpn就没法调了),发现事情很神奇:我的extent开始length是2,dd之后还没干别的呢,length就变了,于是终于给dd加了个strace,一看,我的天,dd自己会做ftruncate!而我还没有实现truncate的新feature
这dd真是体贴得我流泪啊,我一直把它当纯write使啊,没想到dd会“智能“的多加一个truncate操作。去翻了一下dd的代码,只要是 of= 一个文件,dd必然会先truncate之,除非带上conv=notrunc。
看来工具不熟就是误事啊。
附dd用法(seek 8k然后write 8k,不要truncate):
dd if=/dev/zero of=/test seek=2 bs=4K count=2 conv=notrunc

转载请注明:爱开源 » dd命令的新了解

您必须 登录 才能发表评论!