VirtualBox: уменьшение размера диска VM

Виртуальные машины и среды исполнения

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

VirtualBox: уменьшение размера диска VM

Непрочитанное сообщение Olej » 16 ноя 2023, 01:28

Есть у нас тут тема VirtualBox: увеличение размера диска VM
Теперь хотелось бы решить обратную задачу: уменьшить размера слабо заполненного диска VM...
В частности, VDI диска EXT4 для локальные инсталляции форума
Olej писал(а):
15 ноя 2023, 15:40
сохранить целиком образ диска + поднять его в виртуальной машине VirtualBox...

Код: Выделить всё

root@virtualbox:/etc# df
Файловая система 1K-блоков Использовано Доступно Использовано% Cмонтировано в
udev               2005656            0  2005656            0% /dev
tmpfs               404128        46004   358124           12% /run
/dev/sda1         15389720      5215828  9371136           36% /
tmpfs              2020624            0  2020624            0% /dev/shm
tmpfs                 5120            0     5120            0% /run/lock
tmpfs              2020624            0  2020624            0% /sys/fs/cgroup
tmpfs               404124            0   404124            0% /run/user/0
tmpfs               404124            0   404124            0% /run/user/1001
Это вообще случай, когда:
- заведомо не будет больших изменений занятого размера...
- но нельзя и поджимать впритык, чтобы иметь возможность устанавливать apt/dpkg некоторые полезные утилиты.
Т.е., вместо 15Gb для локальной инсталляции этого форума вполне можно было бы обойтись диском ... скажем 6.5Gb.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

VirtualBox: уменьшение размера диска VM

Непрочитанное сообщение Olej » 16 ноя 2023, 01:46

Olej писал(а):
16 ноя 2023, 01:28
уменьшить размера слабо заполненного диска VM...
Беглый поиск показывает что...
Изменение размера виртуального диска в VirtualBox
Опубликовано 11.11.2018
Следует отметить, что в интернете есть информация, что можно увеличить размер только ДИНАМИЧЕСКИХ виртуальных дисков форматов VDI или VHD, уменьшить — только VDI.
Уменьшаем объем виртуального диска VDI в VirtualBox
00:02, 04.02.2021
Перед тем, как уменьшить занимаемый динамическим диском VDI объём, стоит учесть, что в этой процедуре придётся заполнить всё свободное пространство на диске VDI нулями.
То есть, на время виртуальный диск расширится до своего максимально размера и для этого необходимо иметь запас свободного пространства на жестком диске.
Перед началом процедуры оптимизации диска стоит сделать резервную копию, так как теоретически возможно повреждение данных.
Открываем терминал Linux в виртуальной машине и вводим следующие команды:

Код: Выделить всё

sudo dd if=/dev/zero of=zero.small.file bs=1024 count=102400
sudo dd if=/dev/zero of=zero.file bs=1024
sudo sync ; sleep 60 ; sync
sudo rm zero.small.file
sudo rm zero.file
Уменьшаем размер динамичиских виртуальных дисков VirtualBox
13-02-2016, 06:30
Для гостевых Linux машин все проще. Создаем в гостевой машине файл размером в пустое пространство, а потом удаляем его:

Код: Выделить всё

dd if=/dev/zero of=/tmp/zerofile; rm /tmp/zerofile
Теперь выключаем вирутальну машину и открываем консоль на хосте, где переходим в папку с нужным виртуальным диском и выполняем команду:

Код: Выделить всё

VBoxManage modifyhd <файл>.vdi --compact
Сжатие образов HDD VirtualBox.
21 ноября 2014
Сколько уже версий прошло, а графического интерфейса для утилиты VBoxManage я так и не наблюдаю в составе Virtual Box, а эта программка умеет довольно много в сравнении с графическим менеджером виртуальных машин. И кроме всего прочего умеет сжимать и преобразовывать образы жестких дисков.
Для Linux есть пакет secure-delete, в который входит программа sfill. Запустить стирание можно так:

Код: Выделить всё

