Linux下du和ls计算的文件大小竟然差10倍?
事情是这样的,昨天开发让我给他倒个日志,由于历史原因吧,没有日志系统,直接上服务器看了下他要的日志大小
[root@xxxxx apps]# du -hs smartorder.log
9.0G smartorder.log
看了下,不小,我问开发,要整个日志吗,还是可以按日期给他切一下,他说要整个,我想着日志文件,通常压缩完也没多少,就压缩了一下,压缩完确实也不是太大
[root@xxxxx apps]# du -hs smartorder.log.tar.gz
744M smartorder.log.tar.gz
没多想,我就给他down下来发过去了
晚上回家,哥们找到我了
我说不可能啊,怎么可能100G,吓到我了,他还给我发了个截图
确实是100G,没办法,开电脑上服务器查看,通过ls指定--block-size查看大小
[root@xxxxx apps]# ls -l --block-size=G smartorder.log
-rw-r--r-- 1 root root 103G Oct 21 09:00 smartorder.log
这。。。。。
后来想起来,du查找的时候是按照block大小计算的,计算的是实际占用磁盘空间的大小,但即便这样,按道理,和ls命令查出来的大小不会差太多,但是凡事有例外
linux中有一种文件叫做sparse file,它可以延迟分配磁盘空间,类似于我们用的虚拟机,在创建虚拟机的时候,可以分配20G的磁盘空间,但是你创建完后,去查看宿主机磁盘占用,确实际没有占用那么多
Sparse File专业名称叫稀疏文件,这是Unix类和NTFS等文件系统的一个特性
开始时,一个sparse file不包含数据,也没有分配到用来存储用户数据的磁盘空间。当数据被写入sparse file时,NTFS逐渐为其分配磁盘空间。
Sparse File以64KB为单位增量增长,所以磁盘上sparse file的大小总是64KB的倍数
Sparse File就是在文件中留有很多空余空间,留备将来插入数据使用。如果这些空余空间被ASCII码的NULL字符占据,并且这些空间相当大,那么,这个文件就被称为稀疏文件,而且,并不分配相应的磁盘块。
很显然,我上面遇到的就是一个Sparse File,那么这么大的一个sparse file,怎么处理?
其实cp命令有一个针对sparse文件拷贝优化的参数--spare=WHEN,WHEN的值为auto、always、never,默认为auto,如果设置为never则会自动填数据
同样支持sparse的命令还有tar、cpio、rsync,下面通过tar试下
[root@bibang-server apps]# tar cSf smartorder.log.tar smartorder.log
[root@bibang-server apps]# ls -l --block-size=G smartorder.log.tar
-rw-r--r-- 1 root root 10G Oct 21 09:57 smartorder.log.tar
如何查找系统上的sparse file,或确认文件是否是sparse file?
[root@xxxxx apps]# find ./smartorder.log -type f -printf "%S\t%p\n"
0.0886597 ./smartorder.log
如上,通过find命令,find命令通过%S输出的结果中,最左边一列显示的值是(BLOCK-SIZE*st_blocks/st_size),sparse file的大小通常是小于1.0的
如果要查找文件系统上所有稀疏文件,可以通过以下find命令
find / -type f -printf "%S\t%p\n" | gawk '$1 < 1.0 {print}'
ok,今天的内容就到这里了,欢迎转发、在看、关注!
相关文章
- 利用Linux脚本快速实现复杂计算(linux脚本计算)
- 定制Linux:立即实现最佳计算体验(定制的linux)
- Linux:崭新的计算世界拓展之旅(linux变成)
- Linux下搭乐:QQ给您无限乐趣(linux版的qq)
- Linux查看CPU核数的简单方法(linux查看cpu核数)
- Linux下掌握网络连接状态的技巧(linux查看网络连接状态)
- Linux命令行实现网络抓包(linux命令行抓包)
- Linux下的时间计算算法(linux时间算法)
- 如何将Linux变成路由器(linux如何变路由器)
- Linux 挂载权限:实现保障机制(linux挂载权限)
- Linux系统监控进程内存使用情况(linux监控进程内存)
- Linux下一体化计算集群搭建实践(linux计算集群搭建)
- 探索Linux:开启了新的计算世界(linux系统语言)
- Linux的发展历程:从分支到成功(linux的分支)
- 保护Linux系统:阻止端口扫描(linux防端口扫描)
- 管理Linux云计算薪资管理:实现更简单高效的管理(linux云计算薪资)
- Linux入门兄弟连:探索开源计算之旅(linux入门兄弟连)
- 关闭Linux系统防火墙安全性检查(关闭linux的防火墙)
- 玩转Linux:管道符的妙用!(linux的管道符)
- “Linux虚拟化软件”:打造高效可靠的云计算平台(linux虚拟化软件)
- 云免费版Windows 10与Linux结合:免费云服务体验(Win10加linux)
- Linux架构师:走向未来的计算领袖(linux架构师)
- Linux利用grep命令匹配字符串(linux匹配字符串)
- 如何使用Linux计算百分比?(linux计算百分比)
- 使用Linux求和命令,轻松计算数字总和(linux求和命令)
- Linux查看IP地址的简单方法(linux 显示 ip)
- Linux文件权限:十位密码驱动安全之门(linux文件权限一共10位长度)
- Linux下sudo权限获取的窍门(linux获取权限命令)