![VirtualBox: не удалось выполнить слияние носителей в режиме онлайн (VERR_DISK_FULL)](https://rvso.com/image/1402591/VirtualBox%3A%20%D0%BD%D0%B5%20%D1%83%D0%B4%D0%B0%D0%BB%D0%BE%D1%81%D1%8C%20%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D1%8C%20%D1%81%D0%BB%D0%B8%D1%8F%D0%BD%D0%B8%D0%B5%20%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%B9%20%D0%B2%20%D1%80%D0%B5%D0%B6%D0%B8%D0%BC%D0%B5%20%D0%BE%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD%20(VERR_DISK_FULL).png)
Я запускаю виртуальную машину Windows на SSD-накопителе объемом 128 ГБ. Я выделил виртуальный диск объемом 127 ГБ для виртуальной машины, думая, что он займет все место на диске. Я забыл учесть дисковое пространство, необходимое для 3 снимков виртуальной машины, которые я сделал и которые хранятся на одном физическом диске. Теперь на диске осталось 0 места, и виртуальная машина не запускается.
Я хотел бы освободить место на физическом диске, удалив все снимки. К сожалению, когда я пытаюсь удалить снимок, я получаю ошибку:
Failed to perform an online medium merge (VERR_DISK_FULL)
Это когда VM включена, но приостановлена. Если я принудительно выключу VM и попытаюсь выполнить слияние, я получаю:
Failed to delete the snapshot SomeSnapshot of the virtual machine somevm.
Could not merge the medium '/var/vms/somevm/Snapshots/{58220add-b745-4d38-874b-c788f0e31560}.vdi' to '/var/vms/somevm/Snapshots/{181dd674-a65a-44af-afa4-d7ee00cf6c21}.vdi' (VERR_DISK_FULL).
Как проще всего выбраться из этой ситуации? Хостовая ОС работает под управлением Linux Mint.
решение1
Я ненавижу, ненавижу, ненавижу возиться с загадочной системой реестра носителей VirtualBox... освобождать диски и пытаться повторно прикрепить снимки и всю эту ерунду, поэтому я сделал это самым простым способом, который смог придумать: скопировал образы дисков виртуальной машины на больший диск, смонтировал дискпо исходному пути виртуальной машины, повторно выполните команды удаления моментального снимка, затем, наконец, скопируйте окончательный, меньший образ диска обратно на исходный диск. Все кровавые подробности следуют далее:
Поскольку я использую LVM, я сначала создаю новый LV для хранения файлов:
sudo lvcreate -l 100%FREE -n vm-resize somevg sudo cryptsetup create vm-resize /dev/mapper/somevg-vm--resize --key-file /dev/urandom sudo mkfs.ext4 -m 1 /dev/mapper/vm-resize
Далее я копирую образы дисков виртуальной машины на новый логический том:
cd /var/vms sudo mkdir vm-resize sudo mount /dev/mapper/vm-resize vm-resize/ sudo cp -a somevm/* vm-resize/
Затем я монтирую новый LV по тому же пути, по которому был смонтирован мой SSD:
umount somevm/ vm-resize/ sudo mount /dev/mapper/vm-resize somevm/
Наконец, я могу «удалить» все снимки (что объединит их в текущий образ диска):
snapshots=( $(VBoxManage snapshot somevm list | sed -E 's/.*(\w{8}-\w{4}-\w{4}-\w{4}-\w{12}).*/\1/') ) for uuid in "${snapshots[@]}"; do VBoxManage snapshot somevm delete "$uuid" done
Но мы еще не закончили: теперь я снова монтирую два своих LV на их исходном месте:
sudo umount somevm/ sudo mount somevm/ sudo mount /dev/mapper/vm-resize vm-resize/
Затем нам нужно переместить новый, меньший образ диска обратно на исходный диск:
sudo rm somevm/Snapshots/*.vdi sudo cp -a vm-resize/somevm.vdi somevm/somevm.vdi
На этом этапе вам необходимо протестировать виртуальную машину, чтобы убедиться в ее работоспособности.
Затем, наконец (на этот раз по-настоящему), выполните очистку:
sudo umount vm-resize sudo cryptsetup remove vm-resize sudo lvremove somevg/vm-resize
Так просто, правда?