df 命令結果顯示的 Size 不等於 Avail + Used

[root@dmdb2 log]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/cciss/c0d0p1     9.7G  538M  8.7G   6% /
/dev/cciss/c0d0p6     503G   35G  442G   8% /opt
/dev/cciss/c0d0p5     9.7G  158M  9.1G   2% /home
/dev/cciss/c0d0p3     9.7G  2.5G  6.8G  28% /usr
/dev/cciss/c0d0p2     9.7G  1.1G  8.2G  12% /var
tmpfs                 127G   36G   91G  28% /dev/shm
/dev/sddlmaa1         493G  531M  467G   1% /etl_loader
[root@dmdb2 log]# df 
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/cciss/c0d0p1     10153988    550000   9079872   6% /
/dev/cciss/c0d0p6    526902720  36508388 463197496   8% /opt
/dev/cciss/c0d0p5     10153988    161052   9468820   2% /home
/dev/cciss/c0d0p3     10154020   2604320   7025580  28% /usr
/dev/cciss/c0d0p2     10154020   1066128   8563772  12% /var
tmpfs                132135932  36923100  95212832  28% /dev/shm
/dev/sddlmaa1        516054864    543296 489297508   1% /etl_loader

爲什麼df -h的結果顯示中, Avail + Used 不等於Size列的值(tmpfs除外),你注意過嗎?!


以 /dev/sddlmaa爲例,首先用fdisk查看磁盤的大小:
[root@dmdb2 log]# fdisk -l /dev/sddlmaa

Disk /dev/sddlmaa: 536.8 GB, 536870912000 bytes
255 heads, 63 sectors/track, 65270 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

       Device Boot      Start         End      Blocks   Id  System
/dev/sddlmaa1               1       65270   524281243+  83  Linux

 [root@dmdb2 log]# expr 536870912000 / 1048576 / 1024
500

以上可以看出 /dev/sddlmaa 大小爲500GB, 但是df -h顯示的結果爲493G,誰動了我的7GB空間?!
猜想一下,文件系統元數據(inode), 保留空間,還是其他?

以下我們用tune2fs命令來查看 /dev/sddlmaa的superblock信息,看看7GB空間去哪兒了?
[root@dmdb2 log]# tune2fs -l /dev/sddlmaa1
tune2fs 1.39 (29-May-2006)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          b60c1597-b8df-4573-939f-9b9b7cbb27e8
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal resize_inode dir_index filetype needs_recovery sparse_super large_file
Default mount options:    (none)
Filesystem state:         clean
Errors behavior.:          Continue
Filesystem OS type:       Linux
Inode count:              65536000
Block count:              131070310
Reserved block count:     6553515
Free blocks:              128903916
Free inodes:              65535216
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      992
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         16384
Inode blocks per group:   512
Filesystem created:       Tue Sep 27 13:44:47 2011
Last mount time:          Fri May 11 05:43:36 2012
Last write time:          Fri May 11 05:43:36 2012
Mount count:              7
Maximum mount count:      35
Last checked:             Tue Sep 27 13:44:47 2011
Check interval:           15552000 (6 months)
Next check after:         Sun Mar 25 13:44:47 2012
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:            128
Journal inode:            8
Default directory hash:   tea
Directory Hash Seed:      04e7940a-f2d4-4ea0-b0a4-78134302d050
Journal backup:           inode blocks

根據tune2fs的結果,inode空間大小如下:
[root@dmdb2 log]# expr 65536000 \* 128 / 1048576 / 1024
7
正好是7GB,這驗證我們前面的猜測!

至此我們的7GB空間找回了,回到正題還以/dev/sddlmaa爲例, Size - Avail - Used= 516054864  -  543296 - 489297508 (KB)
[root@dmdb2 log]# echo "516054864  -  543296 - 489297508"|bc
26214060
這麼多26214060KB的空間哪兒去了呢? 系統隱藏了,保留了? 如果是,這些空間做什麼呢,可以被釋放嗎?


保留空間(Reserved block)做什麼的? 這個空間可以調整嗎(參考命令: tune2fs -m 0 )? 
保留空間功能:
1. 減少Linux文件系統碎片; 
2. 在磁盤分區沒有剩餘空間的時候.,root用戶也可以登陸維護,或者系統記錄日誌.
File system Reserved Block Count is supposed to reduce Linux file system defragmentation, 
to allow root user login for maintenance or to allow Linux system logging facility to function properly
in case file system running low of free disk space.

通常情況下,保留空間大小爲 (disk size - inode size ) * 5%

根據tune2fs的結果,保留空間大小如下:
[root@dmdb2 log]#  expr 6553515 \* 4
26214060 (KB)
這個值正好等於上面的 Size - Avail - Used


小結, df 命令結果顯示的 Size 不等於 Avail + Used, 實際上 Avail + Used = 0.95 * Size, 剩餘0.05爲保留空間.
這個Size爲磁盤可存儲數據的大小,實際的裸盤大小參考 fdisk -l中的bytes.

順便說一下,以前我們解釋過fdisk -l查看磁盤大小跟df -h結果顯示不一致的問題,還記得嗎?
原因如下:
1. fdisk -l 通常以1000bytes 爲1KB計數,因此顯示的大小GB要大於df -h的結果.
2. df 顯示的Size列,是剔除inode的大小(什麼是inode?)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章