Cześć!
Proponuję jeszcze sprawdzić czy nie będzie szybciej z innymi wielkościami "blocksize". Spróbuj na przykład bs=32k. W przypadku długotrwałego kopiowania może to zaoszczędzić trochę czasu.
Jak to określić ? Jako że odczyt z urządzenia blokowego jest domyślne buforowany, kolejne wywołania "dd" będą szybsze i zafałszują wyniki. Dlatego testy należy przeprowadzać z opcją "iflag=direct" . Pamiętaj również, że w Twoim przypadku wynik jest przesyłany przez potok którego bufor ma maksymalnie 64k więc większe wartości raczej nie pomogą.
Poniżej wklejam co uzyskałem u siebie (256 MB z dysku SCSI na /dev/null w trybie direct I/O czyli ignorując bufory). Jak widać warto poeksperymentować.
Standardowo - 512 bajtów:
time dd iflag=direct if=/dev/sda of=/dev/null bs=512 count=524288
524288+0 records in
524288+0 records out
268435456 bytes (268 MB) copied, 55.2004 s, 4.9 MB/s
real 0m55.204s
user 0m0.414s
sys 0m9.078s
1kB - z Twojego przykładu :
time dd iflag=direct if=/dev/sda of=/dev/null bs=1024 count=262144
262144+0 records in
262144+0 records out
268435456 bytes (268 MB) copied, 29.041 s, 9.2 MB/s
real 0m29.045s
user 0m0.252s
sys 0m4.839s
Jest duuużo lepiej - blok 32kB:
time dd iflag=direct if=/dev/sda of=/dev/null bs=32k count=8192
8192+0 records in
8192+0 records out
268435456 bytes (268 MB) copied, 4.8555 s, 55.3 MB/s
real 0m4.859s
user 0m0.005s
sys 0m0.197s
I dla porównania - 64kB czyli dużo lepiej już nie będzie:
time dd iflag=direct if=/dev/sda of=/dev/null bs=64k count=4096
4096+0 records in
4096+0 records out
268435456 bytes (268 MB) copied, 4.88619 s, 54.9 MB/s
real 0m4.890s
user 0m0.004s
sys 0m0.118s
Pozdrawiam
Micu