dd bs=32M if=/dev/sda | gzip -c -9 | dd bs=512k of=image.gz
То-есть, посекторно читаем диск /dev/sda, сжимаем его в gzip с максимальным сжатием и записываем в файл image.gz. Размеры блока (параметр bs для dd) подбирается экспериментально. Тут получается неплохо.
Но это можно убыстрить. Потому что данный процесс упирается не в производительность диска, а в производительность процессора, из-за сжатия.
Как? Очень просто. Надо использовать не gzip, а pigz (произносится "пигзи"). Это тот же самый gzip, но распараллеленный. Производительность растёт -- просто обалдеть, как. Обычный gzip нагружал машину максимум на 12% (восьмиядерный процессор, 1/8). pigz легко фигачит на все 60%.
То-есть, вот так:
dd bs=32M if=/dev/sda | pigz -c -9 | dd bs=512k of=image.gz
Или, в обратном порядке, развернуть образ на диск:
dd bs=512k if=image.gz | pigz -d | dd bs=128M of=/dev/sda
Данный способ я использую для клонирования дисков рабочих станций. Так как ко всему этому можно подцепить netcat, диски можно клонировать прямо по сети.
Так вот, при использовании gzip я пишу на диск со скоростью 170 мегабайт в секунду. При использовании pigz -- 440 мегабайт в секунду. Разница, мягко говоря, есть.
Способ применим, разумеется, ко всем юниксовым средствам бекапа -- хотя бы к тому же mysqldump.