Назад | Перейти на главную страницу

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

У меня есть виртуальная машина с небольшим сервером Debian 7 внутри виртуальной машины VMware Player. Максимальный размер диска - 55 ГБ, в свойствах виртуальной машины текущий размер - 46,5 ГБ.

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

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: у виртуальной машины нет снимков, только 2 сетевых устройства и ничего больше не настроено, просто небольшая система веб-сервера.

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

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

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