Używam tar
do archiwizacji grupy bardzo dużych bz2
plików (wielu GB) .
Jeśli użyję tar -tf file.tar
do wyświetlenia listy plików w archiwum, zajmuje to bardzo dużo czasu (~ 10-15 minut).
Podobnie, cpio -t < file.cpio
wypełnienie zajmuje tyle samo, co kilka sekund plus lub minus.
W związku z tym pobieranie pliku z archiwum ( tar -xf file.tar myFileOfInterest.bz2
na przykład przez) jest równie powolne.
Czy istnieje metoda archiwizacji, która utrzymuje łatwo dostępny „katalog” z archiwum, aby można było szybko pobrać pojedynczy plik w archiwum?
Na przykład jakiś katalog, który przechowuje wskaźnik do określonego bajtu w archiwum, a także rozmiar pliku do pobrania (a także inne szczegółowe informacje dotyczące systemu plików).
Czy istnieje narzędzie (lub argument do tar
lub cpio
), które umożliwia wydajne pobieranie pliku w archiwum?
Możesz użyć SquashFS do takich archiwów. To jest
Jedyną wadą, jaką znam, jest to, że jest tylko do odczytu.
http://squashfs.sourceforge.net/ http://www.tldp.org/HOWTO/SquashFS-HOWTO/whatis.html
źródło
Chociaż nie przechowuje indeksu,
star
jest rzekomo szybszy niżtar
. Ponadto obsługuje dłuższe nazwy plików i ma lepszą obsługę atrybutów plików.Jestem pewien, że zdajesz sobie sprawę, że dekompresja pliku zajmuje dużo czasu i prawdopodobnie byłaby czynnikiem wpływającym na szybkość wyodrębniania, nawet gdyby istniał indeks.
Edycja: możesz także rzucić okiem
xar
. Ma nagłówek XML, który zawiera informacje o plikach w archiwum.Z odnośnej strony:
źródło
star
is down ......Thorbjørn Ravn Anderser ma rację. GNU tar domyślnie tworzy „widoczne” archiwa. Ale nie korzysta z tych informacji, gdy czyta te archiwa, jeśli nie podano opcji -n. Z opcją -n właśnie wyodrębniłem plik 7 GB z archiwum 300 GB w czasie wymaganym do odczytu / zapisu 7 GB. Bez tego zajęło to więcej niż godzinę i nie przyniosło żadnego rezultatu.
Nie jestem pewien, jak wpływa na to kompresja. Moje archiwum nie zostało skompresowane.Skompresowane archiwa nie są „widoczne”, ponieważ bieżąca (1.26) tar GNU odciąża kompresję do programu zewnętrznego.źródło
Jedynym znanym mi formatem archiwum, w którym przechowywany jest indeks, jest ZIP, ponieważ musiałem zrekonstruować uszkodzone indeksy więcej niż raz.
źródło
Nie indeksuje tego, co znam, ale używam zrzutu i przywracania z dużymi plikami, a nawigacja po drzewie przywracania w trybie interaktywnym, aby wybrać losowe pliki, jest BARDZO szybka.
źródło
Jeśli masz dostęp do
p7zip-full
pakietu, możesz użyć formatu archiwum / kompresji 7z (7zip) .W systemie Ubuntu możesz użyć tego polecenia, aby je zainstalować:
Aby utworzyć archiwum, którego możesz użyć,
7z a <archive_name> <file_or_directory>
a jeśli nie chcesz kompresować plików i chcesz je po prostu „zapisać” w stanie, w jakim się znajduje, możesz użyć-mx0
opcji:Następnie możesz wyodrębnić pliki, używając
7z e
:Możesz też wymienić indeks archiwum,
7z l
który jest przydatny do wyszukiwania za pomocągrep
:Jest to również
t
opcja testowania integralności,u
dodawania / aktualizowania pliku do archiwum orazd
usuwania pliku.UWAGA
Do nie używać formatu 7zip dla Linuksa systemu plików kopii zapasowych, ponieważ nie przechowywać właściciela i grupę plików zawartych.
źródło
Wierzę, że GNU tar jest w stanie robić to, co chcesz, ale nie mogę znaleźć ostatecznego zasobu, który to mówi.
W każdym razie potrzebujesz formatu archiwizacji z indeksem (ponieważ pozwoli ci to robić, co chcesz). Nie wierzę, że pliki ZIP mogą niestety urosnąć tak bardzo.
źródło