Linux에서 du와 ls로 계산한 파일 크기가 10배 다르다고요?

王林
풀어 주다: 2024-02-09 21:39:08
앞으로
589명이 탐색했습니다.

事情是这样的,昨天开发让我给他倒个日志,由于历史原因吧,没有日志系统,直接上服务器看了下他要的日志大小

[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下来发过去了

晚上回家,哥们找到我了

Linux에서 du와 ls로 계산한 파일 크기가 10배 다르다고요?

我说不可能啊,怎么可能100G,吓到我了,他还给我发了个截图

Linux에서 du와 ls로 계산한 파일 크기가 10배 다르다고요?

确实是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 
로그인 후 복사

ok,今天的内容就到这里了,欢迎转发、在看、关注!

위 내용은 Linux에서 du와 ls로 계산한 파일 크기가 10배 다르다고요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:lxlinux.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!