为什么迁移完成后,源端与目的端文件大小不一致?
问题描述
- 迁移完成后,目的端的磁盘分区已使用大小与源端不一致,相差比较大。
- 迁移完成后,目的端文件大小与源端文件大小不一致。
问题原因
当源端存在空洞文件时,迁移后目的端的文件大小可能比源端要小,这是因为Rsync传输空洞文件时,会自动处理空洞文件。当数据块所有字节都为0时,并不会写入磁盘,而是会生成一个空洞,这样目的端文件的实际大小就可能比源端的要小。
可参考操作步骤确认迁移前后文件是否一致。
空洞文件:在UNIX文件操作中,文件位移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将延长该文件,并在文件中构成一个空洞,这一点是允许的。它的原理是以简短的信息(元数据)表示空数据块,而不是在在磁盘上占用实际空间来存储空数据块。只有真实(非空)的数据块会按原样写入磁盘。
操作步骤
- 查看源端文件的大小及实际占用磁盘空间,以/tmp/test-data.img文件为例。
- 迁移完成后,查看目的端对应文件大小,如图2所示,可以看出迁移完成后磁盘占用空间变小了。
- 分别在源端和目的端执行如下命令,计算文件的sha256值,以此来判断文件内容是否一致。
当源端与目的端文件的sha256值相同时,说明文件是一致的。
sha256sum /tmp/test-data.img
图3 计算文件sha256值