有没有能在 NAS / SMB 解压 zip 遇到网络中断能自动重试的

2025 年 4 月 27 日
 est

一个 100G 的 .zip 。。解压需要很长时间。每次到中途遇到网络中断,bandizip 就玩退出。。。。吐血。。。

只能复制到本地再解压。但是本地只有 256G (的确很傻) 不够放。。。

有啥 zip 遇到错误能自动重试,而不是退出?

4064 次点击
所在节点    Windows
55 条回复
gujuji
2025 年 4 月 27 日
太苦了,这样折腾,我是 6t ,我放在云盘
pxiphx891
2025 年 4 月 27 日
我建议你买一块 1TB 的移动硬盘
pxiphx891
2025 年 4 月 27 日
我查了一下 windows 也支持管道和 tar ,你可以试试 curl xxx | tar -xz 这种方式
NoOneNoBody
2025 年 4 月 27 日
怎么感觉这帖子和 OP 的人设不符啊,OP 应该是从事 IT 多年的人了
mikewang
2025 年 4 月 27 日
这种情况网不行也没什么好办法啊,网络会中断就先解决网络问题。

或者 NAS 和电脑之间套一层 WireGuard ,物理链路中断时,WireGuard 并不会断,等恢复就好了。

要么就 NAS 电脑网线直连,配静态 ip 传输。

要么就把电脑硬盘拆下来,塞 NAS 里内部传输。
opengps
2025 年 4 月 27 日
别转移问题,你自己说了是本地硬盘不够,硬要给解压软件增加功能真的没必要
kome
2025 年 4 月 27 日
把.zip 下载到本地,部分解压,然后删除.zip 中已解压的部分,然后再继续部分解压,继续删除已解压部分,依次循环直至完全解压。
就纯看有没有耐心了。
est
2025 年 4 月 27 日
@NoOneNoBody 真没折腾出来。哈。broken pipe 之后一般软件都退了。
其实二楼已经说得很明白了。我这里需要 句柄失效之后能优雅重试的解压软件。

smb 是支持 seek 的,理论上你弄一个 while true 死循环一直去重试打开这个 .zip 解压是可以解决网络中断 smb 失效问题的。

@mikewang 我猜网络不断,但是解压的文件读写操作会异常。
@pxiphx891 broken pipe 毫无悬念
@zsh2517 传输大文件快,大量小文件非常慢的。但是压缩文件肯定是传输最快的。
@MacsedProtoss 的确没表达清楚。远端先解压,再传输原始文件,很慢;解压远端.zip 文件效率更高。
@zsh2517 当然能部分解压,但是不知道是不是所有文件都正确解压了。选“覆盖” 浪费时间,选“跳过” 会不会把解压一半的文件搞坏?
@loveyu 用硬盘拷能解决单次问题,但是这里想解决以后重复出现的问题嘛
@kujou 的确需要升级网络和 NAS 了。但是希望软件能更 robust
est
2025 年 4 月 27 日
@kome 就是希望有软件能自动化支持这部分操作
wheat0r
2025 年 4 月 27 日
在 nas 端解压到某个目录,用 syncthing 把解压出来的目录同步过来
mikewang
2025 年 4 月 27 日
@est #29 其实这不是解压软件的问题,而是 OS 抛出错误后,应用继续往上抛了而已。我来解释一下实现重试的难点。

假设应用通过 fopen()打开文件,fread()到一半出错了,这个时候如果重新 fopen(),会面临一个版本问题:我重新读的文件还是原来那个吗?有没有被修改过?这些应用都不能判断。

虽然这些是 corner case ,不过一旦遇到都是 bug ,可能造成数据丢失。最保险的做法就是将错误原样抛出去,fail-fast 思想。

这个应当是 OS 层面的责任,比如 macOS 在 SMB 连接断开时,应用尝试 read()并不会立即失败,而是阻塞住直到连接恢复(或者超时几分钟后失败),通过 SMB 协议确保读到的文件没有发生改变。我不太熟悉 Windows 上的机制,不过可以确定这个在应用层是没法处理的。
yanqiyu
2025 年 4 月 27 日
@mikewang #31 [狗头] 应该提供远程文件系统的内核组件发现对端连不上了就直接把所有这个 fs 上的 syscall 无限 block 住🤓
mikewang
2025 年 4 月 27 日
@yanqiyu 这不就是 NFS 嘛,D-state 还 kill 不掉(悲)
ruanimal
2025 年 4 月 27 日
买个硬盘吧
yulgang
2025 年 4 月 27 日
Linux: unrar
Windows: 7zip
est
2025 年 4 月 27 日
@mikewang

> 会面临一个版本问题:我重新读的文件还是原来那个吗?有没有被修改过?这些应用都不能判断。

可以给用户两个选择嘛:

1. 照原来的路径再试试
2. 放弃

这样可以节省大量时间。否则之前的解压都(几乎)白费力气了
n43635
2025 年 4 月 27 日
楼主是内网还是外网解压文件?内网如果这么断要考虑是不是用了 wifi 可以换成有线,如果是有线考虑是否是路由器或者 NAS 不稳定?
外网的话这么弄说实话挺反直觉的,而且多次解压重试说实话文件有没有损坏都不好说了
我觉得更好的方法有两种:
1 是升级存储,如果是笔记本换不了硬盘或者加硬盘也可以外挂移动硬盘,然后远程传 zip 包在移动硬盘或电脑硬盘解压进行配合
2 是远程解压后再传到本地,如果楼主顾虑小文件多网速慢可以试着多线程传文件,很多工具都支持比如 beyond compare ,速度一般也不会慢太多
MoYi123
2025 年 4 月 27 日
看不懂你的问题,
如果是远程解压到远程本地, 用 nohup 开 unzip, 然后 ssh 关掉, 等会再连上去看结果就行.
如果是远程解压到本机, 你本机才 256G, 怎么解压?
est
2025 年 4 月 27 日
@MoYi123

远端 NAS 上 100G.zip 解压到 本地 256G 硬盘上的文件夹。
est
2025 年 4 月 27 日
@n43635 远端 100G 传输到本地解压软件,解压软件写文件夹。本地不需要额外的 100G 存储空间,直接拿到解压完毕的文件夹。这样说清楚没。

如果在 NAS 上解压,那么 NAS 上需要付出额外的存储成本+传输效率不如.zip 直接读取快

如果在本地解压,本地 256G 无法存下 100G.zip 和解压完成的文件夹

但是理论上解压软件可以在读取 NAS 失败的时候一直重试,而不是粗暴的退出。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/1128330

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX