E_FAIL 7zip 中的错误

E_FAIL 7zip 中的错误

我前一段时间使用 7zip 进行了备份,其中我将文件拆分为 14 个 2GB(大约)文件。我正在运行 Ubuntu 服务器 15.10。

这就是我试图运行以提取它们的内容:

7z x Backup.7z.001

以防万一我也尝试过(尽管我不明白“x”和“e”之间的区别):

7z e Backup.7z.001

这就是我得到的:

7-Zip 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=en_GB.UTF-8,Utf16=on,HugeFiles=on,2 CPUs)
Processing archive: Backup.7z.001
Error: E_FAIL 

我一直在做一些研究,似乎“E_FAIL”错误意味着“磁盘空间不足”。但是,我有足够的磁盘空间,这是我运行“df -h”时得到的结果

Filesystem               Size  Used Avail Use% Mounted on

udev                     791M     0  791M   0% /dev

tmpfs                    161M  5,6M  156M   4% /run

/dev/sda2                450G   73G  354G  18% /

tmpfs                    805M  4,0K  805M   1% /dev/shm

tmpfs                    5,0M     0  5,0M   0% /run/lock

tmpfs                    805M     0  805M   0% /sys/fs/cgroup

tmpfs                    161M     0  161M   0% /run/user/1000


/home/cristian/.Private  450G   73G  354G  18% /home/cristian

我尝试在许多目录 /home/cristian、/srv/samba/photos 等中提取它

答案1

我正在将 3.5 GB ISO 文件复制到 8 GB USB 闪存驱动器。

诊断

就我而言,我赞同 @kwubbufetowicz 并使用 strace 查看系统调用和信号,请参阅man strace

strace 7z x [source] -o[target] 2>&1 | tee 7z-strace.log

在最后 40 行左右的内容中有这样的序列:

open("[path to offending file]", O_WRONLY|O_CREAT, 0664) = 4
[...]
write(4, "[...])..."[...], 131072)          = 131071
munmap(0x7f1c9e0b3000, 135168)          = 0
write(4, "\354", 1)                     = -1 EFBIG (File too large)
close(3)                                = 0
close(4)                                = 0
brk(0x22be000)                          = 0x22be000
munmap(0x7f1c9c864000, 3837216)         = 0
rt_sigaction(SIGINT, {SIG_DFL, [INT], [...]
rt_sigaction(SIGTERM, {SIG_DFL, [TERM], [...]
write(1, "xtracting  [some file]/"..., 1108xtracting  [some file] 
[...]
ERROR: E_FAIL                

) = 1108
exit_group(2)                           = ?
+++ exited with 2 +++

因此,文件 4 上的写入成功,同一文件上的写入失败,并显示消息EFBIG(文件太大),然后一些文件关闭,一些中断和终止信号。最终,看到了之前的错误信息:错误:E_FAIL。违规文件大小为 4.3 GB。

另外,如果你问我的话,发送到终端的最终消息应该始终反映内部消息。在里面OP的pastebin, 你看

 write(1, "Error: E_FAIL                \n", 30Error: E_FAIL  ) = 30

这是一个一致的信息。就我而言,终端上的“错误:E_FAIL”(带有大写错误)在呼叫和信号跟踪中隐藏了“EFBIG(文件太大)”。

基本上,不要只看表面值,而是在跟踪中查找更多内容。另请注意字母大小写以及是否收到错误:E_FAIL 或错误:E_FAIL**。

行动

我找到了另一个博客文章2014 年,作者提出了三种途径:

  1. 您正在查看只读的压缩存档,例如 CD-ROM,并且您已要求 -7zip 对其进行写入。它无法执行此操作,因此会失败,就像没有磁盘空间一样。
  2. 您正在尝试解压缩到磁盘空间不足的驱动器。
  3. 您正在尝试将大文件解压缩到无法支持这么大文件的文件系统,因此会失败,就像没有磁盘空间一样。

我的问题是全新的闪存驱动器被格式化为 exFAT 或 FAT32,就像我的 Linux 机器上显示的那样。因此,大文件(>25GB)无法写入超过 4GB,这是 FAT32 的限制。

基本上,这不是磁盘剩余空间的问题。检查文件系统是否可以支持您要写入的文件大小。

结果

这个解决方案对我有用。我将 USB 驱动器从 FAT32 重新格式化为 NFTS,并且可以完成提取。提取后,总使用空间为 5.3 GB。

Everything is Ok

Folders: 85
Files: 942
Size:       5437451876
Compressed: 5443010560
) = 3646
exit_group(0)                           = ?
+++ exited with 0 +++

答案2

我刚刚有类似的错误。问题是“file.7z.002”丢失。我只是错误地将“file.7z.001”复制到新文件夹。

相关内容