Estoy usando tar
para archivar un grupo de archivos muy grandes (multi-GB) bz2
.
Si uso tar -tf file.tar
para enumerar los archivos dentro del archivo, esto lleva mucho tiempo en completarse (~ 10-15 minutos).
Del mismo modo, cpio -t < file.cpio
lleva el mismo tiempo completarlo, más o menos unos segundos.
En consecuencia, recuperar un archivo de un archivo (a través de, tar -xf file.tar myFileOfInterest.bz2
por ejemplo) es tan lento.
¿Existe algún método de archivo que mantenga un "catálogo" fácilmente disponible con el archivo, de modo que se pueda recuperar rápidamente un archivo individual dentro del archivo?
Por ejemplo, algún tipo de catálogo que almacena un puntero a un byte particular en el archivo, así como el tamaño del archivo que se va a recuperar (así como cualquier otro dato específico del sistema de archivos).
¿Existe una herramienta (o argumento para tar
o cpio
) que permita la recuperación eficiente de un archivo dentro del archivo?
Podrías usar SquashFS para dichos archivos. Es
El único inconveniente que conozco es que es de solo lectura.
http://squashfs.sourceforge.net/ http://www.tldp.org/HOWTO/SquashFS-HOWTO/whatis.html
fuente
Si bien no almacena un índice,
star
se supone que es más rápido quetar
. Además, admite nombres de archivo más largos y tiene un mejor soporte para los atributos de archivo.Como estoy seguro de que sabe, descomprimir el archivo lleva tiempo y probablemente sería un factor en la velocidad de extracción, incluso si hubiera un índice.
Editar: es posible que también desee echar un vistazo
xar
. Tiene un encabezado XML que contiene información sobre los archivos en el archivo.De la página referenciada:
fuente
star
is down ......Thorbjørn Ravn Anderser tiene razón. GNU tar crea archivos "buscables" por defecto. Pero no usa esa información cuando lee estos archivos si no se da la opción -n. Con la opción -n, acabo de extraer un archivo de 7GB del archivo de 300GB en el tiempo requerido para leer / escribir 7GB. Sin -n tomó más de una hora y no produjo ningún resultado.
No estoy seguro de cómo la compresión afecta esto. Mi archivo no fue comprimido.Los archivos comprimidos no son "buscables" porque el alquitrán actual (1.26) GNU descarga la compresión al programa externo.fuente
El único formato de archivo que conozco que almacena un índice es ZIP, porque he tenido que reconstruir índices corruptos más de una vez.
fuente
No sé qué índice sé, pero uso volcado y restauración con archivos grandes, y navegar por el árbol de restauración en modo interactivo para seleccionar archivos aleatorios es MUY rápido.
fuente
Puede usar el formato de archivo / compresión 7z (7zip) si tiene acceso al
p7zip-full
paquete.En Ubuntu puedes usar este comando para instalarlo:
Para crear un archivo que puede usar
7z a <archive_name> <file_or_directory>
y si no desea comprimir los archivos y simplemente quiere "almacenarlos" tal cual, puede usar la-mx0
opción como:Luego puede extraer los archivos usando
7z e
:O puede enumerar el índice del archivo con el
7z l
que es útil para buscar congrep
:Esta es también la
t
opción para probar la integridad,u
agregar / actualizar un archivo al archivo yd
eliminar un archivo.NOTA IMPORTANTE
Do no utilizar el formato 7zip para Linux del sistema de archivos de copias de seguridad, ya que no almacena el propietario y el grupo de los archivos contenidos.
fuente
Creo que GNU tar es capaz de hacer lo que quieres, pero no puedo encontrar un recurso definitivo que lo diga.
En cualquier caso, necesita un formato de archivo con un índice (ya que eso le permitirá hacer lo que quiera). No creo que los archivos ZIP puedan crecer tanto, desafortunadamente.
fuente