Параллельное выполнение команд с одного читаемого файла

Задача: допустим, при создании тяжелого бэкапа или вообще дампа диска, необходимо параллельно к созданию сжатого файла еще и создать контрольную сумму исходного файла.

Сделать это можно с помощью утилиты pee, входящей в состав пакета программ moreutils. Для установки в Ubuntu используем apt install moreutils.

Сделать это можно так:

dd if=test | pee «dd of=newtest» «sha512sum».

Результаты следующие:

Последовательное выполнение

Тут пришлось делать скрипт, т.к. time не хотел никак выполнять несколько команд. 
cat ./sc
#!/bin/bash
if=test of=newtest
sha512sum test

time ./sc 678d36fc5a1d14b23dcd04740604a643f2d3159167af1211ab779ac10394ac443a06feabee9d826fd715bce84e0d13ea75bc85fe990e340e775c1d9521c8dac9 test

real 0m24.453s
user 0m23.885s
sys 0m0.548s

[свернуть]

Параллельное выполнение

time dd if=test | pee «dd of=newtest» «sha512sum»
1228276+0 records in
1228276+0 records out
628877312 bytes (629 MB, 600 MiB) copied, 14.766 s, 42.6 MB/s
1228276+0 records in
1228276+0 records out
628877312 bytes (629 MB, 600 MiB) copied, 14.4783 s, 43.4 MB/s
678d36fc5a1d14b23dcd04740604a643f2d3159167af1211ab779ac10394ac443a06feabee9d826fd715bce84e0d13ea75bc85fe990e340e775c1d9521c8dac9 —

real 0m14.779s
user 0m12.009s
sys 0m22.671s

[свернуть]

Также можно сделать и с архивом:

tar cf — test | cat | pee «dd of=archive.tar» «sha512sum»

выведет контрольную сумму sha512 конечного архива, и, собственно говоря, сам архив будет создан.

где:

test — имя архивируемого файла/директории

archive.tar — имя конечного архива

Для создания сжатого архива, например, lz4:

tar cf — test | lz4 -z| cat | pee «dd of=archive.tar.lz4» «sha512sum»

Как мы видим, параллельное выполнение значительно быстрее, особенно при нескольких задачах, нежели последовательное, и при работе с большими файлами это просто необходимость.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *