You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SCP传输备份目录时大小异常占满目标磁盘问题咨询

问题1:操作错误说明
  • 核心问题是工具选型错误,scp本身的特性完全不适合传输备份类目录,你看到的48GB目录传到目标端膨胀占满154GB空间是必然结果:
    1. 不识别硬链接:备份场景几乎都会用硬链接做增量去重——比如多份备份快照里的相同文件只会在磁盘存一份实体,靠硬链接关联到不同路径下,你看到的48GB就是去重后的实际磁盘占用。但scp完全不识别硬链接关系,会把每个硬链接路径都当成独立文件完整复制,文件总大小翻数倍非常常见。
    2. 不支持稀疏文件优化:备份中常存的虚拟机raw镜像、数据库预分配文件、系统镜像大多是稀疏格式,文件逻辑大小里包含大量未写入实际数据的空洞块,这些空洞在源端不占磁盘空间,但scp写入目标端时会把所有空洞填充为实际0字节、分配对应磁盘块,进一步放大空间占用。
    3. 你加的-C参数仅在网络传输环节对数据流做压缩,不会改变最终写入磁盘的文件大小,完全解决不了上述两个问题。
  • 额外容易忽略的坑:如果你查询源目录大小时直接执行du -sh 目录名没加-x参数,统计结果不会排除目录下挂载的其他文件系统,要是备份目录里嵌套了NFS挂载、外接存储、甚至proc/sys这类虚拟文件系统挂载点,scp -r会顺着挂载点把所有无关内容全部递归复制走,实际传输量会远大于你看到的48GB。
问题2:可行的调整方案

原生scp没有提供保留硬链接、处理稀疏文件的参数,仅修改scp参数无法解决问题,RHEL环境下用以下两种方案都可以稳定完成传输:

  • 方案1(优先选择,支持断点续传、失败后增量重传):用rsync走SSH通道传输,完美适配备份目录特性,命令如下:
rsync -avzHAXS --one-file-system <nameof-backup-dir> user@serverB:/path/

参数作用:

  • -a:归档模式,保留文件权限、属主、时间戳、软链接等基础属性
  • -z:传输时压缩数据流,和你之前scp加的-C效果一致
  • -H:保留硬链接关系,目标端相同inode的文件只存一份实体,从根源解决硬链接重复占空间的问题
  • -S:识别稀疏文件,空洞块不会实际分配磁盘空间
  • -A/-X:保留ACL权限和SELinux上下文,适配RHEL默认安全配置,避免传输后的备份因权限/上下文异常无法使用
  • --one-file-system:不跨文件系统传输,避免把目录下挂载的其他无关存储内容一并传走
  • 方案2(如果目标端未安装rsync,用系统自带tar+SSH管道即可,无需额外装包):
    在服务器A执行以下命令,直接流式打包传输到对端解包,不会生成本地临时包:
tar -cSf - -C <备份目录的父目录绝对路径> <nameof-backup-dir> | gzip -1 | ssh user@serverB "tar -xSf - -C /path/"

tar默认会自动识别硬链接做去重,参数-S同样会处理稀疏文件,不会出现空间膨胀问题。

内容的提问来源于stack exchange,提问作者Ish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 15:06:20