(обратите внимание, это не дубликат Создание файла tar с включенными контрольными суммами)
Я знаком с использованием tar + gzip для создания сжатого файла tar (tar cf - files | gzip > something.tar.gz
), а gzip добавляет основную контрольную сумму, поэтому будет очевидно, если файл будет поврежден. Это почти то поведение, которое я хочу.
Однако у меня есть компьютер с (действительно) медленным процессором, но быстрой сетевой картой. Я обнаружил, что если я использую tar плюс gzip плюс socat, моя сетевая передача составляет 1/10 скорости (100 Мбит / с) по сравнению с исключением команды gzip из конвейера (950 Мбит / с).
Некоторые архивные утилиты, такие как 7Zip и Zip, поддерживают нулевое сжатие. Я не вижу, чтобы у gzip или bzip2 была такая опция. Но Zip и 7Zip не поддерживают правильную потоковую передачу, как gzip и bzip2 (я знаю, что 7z может читать / записывать открытый текст из stdio, но не записывает сжатый файл в stdout). У меня должна быть правильная программа сжатия потоковой передачи, потому что я буду использовать socat для отправки архива на удаленный хост.
Итак, вопрос в том, есть ли способ создать tar-архив, обернув вывод в формат, подобный архиву, без использования gzip или bzip2? Или есть способ заставить gzip или bzip2 использовать "без сжатия"? Или есть очень простая сверхбыстрая утилита сжатия потоковой передачи, которая может использовать только кодировку RLE?
предостережения - он должен быть полностью потоковым, чтобы я мог использовать socat; решение должно быть легким для процессора; решение должно использовать части, доступные в репозиториях cygwin и debian
Ты можешь использовать lz4
в качестве замены gzip. Степень сжатия не такая хорошая, но обычно она молниеносная по сравнению с gzip.
Он все еще может быть слишком медленным для того, что вы пытаетесь сделать, но, вероятно, на него стоит взглянуть.
Вы также можете tee
выход tar
на два разных потока и вставьте один из них в md5sum
, sha1sum
или sha256sum
позвонив tar cf - files | tee >(md5sum) | whatever-command
.