网盘迁移前,先分清逻辑大小、磁盘占用和可用空间
迁移网盘时,我发现一个很容易算错的问题:网页里显示的文件容量、目录统计的大小和系统磁盘已用空间,并不是同一笔账。把三个数字混着看,就容易把运行日志当成网盘数据,或者低估目标盘需要的容量。
本文整理容量核查的方法,示例采用演示数字,不包含实际服务器地址、账号或业务文件。文章由 AI 协助整理,结论需要结合自己的文件系统和部署方式验证。
一、先把单位统一
GB 通常按十进制计算,1 GB 是 1,000,000,000 字节;GiB 按二进制计算,1 GiB 是 1,073,741,824 字节。因此,同样 35,855,570,407 字节,可以表示为约35.86 GB,也可以表示为约33.39 GiB。数字不同,数据没有变少。
容量记录最好同时保留字节数和显示单位。只有“33G”这一项,很难判断是在说 GB、GiB,还是命令默认的显示方式。
size = 35_855_570_407
print(f"{size / 10**9:.2f} GB")
print(f"{size / 2**30:.2f} GiB")
二、三个口径分别回答三个问题
文件的逻辑长度回答“这个文件有多少字节”,磁盘分配量回答“文件系统给它分配了多少块”,磁盘可用空间回答“目前还能写多少数据”。它们可能不同。
在支持相关字段的 Unix 环境,可以查看单个文件:
import os
s = os.stat("sample.bin")
print("logical_bytes:", s.st_size)
if hasattr(s, "st_blocks"):
print("allocated_bytes:", s.st_blocks * 512)
st_blocks 的计量单位是512字节,不能再乘系统文件系统的块大小。小文件、稀疏文件、压缩、快照和共享数据块,都可能让逻辑长度与实际空间表现出差异。尤其在支持写时复制的文件系统上,逐文件分配量相加不一定等于独占的物理空间。
三、迁移的是业务状态,不是整个 Docker 运行目录
网盘迁移通常需要用户文件、数据库、配置、头像及部署参数。容器标准输出日志是另一类数据,应当单独核算。不能因为某个容器目录很大,就直接把它全部归为用户文件;也不应据此直接删除运行中的日志文件。
我更倾向于先建立一张表:每个挂载目录属于什么、占多大、是否被业务引用、迁移后怎样验收。下载临时目录和运行日志也要检查,但检查结果应与用户文件分开记录。
四、空间下降不等于已经完整验收
删除后,系统可用空间的增加量只是一个观察结果。同期仍可能有日志增长、其他进程写入,或者文件被打开而暂未释放。它不能单独证明目标目录里的每一项都删除成功。
类似地,迁移后两个目录容量相同,也不能单独证明文件内容一致。建议至少对照相对路径、文件数量、长度,再对重要文件做内容哈希校验。源目录在清单生成后继续变化时,还需要最后一次增量核对。
我会在报告里明确区分“本轮实测”“依据旧清单扣减的估算”和“尚未验证”。这样后续决定删除或迁移时,才知道哪些数字可以作为依据。
实际操作顺序
- 从只读核查开始,确认服务器和挂载目录,先不删东西。
- 所有容量保留原始字节数,展示时注明 GB 或 GiB。
- 将正文、数据库、配置、日志和缓存分别统计。
- 目标盘除正文外还要预留数据库、校验中转和正常增长空间。
- 复制后核对内容,最后再决定源文件清理。
容量核查的目的,是让迁移范围可解释、验收结果可复核。单个漂亮的总容量数字,代替不了这几步。
- 点赞
- 收藏
- 关注作者
评论(0)