У меня есть экземпляр Ubuntu с динамическим диском, в котором отчеты df используют 30 ГБ (это о том, что df
отчеты тоже), и все же файл vdi 130gig на диске:
Я не припоминаю, чтобы он занимал столько места раньше - (но не на 100%) - это почти как если бы гость использовал больше дискового пространства, а затем однажды хост внезапно изменил его размер до гораздо большего размера, чем обязательный.
Я действительно не хочу сжимать диск с динамическим размером (что невозможно), но мне интересно, почему фактический VDI должен предполагать в 5 раз больше места основного гостя - не кажется очень `` динамичным ''
Ответ на этот вопрос довольно прост.
Каждый раз, когда ваш гость записывает данные на диск в место, куда ранее не производилась запись, размер VDI увеличивается для размещения «новых» данных. VirtualBox не знает, что хранится на диске. Так что не имеет значения, если это неиспользуемое пространство. Единственное, что имеет значение, это то, что пространство было использовано в какой-то момент.
Теперь, если гость записал 20 ГБ непрерывных данных (один байт следует за следующим), то для файла VDI потребуется 20 ГБ места на физическом жестком диске.
Но на самом деле это не так. Вместо этого гостевая виртуальная машина будет постоянно читать / записывать / перемещать данные. Даже если те же 20 ГБ данных будут перемещены в новые области раздела, VDI будет расти, чтобы вместить «новые» данные.
Файл VDI никогда не сжимается и, в конечном итоге, всегда достигает предопределенного максимального размера.
Тонкие (или так называемые разреженные или динамические в терминологии виртуальных боксов) образы дисков со временем будут увеличиваться в размере, но никогда не уменьшатся. Вот пример: вы создаете тонкий диск VDI объемом 10 ГБ, монтируете его, а затем начинаете создавать / удалять серию относительно небольших файлов в цикле. Даже если размер каждого из этих небольших файлов не превышает 100 МБ, ваш диск VDI быстро вырастет до максимального размера.
Начнем с диска 10G, который был только что создан и смонтирован. Вот как это выглядит в ВМ
[root@localhost ~]# df -h | egrep "^Filesystem|test"
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/test-lvol 9.9G 23M 9.4G 1% /mnt
А так это выглядит вне ВМ (на хосте)
ls -lh|grep New
-rw------- 1 dmitryzayats staff 94M Oct 28 23:33 NewVirtualDisk1.vdi
Таким образом, на хосте требуется чуть меньше 100 МБ.
Теперь мы последовательно запустим этот один лайнер-скрипт. Создание и удаление 1000 относительно небольших файлов размером 100M. В любой момент времени наша виртуальная машина покажет, что мы потребляем только 200 МБ файловой системы.
for i in {1..1000}; do echo "Run=$i"; dd if=/dev/urandom of=/mnt/testfile${i} bs=1M count=100; df -h; rm -f /mnt/testfile$(($i-1)); done
Run=319
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.944908 s, 111 MB/s
Filesystem Size Used Avail Use% Mounted on
devtmpfs 992M 0 992M 0% /dev
tmpfs 1001M 0 1001M 0% /dev/shm
tmpfs 1001M 584K 1000M 1% /run
tmpfs 1001M 0 1001M 0% /sys/fs/cgroup
/dev/mapper/fedora-root 13G 4.3G 7.4G 37% /
/dev/sda1 976M 82M 828M 9% /boot
tmpfs 1001M 4.0K 1001M 1% /tmp
tmpfs 201M 0 201M 0% /run/user/0
/dev/mapper/test-lvol 9.9G 223M 9.2G 3% /mnt
Но с точки зрения хозяина все будет выглядеть иначе.
ls -lh|grep New
-rw------- 1 dmitryzayats staff 9.8G Oct 29 00:13 NewVirtualDisk1.vdi
Причина в том, что каждый раз, когда создается новый файл, ОС может записывать данные в другое место на блочном устройстве. Затем, когда файл удаляется - с точки зрения виртуальной машины пространство теперь свободно, но на базовом пространстве VDI уже было зарезервировано, размер файла VDI увеличился, и нет возможности его уменьшить. Есть несколько возможностей уменьшить его, но для этого потребуется выключить виртуальную машину и пробить дыры в файле VDI. Вы можете погуглить, "пробивая дыры в разреженных файлах".
Некоторые рабочие нагрузки особенно плохо работают с тонкими дисками. Например, если база данных Oracle находится в режиме архива - она создаст много архивных журналов, и даже если они будут регулярно удаляться с помощью rman - она быстро заполнит тонкий диск до максимального размера.