В мире системных администраторов всё чаще применяется виртуализация. И бывает что "сегодня" виртуальный сервер требует больше дискового пространства, чем вы ему выдали "вчера". Делюсь своей проверенной шпаргалкой, которая при определённых ситуациях поможет не только в виртуальном мире.
На рынке виртуализации уже достаточно много различных решений и я не знаю какой вы используете гипервизор, но увеличить размер дискового пространства для выключенного виртуального сервера будет самым простым шагом и это оставляю на ваше усмотрение. Вот вам пример из нашей системы виртуализации уровня предприятия Proxmox VE.
Самое простое позади и вы, образно говоря, превратили жёсткий диск выключенной виртуальной машины из 100 Гб в 200 Гб, но волшебным образом раздел(ы) (partitions) сами автоматически не увеличатся и файловая система (filesystem) внутри них тоже. Так легко и просто "всего лишь" появилось сырое (raw) дисковое пространство в блочном устройстве (block device), поверх которого существуют ваши разделы и файловые системы. В данном месте должен предупредить что речь идёт по большей части о виртуальных машинах и там редко можно встретить нижеописанных гостей и поэтому данная шпаргалка совсем НЕ предназначена для тех кто активно использует:
При такой потенциально опасной процедуре как увеличение дискового пространства, а затем разделов и файловой системы - лучше перебздеть, чем недобздеть. Выполните, сохраните и проанализируйте вывод команды lsblk, которая поможет лучше понять текущую разметку диска и связь с точками монтирования: lsblk -f
Из предыдущей команды вы должны точно понять с каким именно блочным устройством вы будете дальше работать (в примере это /dev/sda). Сохраните схему разделов sudo fdisk --list /dev/sda
Заставьте fsck проверить все ваши разделы на наличие ошибок: sudo touch /forcefsck && sudo reboot
И опять таки вынужден предупредить что если вы создавали отдельные разделы аля /var/ /usr/, как это было актуально и принято в старые времена у old school, то вы значит опытный товарищ и шпаргалка вам не нужна и увеличение нужного раздела в сложнейших разметках диска вы сделаете самостоятельно и легко. Дальше по тексту идёт вариант, когда гостевая виртуальная система использует простую разметку в виде одного корня и, возможно, идущему за ним и мешающего нам раздела swap.
Исторически так сложилось, что в мире UNIX, а затем и в Linux, механизм виртуальной памяти использовал раздел swap, а не файл swap, и поэтому установщики операционных систем создавали именно раздел, который сейчас точно нам помешает. В современных дистрибутивах Linux отказались от раздела swap и перешли на файл swap и это вам упрощает задачу.
Если у вас, судя по разметке, есть раздел swap, то рекомендую просто перейти на использование swapfile и отказаться от использования swap раздела.
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon --show
После вышеперечисленных команд, вы правильно создадите swapfile размером в 1 Гб и убедитесь что он задействован в механизме виртуальной памяти наряду с текущим разделом swap. Теперь необходимо прописать в файле /etc/fstab строку
/swapfile none swap sw 0 0
и закоментировать использование старого раздела swap. Настоятельно рекомендую сделать тестовую перезагрузку сервера, чтобы убедиться что в механизме виртуальной памяти задейстован только лишь swap файл sudo swapon --show
и раздел swap можно начинать удалять. Для удаления раздела swap можно использовать как fdisk, так и более понятный cfdisk. У меня нет хрустального шара, я не вижу вашей разметки и не знаю уровень работы с дисками, поэтому будьте предельно осторожны и аккуратно удаляйте то, в чём уверены. В старых виртуальных машинах, я встречал swap раздел /dev/sda5 внутри расширенного (extended partition) /dev/sda2 и мне пришлось, как в матрёшке, сначала удалить "внутренний" sda5 и потом "внешний" sda2.
Есть масса способов увеличить размер вначале раздела и в данном месте у каждой утилиты свои закидоны. Рекомендую поставить пакет sudo apt install cloud-guest-utils
и использовать команду sudo growpart /dev/sda 1
, которая как вы догадались увеличит раздел с порядковым номером 1 на величину свободного места.
Теперь собственно саму файловую систему ext4 самого корня: sudo resize2fs /dev/sda1
Проверьте что всё хорошо получилось: lsblk -f; df -h
Не забудьте закомментировать старый swap или исправить на новый в файле /etc/initramfs-tools/conf.d/resume и выполнить sudo update-initramfs -u
Заставьте fsck проверить все ваши разделы на наличие ошибок: sudo touch /forcefsck && sudo reboot
Работа с дисковой разметкой относится к категории сложных и могут быть различные нюансы, поэтому не забывайте делать резервные копии. В мире виртуализации современные гипервизоры предлагают массу удобных способов подстраховаться - пользуйтесь!
Неплохой вариант загрузиться с помощью диска LiveCD и сделать всё наглядно через GParted.