How do you calculate the optimal blocksize when running a
The optimal block size depends on various factors, including the operating system (and its version), and the various hardware buses and disks involved. Several Unix-like systems (including Linux and at least some flavors of BSD) define the
st_blksize member in the
struct stat that gives what the kernel thinks is the optimal block size.
The best way may be to experiment: copy a gigabyte with various block sizes and time that. (Remember to clear kernel buffer caches before each run:
echo 3 > /proc/sys/vm/drop_caches).
However, as a rule of thumb, I've found that a large enough block size lets
dd do a good job, and the differences between, say, 64 KiB and 1 MiB are minor, compared to 4 KiB versus 64 KiB. (Though, admittedly, it's been a while since I did that. I use a mebibyte by default now, or just let
dd pick the size.)