Acabo de enterarme de que cpio tiene tres modos: copia, copia y transferencia.
Me preguntaba cuáles son las ventajas y desventajas de cpio en los modos de copia y entrada sobre tar. ¿Cuándo es mejor usar cpio y cuándo tar?
Pregunta similar para cpio en modo de transferencia versus cp.
¡Gracias y saludos!
Respuesta1
Esta es una descripción general extremadamente genérica:
CPIO hace un mejor trabajo al duplicar un sistema de archivos, incluida la realización de copias de seguridad. Conserva cosas como enlaces duros, fifos y otras características de archivos no estándar. La mayoría de las implementaciones de CPIO hacen todo lo que hace TAR, incluida la lectura y escritura de archivos .tar. CPIO normalmente toma una lista de archivos de la entrada estándar para archivarlos; esto hace que sea muy fácil canalizar una lista desde otra cosa (como find
).
El paso a través de CPIO es muy útil si tiene una lista muy larga de archivos que desea copiar del directorio A al directorio B. (Por ejemplo, puede usarlo find
para ubicar todos los archivos que han cambiado en los últimos 2 años en su sistema)
TAR hace un mejor trabajo simplemente volcando todos sus archivos estándar hacia/desde una cinta (o archivo de almacenamiento). Es un poco más sencillo de usar (para las tareas más comunes). Satisface fácilmente las sencillas demandas de copia de seguridad de la mayoría de las personas; y la mayor parte de su popularidad se debe a este hecho.
Y ahora la letra pequeña. Existen varias versiones e implementaciones diferentes de CPIO y TAR. Cada uno tiene características diferentes y algunos tienen diferentes opciones de línea de comando. Hay cosas que cada uno puede hacer donde el otro no; Si te encuentras limitado por uno, prueba el otro. Todo el mundo tiene un favorito y el 99% de las veces cualquiera de los dos realizará la tarea.
Respuesta2
En AE 3 redhat, descubrí que cpio tenía una limitación de tamaño de 2 GB en un flujo de salida. Sin embargo, tar no tenía esta limitación.
Otros sistemas pueden tener limitaciones diferentes.
Respuesta3
Por los comentarios y otros antecedentes, entiendo que cpio
ahora es menos omnipresente y es inconsistente entre las versiones. Pero cpio
tiene una ventaja que recientemente encontré invaluable al tratar con una gran cantidad de archivos tar corruptos. No se detiene ante el primer error en un archivo tar, sino que intenta omitir datos incorrectos y extraer la mayor cantidad posible. Por ejemplo,
tar xf ./sample.corrupt.tar
imprimirá
tar: Skipping to next header
tar: Exiting with failure status due to previous errors
después del primer error encontrado, mientras que
cpio -F ./sample.corrupt.tar -i -v
imprimirá los archivos extraídos y para cada error imprimirá:
cpio: invalid header: checksum error
cpio: warning: skipped 6 bytes of junk
cpio: invalid header: checksum error
cpio: warning: skipped 2 bytes of junk
etc...
El formato tar espera que cada encabezado de archivo esté alineado en un límite 512, pero si la corrupción desalinea los encabezados, cpio
hace el mejor esfuerzo para extraer tanto como sea posible.
Respuesta4
No veo ninguna razón para usar cpio por ningún otro motivo que no sea copiar archivos RPM abiertos, a través dedisrpmorpm2cpio, pero puede haber casos extremos en los que cpio sea preferible a tar.
Historia y popularidad
Ambosalquitránycpioson formatos de archivo competidores que se introdujeron enVersión 7 Unixen 1979 y luego incluido enPOSIX.1-1988, aunque solo quedó tar en el siguiente estándar, POSIX.1-20011.
El formato de archivo de Cpio ha cambiado varias veces y no sigue siendo totalmente compatible entre versiones. Por ejemplo, ahora existe una representación codificada en ASCII de datos de información de archivos binarios.
Tar es más conocido universalmente, se ha vuelto más versátil a lo largo de los años y es más probable que sea compatible con un sistema determinado. Cpio todavía se utiliza en algunas áreas, como laPaquete Red Hatformato (RPM), aunqueRPM v5(que es ciertamente oscuro) utilizaxaren lugar de cpio.
Ambos se encuentran en la mayoría de los sistemas tipo Unix, aunque tar es más común. Aquí estánEstadísticas de instalación de Debian:
#rank name inst vote old recent no-files (maintainer)
13 tar 189206 172133 3707 13298 68 (Bdale Garbee)
61 cpio 189028 71664 96346 20920 98 (Anibal Monsalve Salazar)
Modos
Copiar afuera: Esto es para la creación de archivos, similar atar -pc
Copiar: Esto es para extracción de archivos, similar atar -px
Pasar por: Esto es básicamente las dos cosas anteriores, similar tar -pc … |tar -px
pero en un solo comando (y por lo tanto microscópicamente más rápido). Es similar a cp -pdr
, aunque tanto cpio como (especialmente) tar tienen más posibilidades de personalización. Considere también rsync -a
, que la gente suele olvidar, ya que normalmente se utiliza a través de una conexión de red.
No he comparado su rendimiento, pero espero que sean bastante similares en CPU, memoria y tamaño de archivo (después de la compresión).