Filesystems

zerofree 詳細返回什麼?

  • November 16, 2020

zerofree -v /dev/sda1返回

123642/1860888/3327744

手冊頁沒有解釋這些數字是什麼:http: //manpages.ubuntu.com/manpages/natty/man8/zerofree.8.html

我在 github 上找到了一些程式碼: https ://github.com/haggaie/zerofree/blob/master/zerofree.c

還有這一行:

if ( verbose ) {
 printf("\r%u/%u/%u\n", modified, free, fs->super->s_blocks_count);
}

所以我猜中間的數字是可用空間(以 kB 為單位?),第一個可能是用零覆蓋的數量,最後一個失去了我。

你怎麼看?

我在 Fedora 19 上安裝了相同的工具,我注意到.spec文件中有一個 URL 指向此頁面,標題為:保持文件系統圖像稀疏。此頁麵包含一些用於創建測試數據的範例,因此我執行了命令來創建相應的文件。

例子

$ dd if=/dev/zero of=fs.image bs=1024 seek=2000000 count=0
$ /sbin/mke2fs fs.image

$ ls -l fs.image 
-rw-rw-r--. 1 saml saml 2048000000 Jan  4 21:42 fs.image

$ du -s fs.image 
32052   fs.image

當我執行zerofree -v命令時,我得到以下資訊:

$ zerofree -v fs.image 
...counting up percentages 0%-100%...
0/491394/500000

用 filefrag 詢問

當我使用該工具filefrag查詢fs.image文件時,我得到以下資訊。

$ filefrag -v fs.image 
Filesystem type is: ef53
File size of fs.image is 2048000000 (500000 blocks of 4096 bytes)
ext:     logical_offset:        physical_offset: length:   expected: flags:
  0:        0..     620:   11714560..  11715180:    621:            
  1:    32768..   32769:   11716608..  11716609:      2:   11715181:
  2:    32892..   33382:   11716732..  11717222:    491:   11716610:
  3:    65536..   66026:   11722752..  11723242:    491:   11717223:
...

s_block_count您原始碼中引用的也與我的zerofree.c.

   if ( verbose ) {
           printf("\r%u/%u/%u\n", nonzero, free,
                           current_fs->super->s_blocks_count) ;
   }

所以我們現在知道這s_blocks_count是 500,000 個 4096 字節的塊。

用 tune2fs 詢問

我們還可以fs.image使用tune2fs.

$ sudo tune2fs -l fs.image | grep -i "block"
Block count:              500000
Reserved block count:     25000
Free blocks:              491394
First block:              0
Block size:               4096
Reserved GDT blocks:      122
Blocks per group:         32768
Inode blocks per group:   489
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)

從這個輸出中我們可以肯定地看到,報告的第二個和第三個數字zerofree實際上是:

Free blocks:              491394
Block count:              500000

回到原始碼

報告的第一個數字實際上是找到的不為零的塊數。這可以通過查看zerofree.

有一個稱為計數器,nonzero它在分析空閒塊的主循環中遞增。

           if ( i == current_fs->blocksize ) {
                   continue ;
           }

           ++nonzero ;

           if ( !dryrun ) {
                   ret = io_channel_write_blk(current_fs->io, blk, 1, empty) ;
                   if ( ret ) {
                           fprintf(stderr, "%s: error while writing block\n", argv[0]) ;
                           return 1 ;
                   }
           }

結論

因此,經過一些詳細分析,這些數字看起來如下:

  • 遇到的非零空閒塊的數量(隨後被歸零)
  • 文件系統中的空閒塊數
  • 文件系統中的總塊數

引用自:https://unix.stackexchange.com/questions/107911