У нас есть традиция. Каждый год 30 декабря на сервере заканчивается место...
Шлифуем админское кунг-фу. Расширим раздел диска и файловую систему на лету без перезагрузки и без потери данных. Ранее я уже расширял разделы, но везде использовал fdisk. Сегодня я буду расширять диск на виртуальной машине VMware с операционной системой Ubuntu с помощью growpart. Данный метод подойдёт для Debian систем.
Подготовка
Увеличиваем диск на виртуальной машине VMware. Затем делаем снапшот на всякий случай. Если сначала сделать снапшот, то не получится увеличить размер диска.
Действовать приходится быстро, скриншоты делать некогда. На виртуалке у нас два диска по 50 ГБ, место закончилось на втором, а именно на /dev/sdb. Если быть точнее, на разделе /dev/sdb1. Я увеличиваю второй диск виртуалки со 50 до 60 ГБ. Решение временное, нужно потом разобраться как так быстро место закончилось за ночь, но это сейчас не важно, нужно запустить сервис.
Расширяем раздел
Заходим на виртуалку по SSH под рутом.
Мы увеличили диск sdb но система об этом не знает, нужно заставить сделать рескан диска.
echo 1>/sys/class/block/sdb/device/rescan
Или по всем дискам, если требуется:
for D in $(ls /sys/block/sd?/device/rescan ); do echo ${D}; echo 1 > ${D}; done
Теперь нужно изменить наш раздел. Воспользуемся утилитой growpart. Она входит в пакет cloud-guest-utils.
apt-get install cloud-guest-utils
growpart /dev/sdb 1
root@test-pg01:~# growpart /dev/sdb 1 CHANGED: partition=1 start=2048 old: size=104853504 end=104855552 new: size=125827039 end=125829087
Раздел увеличился но файловая система об этом не знает. Теперь изменяем файловую систему (если файловая система xfs то используем xfs_growfs /путь_куда_примонтировано)
resize2fs /dev/sdb1
root@test-pg01:~# resize2fs /dev/sdb1 resize2fs 1.45.5 (07-Jan-2020) Filesystem at /dev/sdb1 is mounted on /var/lib/postgresql; on-line resizing required old_desc_blocks = 7, new_desc_blocks = 8 The filesystem on /dev/sdb1 is now 15728379 (4k) blocks long.
Смотрим что получилось.
lsblk
root@test-pg01:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 1M 0 part └─sda2 8:2 0 50G 0 part / sdb 8:16 0 60G 0 disk └─sdb1 8:17 0 60G 0 part /var/lib/postgresql sr0 11:0 1 1024M 0 rom
На /dev/sdb1 стало 60 ГБ места, база заработала, можно спать. Быстро и удобно. Хороший метод. Все действия на одном скрине:
Ссылки
Linux — расширяем раздел на лету
Linux — расширяем раздел на лету 2
Linux — расширяем раздел на лету 3
Linux — расширяем раздел на лету 4