df和du顯示的磁碟空間使用方式不一致的原因及處理

來源:互聯網
上載者:User

在Linux下查看磁碟空間使用方式,最常使用的就是du和df了。然而兩者還是有很大區別的,有時候其輸出結果甚至非常懸殊。

1. 如何記憶這兩個命令

du-Disk
Usage

df-Disk
Free

2. df 和du 的工作原理2.1 du的工作原理du命令會對待統計檔案逐個調用fstat這個系統調用,擷取檔案大小。它的資料是基於檔案擷取的,所以有很大的靈活性,不一定非要針對一個分區,可以跨越多個分區操作。如果針對的目錄中檔案很多,du速度就會很慢了。2.2 df的工作原理df命令使用的事statfs這個系統調用,直接讀取分區的超級塊資訊擷取分區使用方式。它的資料是基於分區中繼資料的,所以只能針對整個分區。由於df直接讀取超級塊,所以運行速度不受檔案多少影響。3 du和df不一致情況類比常見的df和du不一致情況就是檔案刪除的問題。當一個檔案被刪除後,在檔案系統目錄中已經不可見了,所以du就不會再統計它了。然而如果此時還有啟動並執行進程持有這個已經被刪除了的檔案的控制代碼,那麼這個檔案就不會真正在磁碟中被刪除,分區超級塊中的資訊也就不會更改。這樣df仍舊會統計這個被刪除了的檔案。(1)當前分區sda1的使用方式
[root@centos192 testdu]# df -h /dev/sda1檔案系統      容量  已用  可用 已用%% 掛載點/dev/sda1              49G  776M   45G   2% /var

(2)建立一個1GB的大檔案

[root@centos192 var]# dd if=/dev/zero of=myfile.iso bs=1024k count=1000記錄了1000+0 的讀入記錄了1000+0 的寫出1048576000位元組(1.0 GB)已複製,24.0954 秒,43.5 MB/秒

(3)此時的分區sda1使用方式df結果:

[root@centos192 var]# df -h /dev/sda1檔案系統      容量  已用  可用 已用%% 掛載點/dev/sda1              49G  1.8G   44G   4% /var

du結果:

[root@centos192 var]# du -sh /var/1.6G/var/

此時兩者結果基本相同。

(4)類比一個進程開啟這個大檔案,然後刪除這個大檔案
[root@centos192 var]# tail -f myfile.iso &[1] 23277[root@centos192 var]# rm -f myfile.iso 


(5)此時,再對比du和df的結果首先確認有進程持有myfile.iso控制代碼。

[root@centos192 var]# lsof | grep myfile.isotail      23955      root    3r      REG                8,1 1048576000       7999 /var/myfile.iso (deleted)

[root@centos192 var]# du -sh /var/596M/var/[root@centos192 var]# df -h /dev/sda1檔案系統      容量  已用  可用 已用%% 掛載點/dev/sda1              49G  1.8G   44G   4% /var

可以看出,df結果沒有變化,而du則不再統計被刪除了的檔案myfile.iso。
(6)停止類比進程,再對比du和df結果首先確認沒有進程持有myfile.iso控制代碼。

[root@centos192 var]# lsof | grep myfile.iso[root@centos192 var]# 

[root@centos192 var]# du -sh /var/; df -h /dev/sda1596M/var/檔案系統      容量  已用  可用 已用%% 掛載點/dev/sda1              49G  776M   45G   2% /var

此時,myfile.iso已經沒有進程佔有它了,也就從磁碟上刪除了,分區的超級塊資訊已經更改,df也就顯示正常了。
4 工作中需要注意的地方(1)當出現du和df差距很大的情況時,考慮是否是有刪除檔案未完成造成的,方法是lsof命令,然後停止相關進程即可。(2)可以使用清空檔案的方式來代替刪除檔案,方式是:echo > myfile.iso。(3)對於經常發生刪除問題的記錄檔,以改名、清空、刪除的順序操作。(4)除了rm外,有些命令會間接的刪除檔案,如gzip命令完成後會刪除原來的檔案,為了避免刪除問題,壓縮前先確認沒有進程開啟該檔案。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.