
Я использую 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
если хотите увидеть прогресс и скорость