Почему является мой дисковый файл VM больше, чем 2x больше затем фактический FS?

У меня есть VM с маленьким сервером Debian 7 в VM VMware Player. Диск имеет максимальный размер 55 ГБ, свойства виртуальной машины показывают текущий размер 46,5 ГБ.

Никакие другие диски/объемы не смонтированы на устройстве, debian говорит мне, что диск только используется для 16 ГБ, как фактический vm дисковый файл может быть почти 3x размер?!

root@websrv:~# df -hT
Filesystem                                             Type      Size  Used Avail Use% Mounted on
...
/dev/disk/by-uuid/ac9f2318-3e32-4b50-9178-20e5362013b0 ext4       48G   16G   30G  36% /
...

PS: vm не имеет никаких снимков, всего 2 сетевых устройства и ничто иное настроенное, просто простая небольшая система веб-сервера.

5
задан 4 July 2015 в 09:21
2 ответа

Любой блок на виртуальном диске, который вы когда-либо использовали, будет засчитываться в размер VHD, удаление файлов в файловой системе не освобождает блоки в VHD. Для файлов виртуального диска нет механизма, эквивалентного "TRIM".

.
8
ответ дан 3 December 2019 в 00:58

Первая причина заключается в том, что, возможно, на диске ВМ был установлен "фиксированный размер" или "толстый размер", вариант, который распределяет весь объем дискового пространства перед форматированием. Второй вариант (что более вероятно) заключается в том, что форматирование диска в файловой системе ext4 создает структуры FS по всему диску, что приводит к тому, что VMware Player выделяет все пространство под файл vdisk. Наиболее вероятной причиной выделения всего размера является расположение суперблока в ext4, эта файловая система дублирует свой суперблок в нескольких местах, сильно разбросанных по всему диску, и VMware Player может не поддерживать разреженные VHD, таким образом, выделяет весь размер VHD на диске.

О том, почему размер 48Гб, а размер VHD 55Гб - в файловой системе ext4 есть определенные структуры данных, которые занимают необработанное дисковое пространство, которое эффективно уменьшается, если посмотреть на вывод df. Для определения фактического размера дискового устройства из гостевой операционной системы, используйте либо решение из этого вопроса , либо cat /proc/partitions, либо blockdev --getsize64 (device).

.
7
ответ дан 3 December 2019 в 00:58

Теги

Похожие вопросы