文档首页/ 主机迁移服务 SMS/ 用户指南(阿布扎比区域)/ 常见问题/ 目的端配置与启动/ 为什么迁移完成后,源端与目的端文件大小不一致?
更新时间:2022-06-11 GMT+08:00

为什么迁移完成后,源端与目的端文件大小不一致?

问题描述

  • 迁移完成后,目的端的磁盘分区已使用大小与源端不一致,相差比较大。
  • 迁移完成后,目的端文件大小与源端文件大小不一致。

问题原因

当源端存在空洞文件时,迁移后目的端的文件大小可能比源端要小,这是因为Rsync传输空洞文件时,会自动处理空洞文件。当数据块所有字节都为0时,并不会写入磁盘,而是会生成一个空洞,这样目的端文件的实际大小就可能比源端的要小。

可参考操作步骤确认迁移前后文件是否一致。

空洞文件:在UNIX文件操作中,文件位移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将延长该文件,并在文件中构成一个空洞,这一点是允许的。它的原理是以简短的信息(元数据)表示空数据块,而不是在在磁盘上占用实际空间来存储空数据块。只有真实(非空)的数据块会按原样写入磁盘。

操作步骤

  1. 查看源端文件的大小及实际占用磁盘空间,以/tmp/test-data.img文件为例。
    1. 执行如下命令,查看/tmp/test-data.img文件大小。

      ll /tmp/test-data.img

    2. 执行如下命令,查看/tmp/test-data.img实际占用磁盘空间大小。
      du -sh /tmp/test-data.img
      图1 查看源端文件大小
  2. 迁移完成后,查看目的端对应文件大小,如图2所示,可以看出迁移完成后磁盘占用空间变小了。
    图2 查看目的端文件大小
  3. 分别在源端和目的端执行如下命令,计算文件件的sha256值,以此来判断文件内容是否一致。

    当源端与目的端文件的sha256值相同时,说明文件是一致的。

    sha256sum /tmp/test-data.img

    图3 计算文件sha256值