<video id="h99qi"><ins id="h99qi"><span id="h99qi"></span></ins></video>

        <var id="h99qi"><td id="h99qi"></td></var>
        1. <acronym id="h99qi"></acronym>
          <wbr id="h99qi"><code id="h99qi"><span id="h99qi"></span></code></wbr>

          1. <var id="h99qi"><th id="h99qi"></th></var>
            0712-2888027 189-8648-0214
            微信公眾號

            孝感風信網絡科技有限公司微信公眾號

            當前位置:主頁 > 技術支持 > Linux > df和du顯示的磁盤空間使用情況不一致的原因及處理

            df和du顯示的磁盤空間使用情況不一致的原因及處理

            時間:2024-01-23來源:風信官網 點擊: 629次

            在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
            文件系統<span style="white-space:pre">  </span>      容量  已用  可用 已用%% 掛載點
            /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.iso
            tail      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/sda1
            596M    /var/
            文件系統          容量  已用  可用 已用%% 掛載點
            /dev/sda1              49G  776M   45G   2% /var

            此時,myfile.iso已經沒有進程占有它了,也就從磁盤上刪除了,分區的超級塊信息已經更改,df也就顯示正常了。

            4 工作中需要注意的地方

            (1)當出現du和df差距很大的情況時,考慮是否是有刪除文件未完成造成的,方法是lsof命令,然后停止相關進程即可。
            (2)可以使用清空文件的方式來代替刪除文件,方式是:echo > myfile.iso。
            (3)對于經常發生刪除問題的日志文件,以改名、清空、刪除的順序操作。
            (4)除了rm外,有些命令會間接的刪除文件,如gzip命令完成后會刪除原來的文件,為了避免刪除問題,壓縮前先確認沒有進程打開該文件。

            熱門關鍵詞: df du 磁盤空間 使用情況
            欄目列表
            推薦內容
            熱點內容
            展開
            亚洲精品在线视频_18禁无码毛片精品久久久久久_精品熟妇无码av免费久久_午夜福利片