====== Уменьшение размера тонкого диска в 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 уменьшение_диска}}