Filesystems
zerofree 詳細返回什麼?
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 ; } }
結論
因此,經過一些詳細分析,這些數字看起來如下:
- 遇到的非零空閒塊的數量(隨後被歸零)
- 文件系統中的空閒塊數
- 文件系統中的總塊數