sudo sfill -fz mountpoint
Но у программы есть одно побочное действие - она создает огромный файл с нулями, которые раздует образ диска до максимума. Лучшего варианта я пока не нашел.
Процедуры эти необходимо проделать для всех дисков, которые будут сжиматься.
После этих процедур выключаем виртуальную машину и уже из основной системы даём команду на сжатие образа:

Код: Выделить всё

vboxmanage modifyhd образ_диска.vdi --compact
Этот последний способ мне как-то больше приглянулся.
Идея же у всех одна и та же...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

VirtualBox: уменьшение размера диска VM

Непрочитанное сообщение Olej » 16 ноя 2023, 01:54

Olej писал(а):
16 ноя 2023, 01:46
Этот последний способ мне как-то больше приглянулся.

Код: Выделить всё

root@virtualbox:/etc# aptitude search secure-delete
p   secure-delete                                          - tools to wipe files, free disk space, swap and memory

Код: Выделить всё

root@virtualbox:/etc# apt install secure-delete
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Следующие НОВЫЕ пакеты будут установлены:
  secure-delete
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 69,6 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 160 kB.
Пол:1 http://debian.netforce.hosting/debian buster/main amd64 secure-delete amd64 3.1-6 [69,6 kB]
Получено 69,6 kB за 0с (299 kB/s)
Выбор ранее не выбранного пакета secure-delete.
(Чтение базы данных … на данный момент установлено 70527 файлов и каталогов.)
Подготовка к распаковке …/secure-delete_3.1-6_amd64.deb …
Распаковывается secure-delete (3.1-6) …
Настраивается пакет secure-delete (3.1-6) …
Обрабатываются триггеры для man-db (2.8.5-2) …

Код: Выделить всё

root@virtualbox:/etc# which sfill
/usr/bin/sfill

root@virtualbox:/etc# sfill --help
sfill v3.1 (c) 1997-2003 by van Hauser / THC <vh@thc.org>

Syntax: sfill [-fiIlvz] directory

Options:
    -f  fast (and insecure mode): no /dev/urandom, no synchronize mode.
    -i  wipe only inodes in the directory specified
    -I  just wipe space, not inodes
    -l  lessens the security (use twice for total insecure mode).
    -v  is verbose mode.
    -z  last wipe writes zeros, not random data.

sfill does a secure overwrite of the free space on the partition the specified
directory resides and all free inodes of the directory specified.
Default is secure mode (38 writes).
You can find updates at http://www.thc.org
Но как бы там не было ... начать процедуру нужно с того, что остановить VM и:
Olej писал(а):
16 ноя 2023, 01:46
Перед началом процедуры оптимизации диска стоит сделать резервную копию, так как теоретически возможно повреждение данных.

Код: Выделить всё

olej@R420:~/sdc3/VirtualBoxVMs/linux-ru.ru$ time cp linux-ru.ru.vdi linux-ru.ru.2.vdi 

real	2m36,641s
user	0m0,308s
sys	0m30,846s

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

VirtualBox: уменьшение размера диска VM

Непрочитанное сообщение Olej » 16 ноя 2023, 02:27

Olej писал(а):
16 ноя 2023, 01:54
стоит сделать резервную копию
После чего и загрузки VM:

Код: Выделить всё

root@virtualbox:~# time sfill -fz /
...
Продолжается это долго ... понятно что будет долго - но не настолько же :?:
И нагружен работой изрядно:

Код: Выделить всё

olej@virtualbox:~$ uptime
 02:17:51 up 7 min,  3 users,  load average: 2,14, 1,59, 0,76

Код: Выделить всё

olej@virtualbox:~$ uptime
 02:26:58 up 16 min,  4 users,  load average: 2,27, 2,12, 1,41
Снимок экрана от 2023-11-16 01-21-34.png
Снимок экрана от 2023-11-16 01-21-34.png (213.37 КБ) 297 просмотров

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

VirtualBox: уменьшение размера диска VM

Непрочитанное сообщение Olej » 16 ноя 2023, 03:54

Olej писал(а):
16 ноя 2023, 02:27
понятно что будет долго - но не настолько же
Закончилось это тем что...

