сравнить размер файла между двумя идентичными неразреженными файлами при копировании

сравнить размер файла между двумя идентичными неразреженными файлами при копировании

Я использую KVM для живой миграции виртуальных машин с одного хоста на другой. Я уже написал веб-интерфейс для этого. Теперь я хочу реализовать индикатор выполнения.

Моя идея заключается в том, чтобы сравнить размер файла на диске-источнике и на целевом устройстве во время миграции.

Сервер1:

ls -ls /data/file.raw
858963 -rw------- 1 root root 21474836480 Dec 15 13:39 file.raw

Сервер2:

ls -ls /data/file.raw
698543 -rw------- 1 root root 21474836480 Dec 15 13:39 file.raw

Теперь я взял выделенное значение и рассчитал его в процентах.

100 / 858963 * 698543 = 81%

Хорошо. Но есть одна проблема:

Диск не разреженный. Общий размер файла 1717926 blocks. На самом деле, там только 858963 blocksвыделено. Так что живая миграция все еще копирует пустые части файла, в то время как мой индикатор выполнения уже на 100%

Я уже пробовал с duи stat.

Как получить только размер переданного файла на диске?

решение1

Используйте virsh migrate, как уже предлагалось, или воспользуйтесь поддержкой разреженных файлов rsync man rsync:

-S, --sparse Try to handle sparse files efficiently so they take up less space on the destination.

Попробуйте rsync -ahHS, добавьте, -Pесли хотите увидеть прогресс и скорость

Связанный контент