2010/06/04

如何加速 dd?

dd 是很常見的命令,但是在大量資料的複製時,會顯得非常慢,最簡單的範例是
dd if=/dev/zero of=/vmem.img count=2G
2G 以目前來說非常常見,例如要把一個作業系統放到隨身碟中,或是像 ChromiumOS 也差不多就這個數值。

我把我測試執行的結果貼一下:

首先用 bs=4M 來試,這個數值是 ChromiumOS 的 script 中內建的值:

$ time dd if=my-8G.img of=/dev/sdc bs=4M

1919+1 records in
1919+1 records out
8050966528 bytes (8.1 GB) copied, 1189.83 s, 6.8 MB/s

real 19m49.848s
user 0m0.030s
sys 0m18.410s


接下來用預設的來比對,預設的 block size 是 512byte

$ sudo time dd if=my-8G.img of=/dev/sdc
15724544+0 records in
15724544+0 records out
8050966528 bytes (8.1 GB) copied, 6303.21 s, 1.3 MB/s

real 105m3.254s
user 0m7.740s
sys 1m36.380s


最後,用一個更大的比較一下,用 12M

$sudo  time dd if=my-8G.img of=/dev/sdc bs=12M
639+1 records in
639+1 records out
8050966528 bytes (8.1 GB) copied, 1060.62 s, 7.6 MB/s

real 17m40.653s
user 0m0.010s
sys 0m11.730s


會發現,4M 遠比預設值快非常多,而 12M 與 4M 相差不大,但是仍然有比較快。
以上僅供參考