Heim > System-Tutorial > LINUX > Hauptteil

Die von du und ls unter Linux berechnete Dateigröße ist zehnmal unterschiedlich?

王林
Freigeben: 2024-02-09 21:39:08
nach vorne
568 Leute haben es durchsucht

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

[root@xxxxx apps]# du -hs smartorder.log
9.0G smartorder.log
Nach dem Login kopieren

看了下,不小,我问开发,要整个日志吗,还是可以按日期给他切一下,他说要整个,我想着日志文件,通常压缩完也没多少,就压缩了一下,压缩完确实也不是太大

[root@xxxxx apps]# du -hs smartorder.log.tar.gz 
744M smartorder.log.tar.gz  
Nach dem Login kopieren

没多想,我就给他down下来发过去了

晚上回家,哥们找到我了

Die von du und ls unter Linux berechnete Dateigröße ist zehnmal unterschiedlich?

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

Die von du und ls unter Linux berechnete Dateigröße ist zehnmal unterschiedlich?

确实是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
Nach dem Login kopieren

这。。。。。

后来想起来,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
Nach dem Login kopieren

如何查找系统上的sparse file,或确认文件是否是sparse file?

[root@xxxxx apps]# find ./smartorder.log -type f -printf "%S\t%p\n"
0.0886597 ./smartorder.log
Nach dem Login kopieren

如上,通过find命令,find命令通过%S输出的结果中,最左边一列显示的值是(BLOCK-SIZE*st_blocks/st_size),sparse file的大小通常是小于1.0的

如果要查找文件系统上所有稀疏文件,可以通过以下find命令

find / -type f -printf "%S\t%p\n" | gawk '$1 
Nach dem Login kopieren

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

Das obige ist der detaillierte Inhalt vonDie von du und ls unter Linux berechnete Dateigröße ist zehnmal unterschiedlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:lxlinux.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!