bug-tar
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

tar extract errors occurring rarely but with same symptoms


From: Daniel Villeneuve
Subject: tar extract errors occurring rarely but with same symptoms
Date: Sat, 5 Jun 2021 12:39:14 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.0

Hi,

Using tar 1.34 compiled from source, on RHEL 7.8.

I sometimes get an extract error using "tar zxf p.tar.gz", with lines like the 
following:

tar: XXXXXX_config/static: Cannot stat: No such file or directory
tar: etc/x86_64-pc-linux_el8-gnu/jre/lib/amd64/server: Cannot stat: No such 
file or directory
tar: etc/x86_64-pc-linux_el8-gnu/jre/lib/amd64: Cannot stat: No such file or 
directory
tar: etc/x86_64-pc-linux_el8-gnu/jre/lib: Cannot stat: No such file or directory
tar: etc/x86_64-pc-linux_el8-gnu/jre: Cannot stat: No such file or directory
tar: etc/x86_64-pc-linux_el8-gnu: Cannot stat: No such file or directory
tar: etc: Cannot stat: No such file or directory

A lot of tar files are created and extracted without problem.
And when a problem like the above occurs, our process tries it again and it 
usually succeeds (that is, I've never witnessed two successive failures).

The directories that fail happen to have symlinks in them, but not all such 
directories generate errors.

I've used strace within our processes to dump these tar extractions, in order 
to get a real pair of failure + success.


The error seems to occur in some post-processing after all files have been 
extracted, to set file times.
There is also this SIGCHLD in the failure.txt file that is not in success.txt.
Since I've setup strace, I have 2 such very similar errors over 3 days, over 
tens of similar tar extracts.

A sample from strace:


# last file extracted
mkdirat(AT_FDCWD, "util", 0750)         = 0
openat(AT_FDCWD, "util/GNUEmacs", 
O_WRONLY|O_CREAT|O_EXCL|O_NOCTTY|O_NONBLOCK|O_CLOEXEC, 0640) = 4
write(4, "(defun c-special-indent ()\n  \"Kl"..., 1024) = 1024
read(3, "-local 'font-lock-mode-hook)\n\n(a"..., 10240) = 10240
write(4, "-local 'font-lock-mode-hook)\n\n(a"..., 423) = 423
utimensat(4, NULL, [UTIME_OMIT, {tv_sec=978325200, tv_nsec=0} /* 
2001-01-01T00:00:00-0500 */], 0) = 0
close(4)                                = 0
close(3)                                = 0
# suspicious SIGCHLD
wait4(47737, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 47737
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=47737, 
si_uid=759245037, si_status=0, si_utime=674, si_stime=37} ---
# some successful file time updates
utimensat(AT_FDCWD, "util", [UTIME_OMIT, {tv_sec=978325200, tv_nsec=0} /* 
2001-01-01T00:00:00-0500 */], AT_SYMLINK_NOFOLLOW) = 0
newfstatat(AT_FDCWD, "prebuilt/x86_64-pc-linux_el6-gnu/jdk1.8.0", 
{st_mode=S_IFREG|000, st_size=0, ...}, AT_SYMLINK_NOFOLLOW) = 0
unlinkat(AT_FDCWD, "prebuilt/x86_64-pc-linux_el6-gnu/jdk1.8.0", 0) = 0
symlinkat("../../etc/x86_64-pc-linux_el6-gnu/jre", AT_FDCWD, 
"prebuilt/x86_64-pc-linux_el6-gnu/jdk1.8.0") = 0
utimensat(AT_FDCWD, "prebuilt/x86_64-pc-linux_el6-gnu/jdk1.8.0", [UTIME_OMIT, 
{tv_sec=978325200, tv_nsec=0} /* 2001-01-01T00:00:00-0500 */], AT_SYMLINK_NOFOLLOW) = 0
newfstatat(AT_FDCWD, "prebuilt/x86_64-pc-linux_el6-gnu/jdk1.8.0", 
{st_mode=S_IFLNK|0777, st_size=37, ...}, AT_SYMLINK_NOFOLLOW) = 0
openat(AT_FDCWD, "prebuilt/x86_64-pc-linux_el6-gnu/jdk1.8.0", 
O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
newfstatat(3, "", {st_mode=S_IFLNK|0777, st_size=37, ...}, AT_EMPTY_PATH) = 0
close(3)                                = 0
newfstatat(AT_FDCWD, "prebuilt/x86_64-pc-linux_el8-gnu/jdk1.8.0", 
{st_mode=S_IFREG|000, st_size=0, ...}, AT_SYMLINK_NOFOLLOW) = 0
unlinkat(AT_FDCWD, "prebuilt/x86_64-pc-linux_el8-gnu/jdk1.8.0", 0) = 0
linkat(AT_FDCWD, "prebuilt/x86_64-pc-linux_el6-gnu/jdk1.8.0", AT_FDCWD, 
"prebuilt/x86_64-pc-linux_el8-gnu/jdk1.8.0", 0) = 0
newfstatat(AT_FDCWD, "prebuilt/x86_64-pc-linux_el7-gnu/jdk1.8.0", 
{st_mode=S_IFREG|000, st_size=0, ...}, AT_SYMLINK_NOFOLLOW) = 0
unlinkat(AT_FDCWD, "prebuilt/x86_64-pc-linux_el7-gnu/jdk1.8.0", 0) = 0
linkat(AT_FDCWD, "prebuilt/x86_64-pc-linux_el6-gnu/jdk1.8.0", AT_FDCWD, 
"prebuilt/x86_64-pc-linux_el7-gnu/jdk1.8.0", 0) = 0
# first errors
newfstatat(AT_FDCWD, "XXXXXX_config/static/users", 0x7ffc9b136f50, 
AT_SYMLINK_NOFOLLOW) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "XXXXXX_config/static/unlockInLine.bm", 0x7ffc9b136f50, 
AT_SYMLINK_NOFOLLOW) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "XXXXXX_config/static/unlock.bm", 0x7ffc9b136f50, 
AT_SYMLINK_NOFOLLOW) = -1 ENOENT (No such file or directory)


The archives were created using options to guarantee reproducible results:

tar --sort=name --mtime=2001-01-01T00:00 -I 'gzip -n' -c -f p.tar.gz file1 
file2 file3 dir1 dir2 dir3

where file? and dir? all come from the same level of a given (sub)-directory, 
with an ordering that favors fast extraction of key files.

I had the same problem with tar 1.32.

I could recompile tar with local modifications, or try other things if 
suggested.

Regards,
--
Daniel Villeneuve



reply via email to

[Prev in Thread] Current Thread [Next in Thread]