Могу ли я дублировать вывод канала?

Si está utilizando un dispositivo de bloque compartido, debe asegurarse de que está utilizando un sistema de archivos en clúster si tiene la intención de que ambos servidores puedan escribir en el sistema de archivos. De lo contrario, sin duda corromperá el sistema de archivos.

Ejemplos de sistemas de archivos en clúster:

GFS
Lustre
OCF
LizardFS

Si es una opción, puede ser más sencillo montar un recurso compartido NFS en ambos servidores, ya que esto manejará el bloqueo de archivos, etc.

7
05.06.2019, 11:24
3 ответа

Что касается производительности, вы можете быть ограничены ЦП. На самом деле 4,7 ТБ за 40 секунд как для MD5, так и для sha1sum кажутся быстрыми. Так что даже если вы работаете таким образом. Что бы это ни стоило, у вас будет уменьшенный дисковый ввод-вывод.

Вам действительно не нужно ddдля этого. Вы также можете просто записать вывод sha1sum и md5sum прямо в файл для последующего использования

.
tee < big.tgz  >(sha1sum > big.tgz.sha1 ) > >(md5sum > big.tgz.md5 )
sha1=`cat big.tgz.sha1`
md5=`cat big.tgz.md5`

Я предлагаю использовать такие временные файлы, как(big.tgz.sha1и big.tgz.md5), потому что, насколько мне известно, нет способа одновременно установить две переменные с разными значениями. Вы можете захватить один прямо в переменную, но не оба. А возможность одновременной записи md5sumи sha1sumв один и тот же стандартный вывод может привести к непредсказуемым проблемам.

4
27.01.2020, 20:18

Ну, вы можете просто добавить еще один редирект внутри:

tee < big.tgz >(sha1sum > big.tgz.sha1sum) >(md5sum > big.tgz.md5sum)

Вы также можете взять вывод как есть, учитывая, что легко различать sha1 и md5 (разной длины, поэтому не будет путаницы, что есть что ).

Существуют также утилиты, которые вычисляют несколько контрольных сумм самостоятельно, не прыгая через обручи tee.

На самом деле сказанное выше можно записать и безtee:

sha1sum big.tgz > big.tgz.sha1sum &
md5sum big.tgz > big.tgz.md5sum
wait # for sha1sum

Теоретически это плохо, так как данные считываются с диска дважды.

На практике параллельное выполнение (и фонового )чтения должно позволить дисковому кешу справиться с этим, чтобы данные по-прежнему считывались только один раз. Это предполагает, что вычисление хэша происходит быстро, а ввод-вывод медленный, поэтому ни один процесс не может убежать от другого.

(Ранее я писал о двойном чтении в другом контексте здесь:Использование pv с md5sum-хотя это обычно работает, есть некоторые риски, поэтому teeвсе еще является более надежным методом.)

2
27.01.2020, 20:18

parsetиз GNU Parallel предназначен для параллельной установки переменных, а --teeбудет передавать ввод для нескольких команд:

parset md5,sha1,sha256 --pipe --tee {} ::: md5sum sha1sum sha256sum < bigfile
echo $sha1

parset sumarr --pipe --tee {} ::: md5sum sha1sum sha256sum < bigfile
echo ${sumarr[1]}
2
27.01.2020, 20:18

Теги

Похожие вопросы