Код: Выделить всё

olej@virtualbox:~$ df
Файловая система 1K-блоков Использовано Доступно Использовано% Cмонтировано в
udev               2005656            0  2005656            0% /dev
tmpfs               404128        45972   358156           12% /run
/dev/sda1         15389720     15373412        0          100% /
tmpfs              2020624            0  2020624            0% /dev/shm
tmpfs                 5120            0     5120            0% /run/lock
tmpfs              2020624            0  2020624            0% /sys/fs/cgroup
tmpfs               404124            0   404124            0% /run/user/0
tmpfs               404124            0   404124            0% /run/user/1001

Код: Выделить всё

olej@virtualbox:~$ mc
Невозможно создать временный каталог /tmp/mc-olej: На устройстве не осталось свободного места (28)
Временные файлы будут создаваться в каталоге /tmp
Для продолжения нажмите любую клавишу...
Чего, по логике вещей и добивались...

Код: Выделить всё

root@virtualbox:/# ls -l /oooooooo.ooo
-rw------- 1 root root 10400096256 ноя 16 03:00 /oooooooo.ooo
Через 45 минут этого безобразия:

Код: Выделить всё

root@virtualbox:/# kill -9 1207

Код: Выделить всё

root@virtualbox:~# time sfill -fz /
Убито

real    49m8,337s
user    12m16,683s
sys     1m46,858s

Код: Выделить всё

root@virtualbox:/# rm /oooooooo.ooo

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

VirtualBox: уменьшение размера диска VM

Непрочитанное сообщение Olej » 16 ноя 2023, 03:55

Olej писал(а):
16 ноя 2023, 03:54
Через 45 минут этого безобразия:
После остановки VM:

Код: Выделить всё

olej@R420:/mnt/sdc3/VirtualBoxVMs/linux-ru.ru$ time VBoxManage modifyhd linux-ru.ru.vdi --compact
VBoxManage: error: Cannot register the hard disk '/mnt/sdc3/VirtualBoxVMs/linux-ru.ru/linux-ru.ru.vdi' {31314f59-3aad-437d-8608-3c4fd93c3f60} because a hard disk '/home/olej/sdc3/VirtualBoxVMs/linux-ru.ru/linux-ru.ru.vdi' with UUID {31314f59-3aad-437d-8608-3c4fd93c3f60} already exists
VBoxManage: error: Details: code NS_ERROR_INVALID_ARG (0x80070057), component VirtualBoxWrap, interface IVirtualBox, callee nsISupports
VBoxManage: error: Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, enmAccessMode, fForceNewUuidOnOpen, pMedium.asOutParam())" at line 187 of file VBoxManageDisk.cpp

real	0m0,072s
user	0m0,018s
sys	0m0,046s
Облом :cry:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

VirtualBox: уменьшение размера диска VM

Непрочитанное сообщение Olej » 16 ноя 2023, 04:01

Olej писал(а):
16 ноя 2023, 03:55
Облом
Находит это разрешение вот здесь - Как уменьшить размер динамического диска в VirtualBox для ОС Linux
23.11.2022
...
Если виртуальная машина (и ее диск) не зарегистрированы в VirtualBox, то сжатие происходит следующей командой:

Код: Выделить всё

$ vboxmanage modifymedium --compact "our_disk.vdi"
Если же окажется, что виртуалка и ее диск зарегистрированы, то такая команда может завершится ошибкой:

Код: Выделить всё

$ vboxmanage modifymedium --compact our_disk.vdi
VBoxManage: error: Cannot register the hard disk '/opt/vmFarm/our_disk.vdi' {1bbd8dbe-d0c7-4db7-9717-85313fe7e721} because a hard disk '/opt/vmFarm/our_disk.vdi' with UUID {1bbd8dbe-d0c7-4db7-9717-85313fe7e721} already exists
VBoxManage: error: Details: code NS_ERROR_INVALID_ARG (0x80070057), component VirtualBoxWrap, interface IVirtualBox, callee nsISupports
VBoxManage: error: Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, enmAccessMode, fForceNewUuidOnOpen, pMedium.asOutParam())" at line 191 of file VBoxManageDisk.cpp
Такая ошибка может возникать в случае, если VDI-файл лежит в каталоге, который является линком (link) на другой каталог. Внутри VirtualBox файл видится по одному пути, а в момент выполнения консольной sh-команды полный путь к файлу разворачивается по другому пути. И тот и тот путь правильный, но VirtualBox считает их разными, т. е. не видит их эквивалентность, от чего и происходит ошибка.
В любом случе становится понятно, что диск виртуалки зарегистрирован. И для такого диска лучше применить ту же самую команду, но с использованием UUID. Если UUID диска неизвестен, его можно посмотреть командой:

