Обычно при создании разделов на серверах и виртуальных машинах я использую lvm, но не в этот раз. Мне нужно было увеличить корневой раздел / с файловой системой xfs и желательно без остановки сервера. Изначально была идея делать маленькие корневые разделы для виртуальных машины, чтобы быстро делать бэкап системы без данных. Но на деле у такого подхода есть свои минусы и неудобства.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
В итоге, настал момент, когда мне надоело чистить системный раздел и разгружать символьными ссылками. Я решил его увеличить. Если вы используете lvm, то никаких проблем нет. Просто добавляете еще один диск к виртуальной машине или увеличиваете текущий. Потом новый диск или раздел увеличенного диска добавляете к группе томов и расширяете нужный lvm раздел. Примерно вот так:
# vgextend vg00 /dev/sdb # lvextend -r -l +100%FREE /dev/vg00/root
Работает наживую даже с корневым разделом. Я часто это делал, способ рабочий, но пару раз я ловил проблемы с загрузкой виртуалки после этого. Так что не рекомендую экспериментировать с такими вещами. Если есть возможность, лучше обойтись без изменения разделов. А если не обойтись, то перед этим обязательно сделать бэкап всей информации и продумать варианты быстрого восстановления.
Сегодня я хотел рассказать о другой ситуации. Корневой раздел не на lvm, а на обычном разделе диска с xfs. Изначально диск виртуалки был 10G, через гипервизор я его расширил до 20G. Получилась такая картина:
Сам диск 20G, а его разделы занимают только 10. Мне надо расширить раздел sda2, на котором точка монтирования /.
На сайте redhat нашел казалось бы рабочий вариант с xfs_growfs. Попробовал запустить:
# xfs_growfs / -d
Получил в конце сообщение - data size unchanged, skipping. Стал разбираться, почему не работает команда, хотя вроде должна. Потом сообразил, что я не правильно понял ее назначение. Она расширит файловую систему xfs, если на разделе есть свободное место. Но у меня то раздел /dev/sda2 на 9G и он весь занят файловой системой. Расширять нечего. Надо сначала увеличить сам раздел.
Для увеличения раздела нагуглил другую утилиту - growpart. Устанавливаю на Centos 7:
# yum install cloud-utils-growpart
Напомню, что у меня перед расширением раздела с xfs вот такая картинка по разбиению диска - диск sda, далее /boot раздел sda1 на 1G, потом корень / sda2 на 9G и дальше свободное место 10G. Мне надо увеличить второй раздел свободным местом. Делаю это так:
# growpart /dev/sda 2 CHANGED: partition=2 start=2099200 old: size=18872320 end=20971520 new: size=39843807,end=41943007
Теперь уже расширяю файловую систему xfs на все пространство увеличенного раздела:
# xfs_growfs -d / meta-data=/dev/sda2 isize=512 agcount=4, agsize=589760 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=2359040, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 2359040 to 4980475
Корневой раздел root / с xfs расширил на лету, без остановки и перезагрузки системы. Изначально в рунете нашел информацию по увеличению раздела только через размонтирование, а если системный раздел, то через загрузку с livecd с последующим удалением текущего раздела и созданием нового, расширенного.
Покопался в буржунете и собрал вот такой рабочий вариант, который опробовал сам на практике на продуктовом сервере с предварительным бэкапом всей виртуалки. Откатываться не пришлось, все получилось не сложнее, чем с lvm. Изначально не питал больших надежд на такой исход, готовился к переустановке. Но обошелся малой кровью.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Подскажите, если нужно не увеличить, а уменьшить раздел с xfs_growfs на всё доступное пространство.
Вот с resize2fs -p -M /dev/ваш раздел диска получается, ключ М помогает. А как также сделать с xfs_growfs ?
Простая ситуция - виртуалка дебиан с LVM, на одном из разделов база постгрес разжирела, вакуум не возвращает свободное место операционной системе. Приходится делать вакум фулл - который возвращает, однако при этом нужно место на текущем разделе, соизмеримым с самой базой (либо с самой жирной таблицей . Один из выходов - подкинуть физ диск (в данном случае заАттачить в KVM), добавить его в PV и в группу , увеличив затем пространство. И вот наконец-то вакуум фулл прошёл, база стала меньше занимать намного и свободного места стало больше, чем тот диск, который заАттачили. Хочется его "вытащить" из LVM и из виртуалки в целом, он нам уже (какое-то время) не нужен. Вот тут парень пишет https:// adminway.ru/kak-otklyuchit-zhestkii-disk-ot-lvm-v-linux, однако там фс ext4, а у меня xfs. Подскажите как решить такой кейс, чёт вообще с этими экстентами немогу разобраться. Должен быть выход.
XFS не поддерживает уменьшение. Это архитектурное ограничение и с этим ничего не поделать. EXT4 можно уменьшить, XFS - нет.
Подскажите тогда можно ли так сделать: просто все файлы раздела в tar и перенести на временное место. Удалить этот xfs раздел и расформировать его лвм структуру. Далее создать снова такой же раздел, но без объёма диска, который приАттачил, сделать фс. Ну и вернуть данные из тар архива. Или это костыль? Если dd делать, то он потом на меньшем объеме не развернётся, ведь так?
Вариантов решения вопроса много. Подключите новый диск нужного объёма в виртуалку. Остановите postgresql, перенесите базу на новый диск. Отмонтируйте старый диск, примонтируйте новый, куда перенесли базу, в ту же точку монтирования. Вот и всё. Это при условии, что на сервере есть возможность добавить диск нужного размера.
Имею виртуалку Zabbix Appliance 6.0.6 со следующими разделами
[root@appliance ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 25M 1.9G 2% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda2 4.0G 1.4G 2.7G 34% /
/dev/sda3 1014M 40M 975M 4% /tmp
/dev/sda1 488M 50M 403M 11% /boot
tmpfs 393M 0 393M 0% /run/user/0
/dev/sda5 4.5G 1.6G 2.9G 36% /var/lib/mysql
Необходимо увеличить свободное место в партиции для БД до максимума, место есть
[root@appliance ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 256G 0 disk
├─sda1 8:1 0 512M 0 part /boot
├─sda2 8:2 0 4G 0 part /
├─sda3 8:3 0 1G 0 part /tmp
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 4.5G 0 part /var/lib/mysql
Сначала делаю как предложено в статье
[root@appliance ~]# growpart /dev/sda 5
CHANGED: partition=5 start=11538432 old: size=9433088 end=20971520 new: size=525332447 end=536870879
Расширяю дисковое пространство
[root@appliance ~]# xfs_growfs -d /dev/sda5
meta-data=/dev/sda5 isize=512 agcount=4, agsize=294784 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=1179136, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data size unchanged, skipping
Не получилось, пробую по другому
[root@appliance ~]# xfs_growfs -d /var/lib/mysql
meta-data=/dev/sda5 isize=512 agcount=4, agsize=294784 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=1179136, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data size unchanged, skipping
Тот же результат.
Ну и закономерный вопрос - ЧЯДНТ ? Судя по комментам людям удавалось увеличить дисковый раздел для Zabbix предложенным способом, но в готовом решении Zabbix он почему то не работает.
Проверьте, после команды growpart /dev/sda 5 размер раздела реально увеличился или нет? Этот способ 100% рабочий, я много раз им пользовался.
Судя по выводу lsblk все осталось без изменений.
lsblk не показывает размер разделов, он показывает размер файловой системы на разделах. А сами разделы надо смотреть с помощью gparted или fdisk.
Судя по всему /dev/sda5 логический раздел на /dev/sda4.
Тебе нужно сначала увеличить /dev/sda4
sudo growpart /dev/sda 4
Затем действовать по инструкции в статье для /dev/sda5
Art, это можно увидеть командой
sudo parted -l
ART, ну или в выводе fdisk -l, их области будут совпадать. То есть start для sda5 будет чуть больше, чем start для sda4, end будет одинаковым.
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 16G 0 16G 0% /dev
tmpfs tmpfs 16G 20K 16G 1% /dev/shm
tmpfs tmpfs 16G 89M 16G 1% /run
tmpfs tmpfs 16G 0 16G 0% /sys/fs/cgroup
/dev/sda2 xfs 4.0G 3.2G 859M 79% /
/dev/sda3 xfs 1014M 40M 975M 4% /tmp
/dev/sda1 ext4 488M 132M 321M 30% /boot
/dev/sda5 xfs 55G 4.1G 51G 8% /var/lib/mysql
с таким колхозом, как я понимаю, можно только майскуль увеличить ?
Если разделы идут один за другим, то да, только последний раздел можно увеличить. Как вариант, можно еще удалить /tmp, за счет его размера расширить корень /, а для /tmp создать новый раздел или другой диск подключить.
со второй попытки все же скормил новый (вмварьный) диск под /usr
Просидел пол-дня, думал как раздел для zabbix увеличить. А потом наткнулся на твою статью и сделал за 5 минут! :)
Спасибо за помощь!
все четко коротко и ясно, аккурат для таких как я))) до этой статьи 2 часа искал решение проблемы (не увеличивался раздел без размонтирования - вылезала ошибка суперблока - хз че эт такое даже разбираться не стал, голову забивать) а тут без воды и по делу
Потому что самому надо было сделать подобное. Сделал и сразу записал. Со временем, к сожалению, все равно что-то меняется и статья теряет актуальность. Но тут тема почти вечная. Файловые системы редко меняются.
Спасибо.
Выручил
Расширил место в zabbix /var/lib/mysql
Способ рабочий. Только что на лету расширил системный раздел еще на одном сервере.
в твоем примере диск был изначально 20G? или с начало 10G и ты его увеличил в виртуальной машине
Был 10, увеличил в свойствах диска на гипервизоре до 20.
и без перезагрузки он увиделся 20? и для этого не чего не делал?
Все, что я сделал - описал в статье. Вопрос не понял.
просто не всегда даже для lv раздела получается увеличить его при увеличении диска в vm без перезагрузки этой vm, просто не видит диск увеличенного размера
В kvm сразу видит. В hyper-v, по-моему, тоже. Вот в Xen перезагрузка нужна была, чтобы виртуалка увидела диск с новым размером. То же самое в vmware, возможно от версии зависело. Точно не помню, где встречался с этим, но был удивлен, когда узнал, что надо виртуалку перезагрузить, чтобы увидеть новый размер диска.
у меня как раз vmware и все не как не найду решение этой проблемы
а какая версия vmware?
По поводу growpart утилиты не понял, она ток для виртуалок или на железе тоже можно использовать? По идее разницы быть не должно но инфы по утилите не нашёл
На железе тоже можно. С уровня файловой системы нет разницы, железо или виртуальная машина.
поиск новый дисковых устройств на scsi-шине X:
echo "- - -" > /sys/class/scsi_host/hostX/scan
поиск дополнительного места на диске X:
echo 1 > /sys/block/sdX/device/rescan
удаление диска Х из системы:
echo 1 >/sys/block/sdX/device/delete
а как на счет etx4?
С ext4 ровно то же самое. Это файловая система и она стоит поверх раздела. Если раздел не изменён, то и расшиться некуда.
Вообще в линухе можно расширить раздел и штатными средствами - с помощью fdisk. Самый волнительный момент - сначала удаляется существующий раздел! Главное новый раздел начать с того же блока что и старый. Как пример - https://devops.ionos.com/tutorials/increase-the-size-of-a-linux-root-partition-without-rebooting/
Пару недель назад именно по этой статье делал - всё успешно!
Этот способ известен, но, насколько я понял, раздел нужно отмонтировать для удаления существующего раздела. В случае с корневым разделом такой способ не подходит.
Пяткой в грудь бить не буду - у меня задача была расширить несистемный раздел, но делал я это без размонтирования. Надо будет ради интереса попробовать с системным.
Попробовал с корневым разделом - успешно!
Как в приведённой ссылке удалил партицию и создал заново большего размера. Потом дал команду "partprobe" чтобы данные перечитались налету.
Поскольку делал на Centos с LVM, о потребовалось дополнительно расширить PV командой "pvresize /dev/sda2". VG у меня расширилась автоматом, а вот LV так же пришлось пнуть "lvextend -l +100%FREE /dev/centos/root". Ну и вишенка на тортике - "xfs_growfs /".
В итоге корневой раздел увеличен без размонтирований и перезагрузок.
Разве с lvm надо делать xfs_growfs / ? Команда расширения lv сама файловую систему расширяет. Ну и в целом для lvm операции расширения раздела не имеет смысла. Можно создать новый раздел, добавить к pv, потом расширить lv.
По xfs_growfs / не скажу - я как то сходу команду ввёл и не посмотрел расширил lvextend файловую систему или нет.
По lvm - у меня под рукой такая машина была, поэтому с ним и делал опыт.