Шлифуем админское кунг-фу. Расширим раздел диска и файловую систему на лету без перезагрузки и без потери данных. Ранее я уже расширял разделы, но везде использовал fdisk. Сегодня я буду расширять диск на виртуальной машине VMware с операционной системой Ubuntu с помощью parted. Данный метод подойдёт для Debian систем.
Подготовка
Увеличиваем диск на виртуальной машине VMware. Затем делаем снапшот на всякий случай. Если сначала сделать снапшот, то не получится увеличить размер диска.
Я увеличиваю второй диск виртуалки со 100 до 200 ГБ.
Расширяем раздел
Заходим на виртуалку по SSH под рутом. Смотрим что есть.
lsblk
root@log00:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 4K 0 disk sda 8:0 0 20G 0 disk ├─sda1 8:1 0 91M 0 part [SWAP] ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 19,9G 0 part / sdb 8:16 0 100G 0 disk └─sdb1 8:17 0 100G 0 part /var/lib/elasticsearch sr0 11:0 1 1024M 0 rom
Мы увеличили диск 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
lsblk
root@log00:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 4K 0 disk sda 8:0 0 20G 0 disk ├─sda1 8:1 0 91M 0 part [SWAP] ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 19,9G 0 part / sdb 8:16 0 200G 0 disk └─sdb1 8:17 0 100G 0 part /var/lib/elasticsearch sr0 11:0 1 1024M 0 rom
Теперь нужно изменить наш раздел. Посмотрим.
parted /dev/sdb p
root@log00:~# parted /dev/sdb p Модель: VMware Virtual disk (scsi) Диск /dev/sdb: 215GB Размер сектора (логич./физич.): 512B/512B Таблица разделов: msdos Флаги диска: Номер Начало Конец Размер Тип Файловая система Флаги 1 1049kB 107GB 107GB primary ext4
Заметим, что parted может показать диск большего размера, чем мы задали, запомним его: 215 GB, используем для указания размера раздела. У него там свои тонкости, VMware делает диски в GiB, система тоже показывает диск как G (это GiB), а parted работает с GB, это метрическая система, там не 1024, а 1000.
200 GiB = 204800 MiB = 209715200 KiB = 214748364800 B 214748364800 B = 214748365 KB = 214748 MB = 215 GB
Изменяем раздел.
parted «диск» resizepart «номер раздела» y «новый размер»GB
parted /dev/sdb resizepart 1 y 215GB
root@log00:~# parted /dev/sdb resizepart 1 y 215GB Предупреждение: Раздел /dev/sdb1 используется. Действительно хотите продолжить? Информация: Не забудьте обновить /etc/fstab.
Смотрим что получилось.
lsblk
root@log00:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 4K 0 disk sda 8:0 0 20G 0 disk ├─sda1 8:1 0 91M 0 part [SWAP] ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 19,9G 0 part / sdb 8:16 0 200G 0 disk └─sdb1 8:17 0 200G 0 part /var/lib/elasticsearch sr0 11:0 1 1024M 0 rom
Раздел увеличился но файловая система об этом не знает. Теперь изменяем файловую систему (если файловая система xfs то используем xfs_growfs /путь_куда_примонтировано)
resize2fs /dev/sdb1
root@log00:~# resize2fs /dev/sdb1 resize2fs 1.42.13 (17-May-2015) Filesystem at /dev/sdb1 is mounted on /var/lib/elasticsearch; on-line resizing required old_desc_blocks = 7, new_desc_blocks = 13 The filesystem on /dev/sdb1 is now 52428544 (4k) blocks long.
Проверяем свободное место после изменения размера.
df -h
root@log00:~# df -h Файл.система Размер Использовано Дост Использовано% Cмонтировано в udev 3,9G 0 3,9G 0% /dev tmpfs 799M 84M 716M 11% /run /dev/sda5 20G 7,1G 12G 39% / tmpfs 3,9G 12K 3,9G 1% /dev/shm tmpfs 5,0M 0 5,0M 0% /run/lock tmpfs 3,9G 0 3,9G 0% /sys/fs/cgroup /dev/sdb1 197G 82G 107G 44% /var/lib/elasticsearch tmpfs 799M 0 799M 0% /run/user/10123 tmpfs 799M 0 799M 0% /run/user/10306
Раздел /dev/sdb1 с файловой системой ext4 занимает 197G. Раздел забит на 44%.
Задача выполнена. Раздел и файловая система расширены на лету без перезагрузки и без потери данных. И без остановки сервисов, работающих с этим разделом.
Ссылки
Linux — расширяем раздел на лету
Linux — расширяем раздел на лету 2
Linux — расширяем раздел на лету 3
Linux — расширяем раздел на лету 5
Linux — расширяем раздел на лету 6
Linux — расширяем раздел на лету 7
Благодарности
Выносится благодарность без внесения в личное дело моему коллеге Денису за подробную инструкцию, основную часть которой я скопипастил в статью.?