Код: Выделить всё

$ vboxmanage list hdds
По такой команде следует большой список UUID всех моих виртуальных машин...
Выбираю нужную:

Код: Выделить всё

olej@R420:/mnt/sdc3/VirtualBoxVMs/linux-ru.ru$ VBoxManage list hdds | grep linux-ru.ru.vdi -B4 -A3
UUID:           31314f59-3aad-437d-8608-3c4fd93c3f60
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       /home/olej/sdc3/VirtualBoxVMs/linux-ru.ru/linux-ru.ru.vdi
Storage format: VDI
Capacity:       15360 MBytes
Encryption:     disabled
И ужатие теперь пошло...

Код: Выделить всё

olej@R420:/mnt/sdc3/VirtualBoxVMs/linux-ru.ru$ time VBoxManage modifymedium --compact 31314f59-3aad-437d-8608-3c4fd93c3f60
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

real	1m11,780s
user	0m0,180s
sys	0m0,198s
Только закончился этот способ неудачей ... может я с утилитой недоработал...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

VirtualBox: уменьшение размера диска VM

Непрочитанное сообщение Olej » 16 ноя 2023, 04:06

Olej писал(а):
16 ноя 2023, 04:01
закончился этот способ неудачей
Пробую другой, и более понятный способ - Уменьшаем объем виртуального диска VDI в VirtualBox
00:02, 04.02.2021
Открываем терминал Linux в виртуальной машине и вводим следующие команды:

Код: Выделить всё

sudo dd if=/dev/zero of=zero.small.file bs=1024 count=102400
sudo dd if=/dev/zero of=zero.file bs=1024
sudo sync ; sleep 60 ; sync
sudo rm zero.small.file
sudo rm zero.file

Код: Выделить всё

root@virtualbox:~# dd if=/dev/zero of=zero.small.file bs=1024 count=102400
102400+0 записей получено
102400+0 записей отправлено
104857600 байт (105 MB, 100 MiB) скопирован, 0,432309 s, 243 MB/s

Код: Выделить всё

root@virtualbox:~# time dd if=/dev/zero of=zero.file bs=1024
dd: ошибка записи 'zero.file': На устройстве не осталось свободного места
10053385+0 записей получено
10053384+0 записей отправлено
10294665216 байт (10 GB, 9,6 GiB) скопирован, 184,961 s, 55,7 MB/s

real	3m4,965s
user	0m10,496s
sys	0m47,505s
Здесь нагрузочка (процессор) довольно приличная:
Снимок экрана от 2023-11-16 02-33-17.png
Снимок экрана от 2023-11-16 02-33-17.png (71.35 КБ) 294 просмотра
На протяжении выполнения могу видеть в другом терминале:

Код: Выделить всё

olej@virtualbox:~$ df
Файловая система 1K-блоков Использовано Доступно Использовано% Cмонтировано в
udev               2005656            0  2005656            0% /dev
tmpfs               404128         5540   398588            2% /run
/dev/sda1         15389720     13016140  1570824           90% /
tmpfs              2020624            0  2020624            0% /dev/shm
tmpfs                 5120            0     5120            0% /run/lock
tmpfs              2020624            0  2020624            0% /sys/fs/cgroup
tmpfs               404124            0   404124            0% /run/user/1001
...

Код: Выделить всё

