Linux服务器之间传文件,大小本身没有统一上限,真正卡脖子的是文件系统单文件上限、传输工具的工作方式和网络稳定性日常用scp或rsync都能传大文件,但要想传得稳、传得准,rsync是更靠谱的选择。
文件大小限制到底卡在哪
很多人一上来就问“Linux两个服务器怎么发送文件大小”,实际上是把两个概念混在一起了,一台服务器能接收多大的文件,取决于三个层面:磁盘文件系统、传输工具的协议限制、网络会话的稳定性。
磁盘文件系统这个比较好理解,ext4和XFS是现在Linux服务器最常用的两种文件系统,ext4的单文件上限是16TB,XFS更是达到8EB(1EB=1024PB),只要你的磁盘是这两种格式,单文件大小基本不用担心,真正让人头疼的是FAT32格式,单文件超过4GB直接拒绝写入,但这个格式在服务器上极少见。
传输工具那边,scp和rsync底层走的是SSH协议,理论上对文件大小没有限制,但实际使用中你会遇到“传到一半断线”的情况,尤其是大文件,链路一抖动就得重头来,这就是为什么传大文件要选支持断点续传的工具。
网络会话这个最容易被忽视。TCP窗口大小、路由MTU值、防火墙会话超时时间,这三项配置不当,传大文件时就会出现“速度越来越慢最后卡死”的现象,业内专家指出,多数大文件传输失败并非工具问题,而是网络链路中某个节点的会话超时设置太短。
scp和rsync哪个快
“scp和rsync哪个快”这个问题几乎每个运维都纠结过,直接给结论:传单个大文件,scp更快;传大量小文件或需要增量同步,rsync更优。
scp的原理是直接复制整个文件,不做校验和对比,CPU开销小,在大文件场景下能跑满带宽,但它的短板也很明显:不支持断点续传,传一半断了就全白传;不支持增量同步,每次都是全量覆盖。
rsync的强项在增量同步,它会先对比两端文件的差异,只传输变化的部分,第一次传大文件看不出优势,但第二次同步时就快得惊人只传新增的数据块,代价是它需要消耗一部分CPU做校验计算,在小带宽场景下反而显得比scp慢。
一个实用的组合思路是:首次传输用scp打底,后续增量同步用rsync,这样既吃到了scp的带宽优势,又享受了rsync的增量效率。
linux服务器之间传文件夹的通用操作
“linux服务器之间传文件夹”是搜索里的高频率词,这场景一般是迁移站点、备份代码目录、或同步配置文件,三种做法各有适用场景:
一次性全量拷贝,用scp
scp -r /data/www/ root@192.168.1.10:/data/
-r参数递归复制整个目录,适合目录不大、数量不多、一次性搞定的情况,需要压缩传输就加-C参数,CPU换带宽,内网环境不用加。
定期增量备份,用rsync
rsync -avz --progress /data/www/ root@192.168.1.10:/data/
-a归档模式,保留权限、时间戳、软链接-v显示过程-z传输时压缩
这个命令最常用,也最推荐,断点续传自动支持,传一半断了重跑即可,已传完的部分自动跳过,配合cron定时任务就是一套轻量备份方案。
目录超大且小文件漫天飞,用tar管道接力
tar czf - /data/www | ssh root@192.168.1.10 "tar xzf - -C /data/"
这种方式把打包和传输合并成一条管道,减少中间环节的磁盘IO,传几十万个小文件时,比scp裸拷贝快得多,因为减少了频繁的文件打开关闭开销。
单文件超过4GB怎么选择方案
scp传输大文件失败是网上反馈最集中的问题,多数卡在4GB这个临界点,倒不是scp本身有4GB限制,而是遇到FAT32格式的临时目录、旧版本工具溢出、或网络设备的中小包重组问题。
超过4GB时,优先顺序是rsync加ssh协议,再辅助screen或tmux防断线。
# 在服务器A上启动一个screen会话 screen -S transfer # 在会话里执行rsync rsync -avzP /data/backup_2026.img root@192.168.1.20:/data/ # 如果断线,重新登录后执行 screen -r transfer
-P参数等于--partial --progress,保留部分传输的文件并显示进度,搭配screen后,哪怕SSH断了,rsync进程还在后台跑,不会受你本地终端的网络波动影响。
另外一种思路是用nc直连传输,不走SSH加密,纯粹拼速度。
# 接收方先监听 nc -l -p 9000 > /data/large_file.img # 发送方推送 nc 192.168.1.20 9000 < /data/large_file.img
这种方式没有加密开销,内网环境传40GB文件能跑到接近千兆线速,但没有任何校验机制,适合传输后能自行验证的场景,比如配合md5sum命令双向比对。
跨地域传输场景选择什么工具
两个服务器不在同一机房,甚至跨运营商,传输策略要调整。小文件走rsync,大文件走断点续传工具,超大文件走分块并行方案。
分块并行是处理跨地域大文件的高效手段,思路是把大文件拆成多块同时传:
# 发送方拆分并传输 split -b 2G /data/bigdata.tar.gz /data/chunk_ # 逐片传输后,接收方合并 cat /data/chunk_ > /data/bigdata.tar.gz
但这样手动处理太麻烦,生产环境通常用zsync或lrzsz的替代品,行业内更推荐用lftp做多线程镜像同步:
lftp -u root,passwd 192.168.1.20 -e "mirror -R -P 8 /data/www/ /backup/"
-P 8表示并行8个线程,跨地域丢包高时能明显提升吞吐量,这是很多云厂商运维在用的方案,比单线程温和得多,不容易触发网络设备的并发限制。
scp传输大文件失败的排查方向
遇上传输出错,别急着换工具,先按这条路排查:
- 检查磁盘剩余空间:
df -h,接收方磁盘满了是最低级但最常见的错误 - 检查目标文件系统格式:
df -T,确认是ext4或XFS,FAT32直接换目录 - 检查SSH会话超时配置:编辑
/etc/ssh/sshd_config,把ClientAliveInterval设为60,ClientAliveCountMax设为6,然后重启sshd - 检查防火墙会话表:Linux连接跟踪默认超时180秒,大文件传输时长远超这个,需要改
的值/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
- 改用rsync重试:残留的部分文件会被rsync利用,比scp从头再来高效得多
一次性把这些检查完,再配上rsync的--append-verify参数,传输中断问题基本能解决。
文件传完后怎么验证完整性
传输只是一半工作,验证是另一半,很多人传完不管,结果用的时候才发现文件损坏。
最常用的是md5sum:
md5sum /data/bigfile.tar.gz # 在接收方执行同样命令,比对两边的值
大文件用md5sum计算稍慢,追求速度可以用cksum,如果文件本身自带校验值,比如ISO镜像有SHA256SUMS文件,直接对比这个值更可靠。
rsync传输本身就是边传边校验的,但如果追求极致的安全,推荐在rsync命令中加--checksum选项,它会基于文件内容的校验来决定是否跳过,而不仅仅是看文件大小和时间戳,代价是扫描时间变长,但换来的是传输确定性。
两个服务器传文件的大小问题,最实用的结论
回到最初的问题:Linux两个服务器传文件,大小限制几乎不构成障碍,真正决定成败的是工具选择和传输习惯。
传单文件、一次性操作,选scp省事可靠;传目录、做备份、反复同步,选rsync更聪明,跨机房大文件,别忘了加断点续传保护和并行传输,无论哪种情况,先看一眼磁盘格式和可用空间,传完顺手做一个校验,这三点做到位,文件大小的事就不会再来找你麻烦。
关于文件传输大小的常见问题
rsync传输文件大小有限制吗?
没有,rsync本身不限制文件大小,实际能传多大的文件取决于接收方磁盘文件系统的单文件上限、可用空间和网络稳定性,ext4支持单文件16TB,XFS支持8EB,基本覆盖所有业务场景。
scp最快能传多大文件?
scp对文件大小没有硬性限制,实际传多大取决于网络带宽、磁盘IO和SSH连接稳定性,问题不在scp本身,而是它不支持断点续传,一旦连接中断就需要从头开始,传超大文件更推荐使用支持断点续传的rsync。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/731856.html





