操作系统: 07 2011存档
最近看ext4代码,注意到了 punch hole (打洞)功能,就是可以把文件中间的一部分内容释放掉,但是剩余部分的文件偏移不变。
于是我问马涛同学这个punch hole一般用在什么场合。
马涛:可以用在虚拟机上,比如你从虚拟机里删掉了一个大文件,虚拟机可以用punch hole在虚拟硬盘把这个文件占用的空间释放掉
我:有哪款虚拟机这样做?
马涛:这是文件系统提供给虚拟机的一个feature,虚拟机有了这个feature的支持就可以节省硬盘空间。比如host上装了多台虚拟机,每个虚拟机都通过punch hole的方式来删除自己虚拟的大文件,这样一段时间后,虽然各虚拟硬盘加起来空间很大,但是实际占用的空间就很小。应该有虚拟机是这样做的,这个我没注意。
我:除了虚拟化呢?还有别的应用场景吗?
马涛:嗯....云计算应该也又用的吧
我:虚拟化,云计算,这都是新概念,早期做这个punch hole是干啥用的,就是早期的应用有吗?
马涛:....早期就是因为有了truncate来去掉文件的尾巴,那么出于逻辑完整,就需要一个调用来去掉文件的头或者中间,于是就有了这个punch hole
我:喔
事后我想了想,如果一个大文件,用户决定了文件中间的一段内容以后不需要再用到了可以删除了,在没有punch hole支持的情况下,似乎只能先mmap,然后memove把中间的内容覆盖掉,然后truncate缩短文件内容。而如果有了punch hole的支持,只需一个系统调用没有内存移动的开销,非常高效,虽然文件用 ls 看起来还是那么大,但实际占用空间(用 du -sh 看)已经缩短了。
也许数据库,搜索引擎里的大文件可以用上,我猜。
关于存档
This page is a archive of entries in the 操作系统 category from 07 % Y.
操作系统: 06 2011 is the previous archive.
操作系统: 08 2011 is the next archive.
Find recent content on the main index or look in the 存档 to find all content.
操作系统: 07 2011每月存档
- 02 2013 (2)
- 01 2013 (2)
- 12 2012 (4)
- 11 2012 (1)
- 10 2012 (4)
- 09 2012 (1)
- 08 2012 (2)
- 06 2012 (5)
- 05 2012 (1)
- 02 2012 (3)
- 01 2012 (1)
- 12 2011 (1)
- 11 2011 (1)
- 10 2011 (1)
- 08 2011 (1)
- 07 2011 (1)
- 06 2011 (2)
- 05 2011 (2)
- 04 2011 (2)
- 03 2011 (2)
- 02 2011 (1)
- 01 2011 (1)
- 10 2010 (1)
- 08 2010 (2)
- 07 2010 (1)
- 06 2010 (2)
- 05 2010 (1)
- 03 2010 (4)
- 02 2010 (1)
- 01 2010 (1)
- 12 2009 (2)
- 11 2009 (4)
- 10 2009 (2)
- 08 2009 (2)
- 05 2009 (1)