Это уже было определено в этом вопросе это tar
не может считать вход из stdin
.
Как еще может a dd
вывод быть заархивированным непосредственно возможно, не используя сжатия? Цель сделать все в единственной задаче состоит в том, чтобы не писать dd
вывод к целевому диску дважды (однажды как необработанный файл и однажды как архив), и постараться не выполнять две различных задачи, который является пустой тратой времени (так как входной файл должен быть считан и записан и выходное чтение, обработанное и записанное снова), и может быть невозможным, если целевой диск почти полон.
Я планирую сделать несколько резервных копий дисков, разделов и папок, и я хотел бы извлечь выгоду и из простоты хранения всего в единственный файл и от скорости каждого резервного копирования / потенциал восстанавливает задачу.
Если Вы хотите вывести целое блочное устройство в файл, tar
не будет иметь применения, потому что оно не работает с блочными устройствами. Вместо этого необходимо будет использовать dd
или подобный:
dd if=/dev/sdX of=/path/to/backup bs=16m
Даже как это было бы лучше использовать, по крайней мере, немного сжатия, пока это не замедляет передачу слишком много. Короче говоря, Вам нужен алгоритм сжатия с пропускной способностью не намного ниже, чем тот из Вашего самого медленного носителя. Существуют несколько таких алгоритмов сжатия. Самым известным является Lempel–Ziv–Oberhumer, его производная L4Z, и Мгновенный. Существует сравнение различных алгоритмов сжатия включая те три на странице проекта 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