服务器剩余6G空间,如何转移待销毁服务器上60G含海量小文件的文件夹?
嘿,这个场景我太熟了——几十万个小文件堆得60G,还没空间打包,直接scp慢到让人崩溃!给你几个亲测好用的方案,按需选:
方案1:边压缩边传输,完全不占本地空间
既然本地剩余空间不够存打包文件,那咱们直接让压缩后的数据流通过管道传到远程,根本不用在本地生成归档文件。tar处理小文件的效率比scp高很多,再加上压缩,传输速度能提一大截。
执行命令:
tar -czf - /path/to/your/target/folder | ssh your-user@remote-server-ip "cat > /path/to/save/archive.tar.gz"
- 要是怕中途断连看不到进度,可以先装个
pv工具(apt install pv或yum install pv),改成下面的命令就能实时看传输速度和进度条:tar -czf - /path/to/your/target/folder | pv | ssh your-user@remote-server-ip "cat > /path/to/save/archive.tar.gz" - 网络不稳定的话,给ssh加个
-C参数开启额外压缩(和tar的-z不冲突,极端情况下能再省点带宽)。
方案2:用rsync高效同步小文件
rsync绝对是小文件同步的神器,比scp友好太多。它会自动对比本地和远程的文件差异,只传输需要更新的部分,万一中途断连,重新执行命令就能续传,不用从头再来。而且它自带传输压缩,不用额外打包。
执行命令:
rsync -avz --progress --partial /path/to/your/target/folder/ your-user@remote-server-ip:/path/to/destination/folder/
参数解释:
-a:归档模式,保留文件权限、修改时间等所有属性-v:显示详细同步日志,方便看进度-z:传输时压缩数据,减少带宽占用--progress:实时显示单个文件的传输进度--partial:保留未传完的文件,断连后不用重新传整个文件
方案3:如果不需要保留数据,直接安全销毁
要是这些数据根本不用迁移,那直接跳过传输步骤,专心销毁就行:
快速销毁(适合紧急情况):先删除文件,再用零填充磁盘(覆盖原有数据)
rm -rf /path/to/your/target/folder && dd if=/dev/zero of=/dev/your-disk-partition bs=1M status=progress注意:替换
/dev/your-disk-partition为实际的磁盘分区(比如/dev/sda1),操作前一定要确认分区,别误删系统盘!更安全的多轮销毁:用
wipe工具(先安装:apt install wipe或yum install wipe),它会多轮覆盖数据,更难恢复wipe -r /path/to/your/target/folder
另外,要是云服务器,建议先查看服务商的磁盘销毁政策,很多平台会在销毁实例时自动擦除磁盘,但自己动手做一遍会更放心。
额外实用小技巧
- 不管用哪个传输命令,最好用
screen或tmux来运行,避免SSH断开后进程中断:- 输入
screen回车进入新会话 - 执行传输命令
- 就算关掉终端,重新连服务器后输入
screen -r就能回到之前的会话,继续查看进度
- 输入
- 如果能临时挂载额外存储(比如云硬盘、USB盘),也可以先把文件打包到挂载盘再传输,但要是没法挂载就忽略这个思路。
内容的提问来源于stack exchange,提问作者Oliver Williams
相关产品推荐
相关产品推荐

