Иногда возникает необходимость расширить диск Linux на лету, когда заканчивается место, а диск нельзя отмонтировать. К счастью, на файловой системе ext4 это возможно.
Например, у нас имеется диск /dev/sdd размером 100Гб. На нем раздел /dev/sdd1 и он примонтирован (это может быть даже корневой раздел).
# fdisk -l /dev/sdd
Создадим раздел и отформатируем его
# fdisk /dev/sdd
Потом можно нажать n, затем Enter, потом 4 раза Enter (если раздел будет занимать весь диск) и в конце w и Enter.
# mkfs.ext4 /dev/sdd1
Как видим, на диске теперь есть раздел с файловой системой ext4
Сейчас создадим директорию, которая будет точкой монтирования и примонтируем раздел.
# mkdir /mnt/mydisk
# mount /dev/sdd1 /mnt/mydisk
Можем создать там файл MyFile и директорию MyDir
# touch /mnt/mydisk/MyFile
# mkdir /mnt/mydisk/MyDir
Расширим диск на лету
Сначала мы перейдем в настройки виртуальной машины и раширим диск, например, на 50Гб.
Посмотрим, что теперь в нашем Linux
Ничего не изменилось… А все потому, что в линукс необходимо пересканировать диск вручную. Для этого выполним следующую волшебную команду:
# echo '1' > /sys/class/scsi_disk/2\:0\:3\:0/device/rescan
У нас пересканируется диск 3 (счет начиная с 0), потому что у нас sdd.
Смотрим что получилось
То, что нужно!
Расширяем раздел и файловую систему
Конечно, мы могли бы упростить себе жизнь, имея X сервер и используя gparted с графическим интерфейсом для этого. Но мы сделаем это через коммандную строку.
Для расширения раздела будем использовать parted
# parted /dev/sdd
Затем пишем команду resizepart 1, жмем Enter. Пишем Yes, жмем Enter. И чтобы расширить до конца диск (то есть использовать все свободное пространство на диске) пишем -0 и жмем Enter. Выходим командой quit.
После этого нам необходимо расширить файловую систему. У нас ext4, поэтому мы можем это легко сделать с помощью команды resize2fs
# resize2fs /dev/sdd1
Вот и все! Мы без отмонтирования раздела и перезагрузки хоста расширили раздел на нашем Linux.
Проверим
Добрый день. Можно пояснить что означают четыре цифры в волшебной команде сканирования. # echo ‘1’ > /sys/class/scsi_disk/2\:0\:3\:0/device/rescan
я правильно понял что это номер scsi устройства?
Доброго дня. Да. Там указаны шина, контроллер, диск. Tab’ом лучше “подсмотреть” что там у Вас конкретно есть. Подобная штука описана в этой заметке – https://unlix.ru/%d0%b4%d0%be%d0%b1%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b8-%d1%83%d0%b4%d0%b0%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-satascsi-%d1%83%d1%81%d1%82%d1%80%d0%be%d0%b9%d1%81%d1%82%d0%b2-%d0%bd%d0%b0/
Благодарю