dd命令的新了解

这一阵子的工作是在给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 

相关文章

分类

2 Comments

老栋 said:

改进ext4文件系统吗

DongHao Author Profile Page said:

是的,对bigalloc特性的一个增强,不过最后被maintainer否决了

留言:

关于文章

This page contains a single entry by DongHao published on 10 24, 2011 10:13 AM.

shell里的函数返回值 was the previous entry in this blog.

CLSF讨论会纪要(一) is the next entry in this blog.

Find recent content on the main index or look in the 存档 to find all content.