2009-04-20 8 views
6

tar -xvzf $ filename.tar.gz || {exit $ ?; }Código de error 141 con tar

Aquí mis guiones saldrían con errorCode 141. Estoy utilizando Fedora Core 6 con la versión 1.15 de alquitrán

no lo puedo sucede todo el tiempo, pero más del 70 por ciento de las veces se produce un error.

Respuesta

0

Como solución temporal, ahora estamos utilizando cpio para archivar, que funciona bien para nosotros ahora, aunque me gustaría saber por qué el alquitrán está causando este problema, su uso prolongado y su uso como herramienta estándar durante años.

1

GNU tar solo devuelve algunas cosas, ninguna de ellas es -141. sin embargo, si está ejecutando un subproceso, como gzip, y ese proceso termina anormalmente, devuelve ese código de retorno.

No estoy seguro de lo que podría haber sido el subproceso. Pruébalo con --verbose y mira si tienes alguna pista.

+0

Cambié mis scripts para hacer gunzip $ filname.tar.gz; tar -xvf $ filename.tar otra vez su tar que falla con 141 –

+0

¿Intentó ejecutarlo con --verbose, y obtuvo alguna pista?tar también ejecuta rmt para cintas remotas; un problema intermitente podría ser un problema de red con las unidades de cinta. Saber qué sistema operativo está ejecutando puede ser útil. –

+0

Oh, no importa el sistema operativo, lo veo ahora. –

15

Me doy cuenta de que este hilo tiene más de unos pocos años, pero estoy comentando para aquellas personas que tropiezan con este hilo con el error.

Siempre que utilice una opción de compresión, tar abre implícitamente una conexión al programa subyacente utilizando un conducto. Entonces, en el ejemplo de OP: tar -xvzf $filename.tar.gz, lo que harás realmente será ejecutar algo similar a esto: gunzip $filename.tar.gz | tar -xv -. Puede verificar esto ejecutando un top, donde verá dos procesos (uno para tar y otro para gzip).

A veces, sin embargo, la tubería se rompe. Por ejemplo, si el archivo no es un archivo gzip. Tome esto por ejemplo: tar -xvzf somefile.iso, que sería equivalente a gunzip somefile.iso | tar -xv -. En tal situación, gzip se equivocará. Cuando los errores gzip salgan, la tubería se romperá. Otra posibilidad sería si el archivo gzip era correcto, pero el archivo tar dentro de él estaba dañado. En este caso, gzip comienza a enviar la secuencia sin comprimir a tar, pero luego tar se da cuenta de que algo está mal y cierra la transmisión. gzip aquí saldrá error, porque su salida está cerrada.

En los valores de salida, un valor superior a 128 indica la terminación debido a una señal, y el valor superior a 128 significa qué señal provocó la terminación. Entonces, si restamos 128 del código de salida del OP de 141, obtenemos 13, que corresponde a SIGPIPE (man 7 signal para obtener una lista de señales estándar y sus valores enteros correspondientes).

La página man enumera el comentario de SIGPIPE como "Tubo roto: escriba en la tubería sin lectores". Entonces, parece que gzip intenta escribir en el conducto, pero tar ha dejado de escuchar. Supongo que gzip está descomprimiendo el archivo con éxito, pero la secuencia no comprimida no es un archivo tar válido. Mi consejo aquí sería ejecutar gunzip en el archivo, luego ejecutar tar en el archivo de resultados y ver cuál falla (basado en el SIGPIPE, mi suposición aquí es que el alquitrán fallará). En cualquier caso, parece que estas versiones de las herramientas no leen el archivo (ya sea corrupción o un conflicto de versión de algún tipo).

¿Cómo se hicieron estos archivos (qué opciones para tar, etc)? ¿Se crearon en esta máquina u otra máquina? Si crea un archivo .tar.gz en esta máquina, ¿puede esta misma máquina extraer esos archivos sin el error?

+0

gracias! tiene sentido. Obtuve el error 141 cuando usé tar -xzf dentro de una sesión nohup que fue lanzada por un proceso que fue aniquilado por el comando anterior al comando tar. mi solución fue retrasar la matanza del proceso principal por el proceso secundario hasta después de extraer el tarball. es posible que la redirección de la salida de alquitrán haya ayudado, pero no lo intenté. –

+0

Esto también puede ocurrir cuando la salida de 'tar' se canaliza a otro proceso que cierra la tubería temprano, p. 'tar -tf x.tar | cabeza' o 'tar -tf x.tar | grep -q .' ('head' cierra la tubería después de leer el número especificado de líneas,' grep -q' cierra la tubería tan pronto como se ve el patrón.) – bain

Cuestiones relacionadas