首頁 > Linux 進階操作技巧, 教學雜記 > Linux 下的磁碟重組問題

Linux 下的磁碟重組問題

分享

相信很多朋友在 M$ Windows 下使用的經驗過程中,一定都有操作過 “磁碟重組” 這個程式,但在 Linux 檔案系統上似乎我們很少聽到需要進行磁碟重組與看到磁碟重組的程式,這是為什麼呢 ? 其實,在 Linux 檔案系統下並非 “不需要” 進行磁碟重組,而是發生的機率遠低於 FAT 檔案系統而已,若是我們需要知道檔案系統是否有不連續的狀態 ( non-contiguous ) 出現時,可以透過 fsck 指令工具來進行操作,例如:

ns1:~ # fsck -nvf /dev/sdb1
fsck from util-linux-ng 2.16
e2fsck 1.41.9 (22-Aug-2009)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
/lost+found not found. Create? no

Pass 4: Checking reference counts
Pass 5: Checking group summary information

/dev/sdb1: ********** WARNING: Filesystem still has errors **********
48 inodes used (0.00%)
5 non-contiguous files (10.4%)
2 non-contiguous directories (4.2%)
# of inodes with ind/dind/tind blocks: 0/0/0
Extent depth histogram: 25/14
5965907 blocks used (2.44%)
0 bad blocks
1 large file

35 regular files
4 directories
0 character device files
0 block device files
0 fifos
0 links
0 symbolic links (0 fast symbolic links)
0 sockets
——–
39 files

這裡有一篇文章,針對 Linux 檔案系統為何不太需要進行磁碟重組,有十分簡單的說明,有興趣的朋友可以參考一下:Why doesn’t Linux need defragmenting ?

在 Linux 檔案系統中我們是採用索引式檔案系統 ( indexed allocation ) 的運作方式,簡單來說,當我們產生一個檔案之後,這個檔案會取得一個 i-node 位置,裡面會記載這個檔案的相關 metadata 的訊息與包含資料放在那幾個 data block 內,因此當我們存取這個檔案時,便可以快速的取得所有 data block 的位置。而在 FAT 檔案系統下的運作方式則是透過每一個儲存的 data block 間互相告知下一個 data block 的所在位置,這種模式稱之為鏈結串列,但也因為如此,當我們存取放置在兩個檔案系統下的檔案時,會發現 Linux 檔案系統的存取效能會優於 FAT 檔案系統格式,因為我們可以很快速地知道所有 data block 放在什麼地方而一次取得,但 FAT 檔案系統必須反覆的存取這些 data block 才可以串起一個資料內容,一來一反間變增加許多存取時間。

但如果我們真的需要在 Linux 檔案系統下進行重組呢 ? 其實,也是可以,底下有幾個工具有興趣的朋友可以試試看:

  • SHAKE:Shake is a defragmenter that runs in userspace, without the need of patching the kernel and while the system is used (for now, on GNU/Linux only).

    ns1:~ # wget http://download.savannah.nongnu.org/releases/shake/shake-0.999.tar.bz2
    ns1:~ # tar jxvf shake-0.999.tar.bz2
    編譯 shake 需要使用 cmake、libattr-devel、help2man,因此編譯前可以先透過 yum 或者是 zypper 於作業系統內先行安裝:
    ns1:~# cmake /root/shake-fs-0.999
    當你執行 cmake 時已經安裝了 libattr-devel 卻一時反應沒安裝的情況時,請修改 /root/shake-fs-0.999/CMakeLists.txt 檔案,將 78、86、87、88這四行註解後重新執行 cmake 就可以

    ns1:~ # cd shake-fs-0.999/
    ns1:~/shake-fs-0.999 # make ; make install

    在使用 shake 重組磁碟時,必須先將磁碟裝置掛載到目錄,並且記得掛載 user_xattr 參數

    ns1:~ # mount -o user_xattr /dev/sdb1 /data
    ns1:~ # mount | grep data
    /dev/sdb1 on /data type ext4 (rw,user_xattr)

    ns1:~ # /usr/local/bin/shake /data
    ns1:~# umount /data
    重組後,可以在執行一次 fsck 檢查一下不連續的狀態,重輸出結果便可以發現已經有所改善

    ns1:~ # fsck -nvf /dev/sdb1
    fsck from util-linux-ng 2.16
    e2fsck 1.41.9 (22-Aug-2009)
    Warning! /dev/sdb1 is mounted.
    Warning: skipping journal recovery because doing a read-only filesystem check.
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    /lost+found not found. Create? no

    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    Free blocks count wrong (238224093, counted=238224094).
    Fix? no
    /dev/sdb1: ********** WARNING: Filesystem still has errors **********
    48 inodes used (0.00%)
    1 non-contiguous file (2.1%)
    2 non-contiguous directories (4.2%)
    # of inodes with ind/dind/tind blocks: 0/0/0
    Extent depth histogram: 26/13
    5965907 blocks used (2.44%)
    0 bad blocks
    1 large file

    35 regular files
    4 directories
    0 character device files
    0 block device files
    0 fifos
    0 links
    0 symbolic links (0 fast symbolic links)
    0 sockets
    ——–
    39 files

  • defrag:這是另外一隻重組腳本程式,使用方式比較簡單先,直接透過 Shell 下執行該程式指定針對的裝置便可以進行檢查重組
    ns1:~ # wget http://ck.kolivas.org/apps/defrag/defrag-0.08/defrag
    –2013-05-13 10:05:28– http://ck.kolivas.org/apps/defrag/defrag-0.08/defrag
    Resolving ck.kolivas.org… 193.19.136.183
    Connecting to ck.kolivas.org|193.19.136.183|:80… connected.
    HTTP request sent, awaiting response… 200 OK
    Length: 2773 (2.7K) [text/plain]
    Saving to: `defrag’

    100%[======================================>] 2,773 –.-K/s in 0.001s

    2013-05-13 10:05:29 (1.77 MB/s) – `defrag’ saved [2773/2773]

    ns1:~ # sh defrag /dev/sdb1
    Creating list of files…
    511 files will be reordered

    0 files left
    Succeeded

  • 在 Ubuntu 底下還有一個針對 EXT4 檔案系統的重組程式,e4defrag,有興趣的朋友也可以試試看,使用方式可以參考這篇文章:Defragment Ext4 File systems using e4defrag (Ubuntu)
  1. 目前尚無任何的評論。
  1. 目前尚無任何 trackbacks 和 pingbacks。

(若看不到驗證碼,請重新整理網頁。)

*