我知道做一個dd if=/dev/hda of=/dev/hdb
會做一個深度硬碟複製。我聽說人們可以透過使用該選項增加一次讀取和寫入的位元組數(預設值512
:)來加快該過程bs
。
我的問題是:
- 什麼決定了從硬碟複製的理想位元組大小?
和
- 為什麼這決定了理想的位元組大小?
答案1
作為克里斯小號寫在這個答案最佳區塊大小取決於硬體。根據我的經驗,它總是大於預設的 512 位元組。如果您使用原始設備,那麼覆蓋的檔案系統幾何結構將無法運作。我使用下面的腳本來幫助「優化」 dd 的區塊大小。
#!/bin/bash
#
#create a file to work with
#
echo "creating a file to work with"
dd if=/dev/zero of=/var/tmp/infile count=1175000
for bs in 1k 2k 4k 8k 16k 32k 64k 128k 256k 512k 1M 2M 4M 8M
do
echo "Testing block size = $bs"
dd if=/var/tmp/infile of=/var/tmp/outfile bs=$bs
echo ""
done
rm /var/tmp/infile /var/tmp/outfile
答案2
不幸的是,完美的大小將取決於您的系統匯流排、硬碟控制器、特定磁碟機本身以及每個磁碟機的驅動程式。找到完美尺寸的唯一方法是不斷嘗試不同的尺寸。公平警告,某些設備僅支援一種區塊大小,儘管這種情況很少見,而且通常驅動程式會彌補差異。
我發現 2^15 或 2^16 的區塊大小最適合連接到 Adaptec SAS RAID 控制器、4x PCIe、64 位元 FreeBSD 8.0-STABLE 的 WDC(8mb 快取)SATA 磁碟機。但對於我便宜的舊拇指驅動器來說,2^10 的大小似乎是最快的。
「完美尺寸」幾乎總是二的冪。
答案3
我可以保證在浪費任何時間之前測量對正在使用的設備執行測試的結果的優點。我愚蠢地沒有打擾,測量後,調整區塊大小將 590Gb 傳輸的 DD 持續時間縮短了一半。使用不同的球童/驅動器組合,相同的 BS 值只會減少 20% 的時間。