olej@virtualbox:~$ df
Файловая система 1K-блоков Использовано Доступно Использовано% Cмонтировано в
udev               2005656            0  2005656            0% /dev
tmpfs               404128         5540   398588            2% /run
/dev/sda1         15389720     15373340        0          100% /
tmpfs              2020624            0  2020624            0% /dev/shm
tmpfs                 5120            0     5120            0% /run/lock
tmpfs              2020624            0  2020624            0% /sys/fs/cgroup
tmpfs               404124            0   404124            0% /run/user/1001

Код: Выделить всё

root@virtualbox:~# ls -l zero*
-rw-r--r-- 1 root root 10294665216 ноя 16 03:35 zero.file
-rw-r--r-- 1 root root   104857600 ноя 16 03:31 zero.small.file
После чего:

Код: Выделить всё

root@virtualbox:~# sync ; sleep 60 ; sync

root@virtualbox:~# rm zero.small.file

root@virtualbox:~# rm zero.file
Нулями прописали диск, после чего протёрли...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

VirtualBox: уменьшение размера диска VM

Непрочитанное сообщение Olej » 16 ноя 2023, 04:10

Olej писал(а):
16 ноя 2023, 04:06
Нулями прописали диск, после чего протёрли...
После остановки VM :!:

Код: Выделить всё

olej@R420:/mnt/sdc3/VirtualBoxVMs/linux-ru.ru$ VBoxManage list hdds | grep linux-ru.ru.vdi -B4 -A3
UUID:           31314f59-3aad-437d-8608-3c4fd93c3f60
Parent UUID:    base
State:          locked write
Type:           normal (base)
Location:       /home/olej/sdc3/VirtualBoxVMs/linux-ru.ru/linux-ru.ru.vdi
Storage format: VDI
Capacity:       15360 MBytes
Encryption:     disabled

Код: Выделить всё

olej@R420:/mnt/sdc3/VirtualBoxVMs/linux-ru.ru$ time VBoxManage modifymedium 31314f59-3aad-437d-8608-3c4fd93c3f60 --compact
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

real	1m14,279s
user	0m0,218s
sys	0m0,247s
И ... "великое чудо Виниту" :-o :lol: :

Код: Выделить всё

olej@R420:~/sdc3/VirtualBoxVMs/linux-ru.ru$ ls -l linux-ru.ru.vdi 
-rw-r--r-- 1 olej olej 6925906432 ноя 16 02:43 linux-ru.ru.vdi
Снимок экрана от 2023-11-16 02-45-24.png
Снимок экрана от 2023-11-16 02-45-24.png (79.45 КБ) 296 просмотров
При фактическом размере 6.45Gb ёмкость диска осталась та же - 15Gb :!:
То чего и добивались...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

VirtualBox: уменьшение размера диска VM

Непрочитанное сообщение Olej » 16 ноя 2023, 04:12

Olej писал(а):
16 ноя 2023, 04:10
То чего и добивались...
Загрузка VM...
SSH подключение:

Код: Выделить всё

olej@R420:~$ ssh olej@192.168.1.35
olej@192.168.1.35's password: 
Linux virtualbox 4.19.0-25-amd64 #1 SMP Debian 4.19.289-2 (2023-08-08) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Nov 16 03:34:22 2023 from 192.168.1.14

Код: Выделить всё

olej@virtualbox:~$ df
Файловая система 1K-блоков Использовано Доступно Использовано% Cмонтировано в
udev               2005656            0  2005656            0% /dev
tmpfs               404128         5540   398588            2% /run
/dev/sda1         15389720      5217780  9369184           36% /
tmpfs              2020624            0  2020624            0% /dev/shm
tmpfs                 5120            0     5120            0% /run/lock
tmpfs              2020624            0  2020624            0% /sys/fs/cgroup
tmpfs               404124            0   404124            0% /run/user/0
tmpfs               404124            0   404124            0% /run/user/1001
И готовый к использованию локальный форум на VM (смотрим что в адресной строке):
Снимок экрана от 2023-11-16 03-14-07.png
Снимок экрана от 2023-11-16 03-14-07.png (150.23 КБ) 296 просмотров

Ответить

Вернуться в «Виртуализация»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей