Как я могу архивировать вывод dd напрямую, возможно, без использования сжатия? - proUbuntu
3 голосов
/ 18 февраля 2015

В этом вопросе уже определено, что tar не может прочитать входные данные из stdin.

Как еще можно dd выводить в архив напрямую, без использования какого-либо сжатия? Цель выполнения всего за одну задачу - избежать записи выходных данных dd на целевой диск дважды (один раз в виде необработанного файла и один раз в виде архива) и избежать выполнения двух разных задач, что является пустой тратой. времени (поскольку входной файл должен быть прочитан и записан, а выходной прочитан, обработан и записан снова), и может оказаться невозможным, если целевой диск почти заполнен.

Я планирую сделать несколько резервных копий дисков, разделов и папок, и я хотел бы получить выгоду как от простоты хранения всего в одном файле, так и от скорости каждой задачи резервного копирования / потенциального восстановления.

1 Ответ

4 голосов
/ 09 марта 2015

Если вы хотите сбросить целое блочное устройство в файл, tar не будет полезен, потому что он не работает с блочными устройствами. Вместо этого вам нужно будет использовать dd или аналогичный:

dd if=/dev/sdX of=/path/to/backup bs=16m

Даже в таком случае было бы лучше использовать хотя бы небольшое сжатие, если оно не слишком сильно замедляет передачу. Короче говоря, вам нужен алгоритм сжатия с пропускной способностью, не намного меньшей, чем у вашего самого медленного носителя данных. Существует несколько таких алгоритмов сжатия. Наиболее известными являются Лемпель-Зив-Оберхумер , его производные L4Z и Snappy . Сравнение различных алгоритмов сжатия, в том числе трех, на странице проекта L4Z :

Name            Ratio  C.speed D.speed
                        MB/s    MB/s
LZ4 (r101)      2.084    422    1820
LZO 2.06        2.106    414     600
QuickLZ 1.5.1b6 2.237    373     420
Snappy 1.1.0    2.091    323    1070
LZF             2.077    270     570
zlib 1.2.8 -1   2.730     65     280
LZ4 HC (r101)   2.720     25    2080
zlib 1.2.8 -6   3.099     21     300

Ради этого ответа я выберу пример с LZO, потому что он легко доступен в репозиториях Canonical в виде lzop , но в конечном итоге все эти потоковые компрессоры имеют интерфейс, который читает из стандартного ввода и запись в стандартный вывод.

dd if=/dev/sdX bs=16m | lzop > /path/to/backup.lzo

Если вы хотите работать на одной машине во время резервного копирования, вы можете использовать ionice и / или nice / schedtool:

ionice -c 3 dd if=/dev/sdX bs=16m | ionice -c 3 schedtool -B -n 10 -e lzop > /path/to/backup.lzo
...