服务器通用(全架构)【深入解析文件操作中的常见问题:空洞、传输与大小差异】技术文章

了解更多银河麒麟操作系统全新产品,请点击访问:

麒麟软件产品专区:https://www.kylinos.cn/productPc/

开发者专区:https://developer.kylinos.cn/

文档中心:https://document.kylinos.cn/document/center


目录

一、文档概述

二、主要内容

[2.1 文件大小差异之谜:II 与 du 命令的本质区别](#2.1 文件大小差异之谜:II 与 du 命令的本质区别)

[2.1.1 命令原理对比](#2.1.1 命令原理对比)

[2.1.2 空洞文件的识别方法](#2.1.2 空洞文件的识别方法)

[2.2 scp 传输前后文件大小变化但 md5sum 一致的原因](#2.2 scp 传输前后文件大小变化但 md5sum 一致的原因)

[2.2.1 md5sum 的校验逻辑](#2.2.1 md5sum 的校验逻辑)

[2.2.2 scp 对空洞文件的处理机制](#2.2.2 scp 对空洞文件的处理机制)

稀疏文件的特性

[scp 的传输逻辑](#scp 的传输逻辑)

[2.3. 保持稀疏文件特性的解决方案:使用 rsync 替代 scp](#2.3. 保持稀疏文件特性的解决方案:使用 rsync 替代 scp)

[2.4 总结:理解文件系统与传输协议的底层逻辑](#2.4 总结:理解文件系统与传输协议的底层逻辑)


一、文档概述

在文件管理和操作过程中,常常会遇到一些看似矛盾的现象,例如使用不同命令查看文件大小存在差距、文件传输前后大小变化但校验值一致等。这些问题背后往往与文件空间(稀疏文件)的特性以及文件传输协议的处理方式密切相关。本文将结合技术原理与实际案例,详细解析这些现象的成因与应对方法。

二、主要内容

2.1 文件大小差异之谜:II 与 du 命令的本质区别

2.1.1 命令原理对比

ls -l(或 ll):显示文件的逻辑大小,即文件中数据的理论字节数,包含未实际分配磁盘空间的"空洞"部分。

du -sh:显示文件的实际磁盘占用量,仅计算已分配物理块的空间大小,忽略空洞。

2.1.2 空洞文件的识别方法

当文件的逻辑大小(ls 结果)远大于实际磁盘占用(du 结果)时,可判定存在数据空洞。具体验证方式如下:

命令行验证:

stat --format="%b %s" 文件名 # %b 为块数,%s 为文件大小(字节)

若%s 数值显著大于%b×块大小(默认块大小为 4KB),则说明存在空洞

2.2 scp 传输前后文件大小变化但 md5sum 一致的原因

2.2.1 md5sum 的校验逻辑

md5sum 工具用于验证文件内容的完整性,它会逐字节读取文件内容并计算哈希值。对于空洞文件,操作系统在读取时会将空洞部分填充为零字节,因此:

(1)源文件的逻辑内容(含空洞填充的零字节)与目标文件的实际内容(传输后写入的零字节)完全一致。

(2)即使文件传输前后存储形态不同,md5sum 计算结果仍相同。

2.2.2 scp 对空洞文件的处理机制

稀疏文件的特性

稀疏文件通过文件系统元数据标记空洞位置,实际不占用物理空间,读取时动态填充零字节,常用于数据库快照、日志文件等场景。

scp 的传输逻辑

读取阶段:源端 scp 读取文件的所有逻辑内容,包括空洞对应的零字节。

传输阶段:将读取到的所有数据(含零字节)通过网络发送至目标端。

写入阶段:目标端按接收到的字节流创建新文件,所有零字节均被实际写入磁盘,空洞被"填满"。

**结果:**目标文件变为普通文件,逻辑大小与实际磁盘占用一致,导致 du 命令显示的大小增加,但内容与源文件一致(含零字节),故 md5sum 值不变。

2.3. 保持稀疏文件特性的解决方案:使用 rsync 替代 scp

若需在文件传输过程中保留空洞(稀疏性),可采用支持稀疏文件处理的工具,例如 rsync 命令的--sparse参数:

rsync --sparse 源文件 目标路径

原理:rsync 会检测文件中的连续零字节区域,并在目标端重建空洞,避免实际写入零字节,从而保持稀疏文件的存储优化特性。

**适用场景:**传输大型日志文件、数据库备份等包含大量空洞的文件时,可显著减少传输数据量与磁盘占用。

2.4 总结:理解文件系统与传输协议的底层逻辑

空洞文件的本质:是文件系统优化存储的一种机制,逻辑上存在数据但物理上未分配空间。

命令差异的核心:ls 关注逻辑大小,du 关注物理占用,两者分别反映文件的不同属性。

传输工具的选择:scp 会"展开"空间,rsync 可保留稀疏性,需根据实际需求(如存储空间、传输效率)灵活选择。

通过深入理解这些技术细节,可在日常运维中更高效地处理文件存储与传输问题,避免因工具特性差异导致的误判与资源浪费。

相关推荐
Wang's Blog8 小时前
Java 接入Redis: 服务启动停止与后台运行配置
java·服务器·redis
Hrain-AI9 小时前
多 Agent 并行不打架:worktree 隔离与反馈回流落地(附脚本)
网络·数据库·人工智能·架构
云运维笔记9 小时前
IP地址从入门到精通:网络通信的核心基石
运维·网络·计算机网络
净水深流9 小时前
中央厨房冷链技术实践:多温区改造、WMS落地与IoT温控架构
大数据·数据库·人工智能·冷库冷链
l1t10 小时前
测试DuckDB 2.1的match_recognize模式匹配语句
数据库·duckdb
码农学院10 小时前
企业官网改版后 AI 引用归零的复盘:301 重定向断层让爬虫索引掉线,修复方案与恢复数据
运维·geo优化·ai优化aio
kuroomi10 小时前
Ingress-Nginx与kubernetes 网络
linux·运维·网络·kubernetes
当下新鲜事10 小时前
空调机房冷冻泵与冷却泵技术分析:赛莱默B&G背包式智能变频管道泵的工程应用
运维·物联网·业界资讯
EasyGBS10 小时前
终结训推割裂!EasyGBS×EasyAIS×DLTM,实现AI算法训推一体闭环落地!
服务器·深度学习·安全
IpdataCloud11 小时前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip