迁移完成后,为什么已迁移数据量小于总数据量?
问题描述
迁移完成后,已迁移数据量小于总数据量。
问题分析
源端总数据量是通过迁移Agent执行df-Th命令搜集得到的,已迁移数据量是通过记录实际已迁移文件的大小累计得到的。
出现已迁移数据量小于总数据量,可能是因为以下几种情况:
- 情况一:源端有文件被删除,但进程依然存在
出现这种情况,是因为源端经常使用rm命令或其它软件删除文件,虽然文件被成功删除,但是文件进程依然存在,还占用着磁盘空间。
- 在源端服务器,输入df -Th命令,查看源端磁盘使用量和总迁移量是否相同。
- 在源端服务器根目录下,输入du -sh *命令,查看实际目录占用量。
从查询结果可以看出,实际目录占用量小于磁盘使用量,因此出现已迁移数据量小于总数据量。
- 在源端服务器,输入如下命令:
lsof -n / |grep deleted
如果输出如下图类似结果,则表示有文件被删除,但是进程还存在的情况。
- 如果迁移任务可以成功迁移,并且目的端也成功启动,未迁移的数据不影响目的端的正常使用,则属于正常迁移,可忽略。
- (可选)在源端服务器,将lsof -n / |grep deleted命令所罗列的进程结束掉。
- (可选)选择合适的时间,重启源端服务器,关闭进程。
- 在源端服务器,输入df -Th命令,查看源端磁盘使用量和总迁移量是否相同。
- 情况二:有目录不会被迁移
Linux系统,如下文件夹中的文件不会被迁移:
/proc/*
/sys/*
/lost+found/*
/var/lib/ntp/proc/*
总数据量包含以上文件夹内的文件大小,但迁移时不会迁移这些文件。因此会造成已迁移数据量小于总数据量的情况。
在源端服务器根目录,输入du -sh *命令,查看/proc/*、/sys/*、/lost+found/*、/var/lib/ntp/proc/*等不被迁移目录的占用空间情况。
如果未迁移的数据大小,与不被迁移目录大小相同,则属于正常迁移,可忽略。
- 情况三:迁移时,源端有数据发生改变
迁移时,迁移Agent通过df -Th命令获取每个分区挂载的根目录,遍历根目录进行迁移。
在迁移时,已迁移的数据不会因为源端数据改变而改变;未迁移的数据如果发生改变,则会迁移改变后的最新数据。
总数据量记录的数值是第一次扫描源端搜集的信息。在迁移时,源端可能有大量的数据改变(比如源端大量还未迁移的数据被删除),则会造成已迁移数据量小于总数据量的情况。
您可以在源端与目的端,分别输入df -Th命令,比对源端信息和目的端信息。
- 情况四:源端存在大量空洞文件
迁移时会忽略空洞文件,如果源端存在大量空洞文件,迁移结束后,已迁移数据量小于总数据量则属于正常迁移,可忽略。
Linux系统产生空洞文件的途径有很多种,常见如dd命令等。