====== Уменьшение размера тонкого диска в ESXi ====== Взято тут: https://habrahabr.ru/post/276377/ Когда я начал работать с ESXi, столкнулся с проблемой нехватки дискового пространства из-за сильно разросшихся тонких дисков. Вообще, лучше создавать диски меньшего размера, потому что увеличить диск в ESXi намного проще, чем уменьшить. Но что же делать, если все-таки возникла необходимость уменьшить диск? Причем, мое положение усугубляли LVM разделы на сервере, которые не распознавал Acronis, и, следовательно, не мог изменить размер раздела. Опишу способ, которым воспользовался я: ===== 1 этап. Уменьшение диска внутри виртуальной машины ===== Сперва нужно уменьшить диск внутри самой виртуальной машины, для этого существует множество универсальных программ: Acronis disc director, paragon partition manager, встроенная утилита управления дисками в windows и т.д. Мне ни одна из этих программ не помогла, поэтому пришлось использовать средства линукса и LiveCD. * Для начала нужно загрузиться с livecd linux, я использовал для этого centos 7. При загрузке виртуальной машины клавиша ESC для появления меню загрузки. * Активируем LVM разделы vgchange -a y * Проверка активированных логических томов lvscan * Проверяем файловые системы fsck -fy /dev/test/root fsck -fy /dev/test/home * Уменьшаем размер файловой системы resize2fs /dev/test/home 190G * Уменьшаем размер тома до размера файловой системы lvreduce -L 190G /dev/test/home Также мы можем добавить это место к другом тому. Для этого: Увеличиваем том root: lvextend -L +10G /dev/test/root Увеличиваем размер файловой системы на томе root до размера тома: resize2fs /dev/test/root * Опять проверяем целостность файловой системы fsck -fy /dev/test/root fsck -fy /dev/test/home * Далее можно запустить виртуальную машину и убедиться, что все корректно работает df -h ===== 2 этап. Уменьшение provisioning space ===== * Выключаем виртуальную машину * Подключаемся по SSH к физическому серверу, на котором установлен ESXi * Переходим в каталог, в котором хранится vmdk файл ВМ (путь можно узнать в свойствах виртуального диска в графическом клиенте vSphere). У меня это cd /vmfs/volumes/datastore1*/ Каталог имеет подобную структуру: /vmfs/volumes/53114b32-24d88d5a-2cbe-0025b500004f/MTS-SCPortal-TEST3 # ls -l total 19810320 -rw-r--r-- 1 root root 27 Dec 20 20:46 VM_name-0b1f4705.hlog -rw------- 1 root root 6442450944 Feb 2 08:24 VM_name-0b1f4705.vswp -rw------- 1 root root 147102629888 Feb 2 08:28 VM_name-flat.vmdk -rw------- 1 root root 8684 Feb 2 08:25 VM_name.nvram -rw------- 1 root root 507 Feb 2 08:25 VM_name.vmdk -rw-r--r-- 1 root root 0 Dec 20 20:14 VM_name.vmsd -rwxr-xr-x 1 root root 3584 Feb 2 08:25 VM_name.vmx -rw------- 1 root root 0 Feb 2 08:24 VM_name.vmx.lck -rw-r--r-- 1 root root 273 Dec 20 20:14 VM_name.vmxf -rwxr-xr-x 1 root root 3584 Feb 2 08:25 VM_name.vmx~ -rw------- 1 root root 3424256 Feb 2 08:24 vmmcores-1.gz -rw-r--r-- 1 root root 240722 Dec 20 20:46 vmware-1.log -rw-r--r-- 1 root root 1252287 Feb 2 08:24 vmware-2.log -rw-r--r-- 1 root root 43555 Feb 2 08:24 vmware-3.log -rw-r--r-- 1 root root 151873 Feb 2 08:25 vmware.log -rw------- 1 root root 122683392 Feb 2 08:24 vmx-VM_name-186599173-1.vswp /vmfs/volumes/53114b32-24d88d5a-2cbe-0025b500004f/VM_name # * Просмотрим содержимое конфигурационного файла с расширением *.vmdk с помощью команды cat или vi: cat VM_name.vmdk # Disk DescriptorFile version=1 encoding=«UTF-8» CID=829544ab parentCID=ffffffff isNativeSnapshot=«no» createType=«vmfs» # Extent description RW 44000000 VMFS «VM_name-flat.vmdk» # The Disk Data Base #DDB ddb.adapterType = «lsilogic» ddb.geometry.cylinders = «17884» ddb.geometry.heads = «255» ddb.geometry.sectors = «63» ddb.longContentID = «c78bccbfd4724f0ee20a1ef2829544ab» ddb.thinProvisioned = «0» ddb.uuid = «60 00 C2 98 20 ac 05 4a-e5 39 e4 40 e8 a2 d8 d0» ddb.virtualHWVersion = «8» * Размер vmdk диска задается в секции #Extent description (после символов RW). Меняем это значение, например, чтобы установить размер диска в 20Гб ставим 41943040 (20 Гб*1024*1024*1024 / 512) vi VM_name.vmdk Я ставлю значение немного больше, чем размер, вычисленный по методике выше (41943040 (20 Гб*1024*1024*1024 / 512)), на всякий случай. * Осталось склонировать или смигрировать виртуальную машину, после чего отобразится новый размер диска. ====== Физическое уменьшение тонкого диска без изменения provisioning ====== Также возможно только уменьшить размер файла виртуальной машины, путем удаления нулевых блоков. Для этого: * Нужно заполнить все неиспользованное пространство, внутри виртуальной машины, нулями. Создаем файл по размерам неиспользуемой области диска, а потом удаляем его. cat /dev/zero > /file cd / rm file * Подключаемся по SSH к консоли ESXi как описано выше и переходим в каталог с виртуальной машиной. * В консоли гипервизора есть специальная утилита, которая позволяет затереть нулевые блоки, тем самым уменьшив физический размер тонкого диска.Делается это с помощью ключа -K (можно также использовать ключ --punchzero) в консоли сервера ESXi vmkfstools -K VM_name.vmdk Надо отметить, что утилита vmkfstools, запущенная с ключом -K, еще и может преобразовать обычный диск (zeroedthick или eagerzeroedthick) в thin disk с вычищением нулевых блоков и, соответственно, уменьшением размера vmdk. P.S. Надеюсь данная статья будет кому-то полезной. Во всяком случае, я потратил много времени, прежде чем мне удалось корректно уменьшить размер тонкого диска. {{tag>esxi reduce disk уменьшение_диска}}