Skip to main content

Гранулярное восстановление файлов Windows-машин из PBS

Проблема - потеряны несколько файлов на общем диске. При этом файлы хранились на Windows.
ProxMox Backup Server не имеет возможности гранулярного восстановления Windows-машин. Более того, нельзя восстановить машину с другим VMID, чтобы запустить её параллельно с работающей и скопировать нужное.

Как вариант, можно скачать отдельный диск виртуальной машины и подключить его к существующей или новой машине, потом скопировать нужные файлы.

image-1743581683506.png

Проблема в том, что скорость скачивания очень низкая, в моем случае порядка 10 мегабайт в секунду, что для диска в 1,7 Тб потребует двое суток!

image-1743582554044.png

nload на PBS в момент скачивания показывает всего 80 мегабит в секунду

image-1743583159107.png

Было непонятно, в чем причина, что является "бутылочным горлышком".
Сеть между серверами 10 гигабит, диски в архивном сервере хоть и HDD, но их 12 штук, их скорость явно значительно выше.

Возможно, проблема в слабости процессора.
При передаче по сети данные шифруются, и, если процессор старый, без аппаратной поддержки AES, он будет сильно перегружен. Это шифрование, к сожалению, отключить нельзя. К тому же, задача не распараллеливается, идет в одном потоке.
Вот показания команды top. Всего восемь ядер, и в пике загрузка могла бы быть 800%, но видим всего 153%. Похоже, действительно, работает только одно ядро, и создает нагрузку процесс proxmox-backup-proxy

image-1743583575701.png

А вот вывод команды тестирования скорости

proxmox-backup-client benchmark --repository pbs:backup


именно шифрование тормозит весь процесс

image-1743586424447.png


Если запустить восстановление сразу нескольких VM, то можно загрузить все ядра и всю полосу пропускания сети. Что подтверждает гипотезу о том, что проблема именно в однопоточности и неотключаемом шифровании.

Кстати, при создании архивов подобных проблем не наблюдается

image-1743585685923.png

image-1743585769030.png

В общем, копировать целый диск ради нескольких небольших файлов вариант не очень хороший. Но, к сожалению, гранулярное восстановление (отдельных файлов), в ProxMox реализовано только для виртуальных машин на базе Linux.

Далее - решение

1. Для начала посмотрим все имеющиеся архивы на сервере

[root@pbs ~]# proxmox-backup-client list --repository pbs:backup

2. Нас интересуют архивы машины с VMID 136 за 23.03.2025 и конкретно диск с данными drive-ide1.img (другой диск - системный)

proxmox-backup-client snapshot list vm/136 --repository pbs:backup

image-1743586803091.png

3. Сопоставляем диск с данными из нужного нам снапшота с петлевым устройством loop0

[root@pbs ~]# proxmox-backup-client map vm/136/2025-03-23T20:20:12Z drive-ide1.img --repository pbs:backup
Password for "root@pam": ********
Image 'pbs:backup:vm/136/2025-03-23T20:20:12Z/drive-ide1.img' mapped on /dev/loop0

Командой lsblk проверим получившееся блочной устройство

image-1743595396962.png

4. Создадим каталог, к которому примонтируем наш диск

[root@pbs mnt]# mkdir -p /mnt/restore/2025-03-23


[root@pbs mnt]# mount /dev/loop0 /mnt/restore/2025-03-23/
mount: /mnt/restore/2025-03-23: no valid filesystem type specified.

Монтируем с указанием опции -o, то есть, как блочное устаройство

[root@pbs ~]# mount -o loop /dev/loop0p1 /mnt/restore/2025-03-23/

5. Далее любым способом копируем нужные файлы на файловый сервер Windows, например, winscp или MobaXterm

image-1743599131045.png

6. После окончания отмонтируем всё

root@pbs ~]# umount /mnt/restore/2025-03-23

[root@pbs ~]# losetup -d /dev/loop0