我前一段时间使用 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 年,作者提出了三种途径:
- 您正在查看只读的压缩存档,例如 CD-ROM,并且您已要求 -7zip 对其进行写入。它无法执行此操作,因此会失败,就像没有磁盘空间一样。
- 您正在尝试解压缩到磁盘空间不足的驱动器。
- 您正在尝试将大文件解压缩到无法支持这么大文件的文件系统,因此会失败,就像没有磁盘空间一样。
我的问题是全新的闪存驱动器被格式化为 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”复制到新文件夹。