Oto mój problem: muszę archiwizować, aby spakować dużo plików (do 60 TB) dużych plików (zwykle 30 do 40 GB każdy). Chciałbym zrobić sumy kontrolne (md5, sha1, cokolwiek) tych plików przed archiwizacją; jednak nie czytanie każdego pliku dwa razy (raz dla sumowania kontrolnego, dwa razy dla tarowania) jest mniej więcej koniecznością do osiągnięcia bardzo wysokiej wydajności archiwizacji (LTO-4 chce utrzymania 120 MB / s, a okno tworzenia kopii zapasowych jest ograniczone).
Potrzebuję więc sposobu na odczytanie pliku, karmienie narzędzia do sumowania z jednej strony i budowanie tar na taśmę z drugiej strony, coś dalej:
tar cf - files | tee tarfile.tar | md5sum -
Tyle że nie chcę sumy kontrolnej całego archiwum (robi to tylko ten przykładowy kod powłoki), ale sumy kontrolnej dla każdego pliku w archiwum.
Studiowałem opcje GNU tar, Pax, Star. Spojrzałem na źródło z Archiwum :: Tar . Nie widzę żadnego oczywistego sposobu na osiągnięcie tego. Wygląda na to, że będę musiał ręcznie zbudować coś w C lub podobnym, aby osiągnąć to, czego potrzebuję. Perl / Python / etc po prostu nie wyciszy go pod względem wydajności, a różne programy tar brakuje niezbędnej „architektury wtyczek”. Czy ktoś wie o istniejącym rozwiązaniu tego problemu, zanim zacznę kasowanie kodu?
7z
można wybrać hash i wydrukować go w taki sposób, sha1sum
a sha256sum
może zrozumieć: 7zip.bugaco.com/7zip/7zip_15_09/MANUAL/cmdline/commands/... (i sami-lehtinen.net/blog/... ) Wypróbuj: 7z h -scrcsha256 mydir/* | sed --regexp-extended 's, +[0-9]+ +, ,g' > mydir.sha256sum ; sha256sum -c mydir.sha256sum
(testowany z p7zip w wersji 15.09 beta)
tar
jeśli zdecydujesz się go napisać;)