用ls和du显示的文件大小为何有差别
来源:互联网 发布:辐射3 知乎 编辑:程序博客网 时间:2024/05/17 03:27
ls == apparent sizes(文件长度,file数据结构中定义的文件长度字段)
一个文件占用的磁盘空间和一个文件的大小是两码事情。占用空间取决于文件系统的块(block)的大小,Linux一般默认是4k(4096) ,因此,一个大小为1个字节的文件,最小也要占用4k,如果你创建文件系统的时候制定块大小是16K,那么即便一个文件只有1个字节,占用空间也是16K。
通常情况下,ls 显示的文件大小比du显示的磁盘占用空间小,比如文件系统的block是4K,一个13K的文件占用的空间是 13k/4k = 3.25 个block,一个block只能被一个文件占用,因此实际占用空间就是4个block,就是16K。
经常发现rm删除某个文件后,存储并没有被释放
rm日志文件,但日志文件一直被服务A的进程打开了, rm 后空间并没有释放。rm 其实是删除该文件名到文件真正保存到磁盘位置的链接, 此时该文件句柄还被服务A打开, 因此对应的数据并没有被回收, 其实可以理解为 GC 里面的引用计数, rm 只是减少了引用计数, 并没有真正的进行释放内存, 当引用计数为0的时候, OS 内核才会释放空间, 供其他进程使用。所以当A进程停止(文件句柄的引用计数会变为0)或者重启后, 占用的存储空间才被释放。 (lsof | grep deleted:查找所有被删除的但是文件句柄没有释放的文件和相应的进程,然后再kill掉进程或者重启进程即可)。
该日志文件是一个稀疏文件,虽然其文件长度很大, 然而其中包含大量的holes并不占用实际的存储空间.
以上是用 dd 等命令创建稀疏文件, 也有同学用 c 代码实现了相同的功能. 其实就是写文件的时候, 改变下当前文件写指针。
If the environment variable BLOCKSIZE is set, and the -k option is not specified, the block counts will be displayed in units of that size block. If BLOCKSIZE is not set, and the -k option is not specified, the block counts will be displayed in 512-byte blocks.
although the apparent size is usually smaller, it may be larger due to holes in (‘sparse’) files, internal fragmentation, indirect blocks, and the like (man du)
Display values are in units of the first available SIZE from –block-size, and the DU_BLOCK_SIZE, BLOCK_SIZE and BLOCKSIZE environment variables. Otherwise, units default to 1024 bytes (or 512 if POSIXLY_CORRECT is set. (du --help)
可以用修改文件内容的方式在不用重启进程的情况下释放空间,用echo 'hello' > contentutil.log, 然后 df 确认磁盘空间确实已经释放。
参考:http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666540078&idx=2&sn=cacb3bcb3bd9a06cc8cfca16e02bfbd9&chksm=80dce885b7ab619359cb73732a1505b440861af707a2abceed1de5d6496e96e82e1b76dce330&mpshare=1&scene=1&srcid=12061rCRjhAoxF9ctqTcUWEb#rd
- 用ls和du显示的文件大小为何有差别
- 使用ls和du显示出来的文件大小有差别
- 为什么用ls和du显示出来的文件大小有差别?
- 为什么用ls和du显示出来的文件大小有差别?
- 为什么用ls和du显示出来的文件大小有差别?
- du和ls查看文件大小的区别
- du和ls查看文件大小的区别
- du和ls查看文件大小的区别
- du和ls查看文件大小的区别
- 为何windows dos和Linux shell有这样的差别??
- linux ls 显示便于阅读的文件大小
- 关于 du 和 ls 的简单探讨
- ls和du顯示資料夾的size
- Linux du命令显示文件大小
- 让ls -l和df命令显示的文件大小可读性增强
- Linux 目录和文件大小 du
- linux ls-h和du -sh的区别
- linux查看文件大小的命令 du 和 df
- matlab 中值滤波
- poj_2195 Going Home(最小费用流)
- [51nod1375]再选数
- [android]与 ViewPager fragment里面fragment和 FragmentStatePagerAdapter 的结果,在异常 (与完整的示例)
- android 代码设置、打开wifi热点及热点的连接
- 用ls和du显示的文件大小为何有差别
- <HTML5> 新增的表单元素
- LeetCode09:Palindrome Number
- 工具链接
- spring mvc 使用kaptcha生成验证码
- Odd Even Linked List
- Python caffe cuda7.5 windows pycharm
- AIDL 安卓进程间通信/跨应用通信
- 漫步凸分析八——回收锥与无界