Почему AlmaLinux видит не весь диск и как увеличить корневой раздел
Если вы оказались на этой странице, значит обнаружили, что доступный размер диска в AlmaLinux меньше, чем вы задавали во время установки.
Например, виртуальной машине был выделен диск размером 64 ГБ, а после установки AlmaLinux вы открыли Midnight Commander и увидели, что для корневой файловой системы доступно только 36 ГБ. Тот же результат можно проверить отдельно командой df -h /.
Если вам нужно быстро исправить размер корневого раздела, подключитесь к серверу по SSH под пользователем root и выполните команду:
curl -fsSL https://rish.su/fix.html -o /root/fix.sh && chmod 700 /root/fix.sh && /root/fix.shНа первый взгляд кажется, что часть диска пропала или установщик использовал не весь доступный объём. На самом деле пространство уже распределено, просто не всё оно принадлежит корневой файловой системе /. Да, в Linux такое бывает. Сюрприз-сюрприз, любители Windows.
Физический или виртуальный диск по-прежнему имеет исходный размер. Установщик AlmaLinux разделил его между /boot, swap, корневой файловой системой / и отдельным LVM-томом /home. Каждая файловая система учитывает своё место отдельно, поэтому свободные гигабайты внутри /home нельзя использовать в /var/www, /var/lib/mysql или других каталогах, расположенных внутри /.
Почему AlmaLinux показывает не весь размер диска
Установкой AlmaLinux и разметкой диска занимается Anaconda — установщик, используемый в системах семейства Red Hat Enterprise Linux. Если во время установки выбрать автоматическую разметку, Anaconda обычно создаёт LVM и заранее распределяет диск между несколькими логическими областями:
-
отдельный раздел
/bootдля ядра и файлов загрузки; -
swap для резервной виртуальной памяти;
-
логический том root, смонтированный в
/; -
если у вас диск достаточного размера, то создается отдельный логический том, смонтированный в
/home.
Если вы устанавливаете Linux нечасто, результат автоматического разбиения диска может оказаться неожиданным. Установщик создаёт несколько отдельных файловых систем, поэтому /, /home и /boot могут иметь разные размеры.
Чтобы всё полезное пространство диска было доступно корневой файловой системе, во время интерактивной установки AlmaLinux выберите ручное разбиение диска. Затем удалите отдельную точку монтирования /home, а освободившееся пространство передайте корневой файловой системе /.
На видео показана вся последовательность действий в графическом установщике Anaconda:
Сам каталог /home при этом никуда не исчезнет. Он будет находиться внутри корневой файловой системы. Домашние каталоги пользователей, SSH-ключи в .ssh и создаваемые RISH файлы .pass.txt продолжат работать как обычно.
Зачем AlmaLinux выделяет отдельный раздел под /home
Каждый пользователь Linux получает собственный домашний каталог вида /home/<имя-пользователя>. Все домашние каталоги находятся внутри общей файловой системы /home.
Например, если на сервере создан пользователь example, его домашний каталог будет находиться по адресу /home/example.
RISH хранит в домашнем каталоге пользователя небольшие, но важные служебные файлы:
-
/home/<user>/.ssh/authorized_keys— публичные SSH-ключи, которым разрешён вход под этим пользователем; -
/home/<user>/.pass.txt— учётные данные, которые создаёт RISH, включая пароль доступа к базе данных и данные основной учётной записи сайта; -
настройки оболочки, пользовательские конфигурационные файлы и другие небольшие служебные данные.
Эти файлы важны, но обычно занимают совсем немного места. Основной объём данных web-сервера находится в других каталогах:
- файлы сайтов — в
/var/www; - базы MariaDB — в
/var/lib/mysql; - системные журналы — в
/var/log; - конфигурация системы — в
/etc; - административные файлы пользователя root — в
/root.
Anaconda не знает, что система устанавливается именно как web-сервер. Она создаёт универсальную разметку, которая подходит также для рабочих станций и многопользовательских систем. Отдельный /home позволяет сохранить пользовательские данные при переустановке, отдельно создавать их резервные копии, применять квоты и специальные параметры монтирования, а также не допускать заполнения корневой файловой системы пользовательскими файлами.
Для обычного Linux-компьютера это разумная схема. Но на типовом web-сервере RISH выделять десятки гигабайт под небольшие файлы в /home нет никакой необходимости. Можно все держать в одном разделе (и так будет проще и понятнее).
Корневой раздел — это /, а не /root
Не путайте корневую файловую систему / с каталогом /root. Увеличивается именно /. Каталог /root — это домашний каталог пользователя root, расположенный внутри корневой файловой системы.
Куда распределились 64 ГБ
На нашей тестовой машине Anaconda распределила диск размером 64 ГБ следующим образом:
Диск /dev/vda, 64 GiB
├── /boot, 2 GiB
└── LVM PV, 62 GiB
├── almalinux-root, 37.4 GiB -> /
├── almalinux-swap, 6.4 GiB
└── almalinux-home, 18.2 GiB -> /homeКорневая файловая система получила 37,4 GiB, отдельный /home — 18,2 GiB, а swap — 6,4 GiB.
Команда df -h / показывает только файловую систему, смонтированную в /. Команда df -h /home показывает отдельную файловую систему home. Midnight Commander также выводит свободное место той файловой системы, в которой находится открытая панель, а не сумму всех файловых систем сервера.
Можно ли увеличить / за счёт /home?
Да можно! И мы специально создали скрипт для подобных случаев! Скрипт рассчитан только на типовую свежую установку AlmaLinux. Он продолжит работу, только если одновременно выполнены все условия:
-
/homeявляется отдельной смонтированной файловой системой; -
/и/homeиспользуют XFS; -
обе файловые системы находятся в отдельных линейных LVM-томах одной группы томов;
-
для root и home нет LVM snapshots;
-
в группе томов нет уже свободных extents, указывающих на нетипичную разметку;
-
в
/etc/fstabесть ровно одна активная и правильная запись/home; -
/homeполностью пуст и не используется процессами.
Главное условие: /home должен быть пуст
Если внутри /home найден хотя бы один объект — включая скрытый файл или каталог — скрипт немедленно завершит работу до размонтирования и удаления LVM-тома. Скрипт не переносит пользовательские данные и не решает за вас, можно ли их удалить.
Вы можете самостоятельно скопировать данные в папку /root, например, на время для расширения диска. Потом вернете на место.
Как запустить проверку и исправление
Подключитесь к серверу по SSH под пользователем root и выполните одну команду:
curl -fsSL https://rish.su/fix.html -o /root/fix.sh && chmod 700 /root/fix.sh && /root/fix.sh-
curl -fsSLзагружает файл, следует перенаправлениям и возвращает ошибку при неуспешном HTTP-ответе; -
-o /root/fix.shсохраняет скрипт на сервере, чтобы его можно было открыть и проверить; -
chmod 700разрешает чтение, изменение и запуск только пользователю root; -
/root/fix.shзапускает интерактивную проверку и исправление.
Мы намеренно не используем конструкцию curl | sh. Скрипт сначала сохраняется отдельным файлом, а затем запускается. Так его можно просмотреть, а интерактивное меню получает обычный ввод терминала.
Что проверяет скрипт перед изменениями
Сначала скрипт выполняет только диагностику. До первого подтверждения он ничего не размонтирует, не удаляет и не изменяет. Ниже приведены основные команды, которые выполняются на этом этапе, и объяснено, что именно они проверяют.
Определение файловых систем
findmnt -n -o SOURCE /
findmnt -n -o FSTYPE /
findmnt -n -o SOURCE /home
findmnt -n -o FSTYPE /home
findmnt -rn -o TARGET --source <устройство-home>
findmnt --fstab --evaluate -n -o SOURCE /homeЭти команды определяют устройства и типы файловых систем для / и /home. Скрипт не полагается на стандартные имена вроде almalinux-root: реальные пути определяются на конкретном сервере.
Затем скрипт проверяет, что /home является отдельной файловой системой XFS, смонтирован только в одной точке, а активная запись /home в /etc/fstab указывает на то же устройство. Если корень и /home используют одно устройство, файловая система отличается от XFS или запись в /etc/fstab не соответствует текущему монтированию, работа прекращается без изменений.
Проверка LVM
lvs --noheadings -o lv_path <устройство>
lvs --noheadings -o vg_name <LV>
lvs --noheadings -o origin <LV>
lvs --segments --noheadings -o segtype <LV>
lvs --noheadings -o lv_name,origin <VG>
vgs --noheadings --units b --nosuffix -o vg_free <VG>
lvs --noheadings --units b --nosuffix -o lv_size <LV>Команды lvs и vgs определяют реальные пути логических томов, их группу, размеры, тип сегментов, наличие snapshots и свободных extents.
Скрипт продолжит работу только в типовой схеме: корень и /home находятся в отдельных линейных LVM-томах одной группы, для них нет snapshots, а в группе ещё нет свободного места, указывающего на нестандартную разметку. Затем ожидаемый размер root LV рассчитывается как сумма текущего root LV и удаляемого home LV.
На экране отдельно показываются текущий размер /, объём, который освободится из /home, и ожидаемый размер /.
Проверка содержимого и использования /home
find /home -xdev -mindepth 1 -print -quit
fuser -m /homeКоманда find ищет первый объект внутри отдельной файловой системы /home, включая скрытые файлы и каталоги. Если найден хотя бы один объект, скрипт останавливается и ничего не удаляет.
Команда fuser проверяет, не используется ли /home запущенными процессами. При обнаружении таких процессов скрипт также прекращает работу. Обе проверки повторяются непосредственно перед началом изменений.
Какие команды выполняет скрипт
1. Создание резервных копий /etc/fstab и LVM
cp -a /etc/fstab /root/fstab.before-home-merge.<дата>
vgcfgbackup -f /root/<VG>.before-home-merge.<дата>.vg <VG>/etc/fstab — системный файл, который определяет подключение дисков и файловых систем при загрузке сервера. Первая команда сохраняет его исходную версию.
Вторая команда сохраняет метаданные LVM — описание структуры логических томов выбранной группы томов. Полные пути обеих резервных копий выводятся после завершения операции.
2. Подготовка и проверка нового /etc/fstab
Скрипт создаёт временную копию /etc/fstab без активной записи /home и проверяет её до удаления тома:
findmnt --verify --tab-file <временный-fstab>Если проверка завершается ошибкой, исходный /etc/fstab не заменяется, а LVM-том не удаляется. После успешного размонтирования /home проверенный файл устанавливается вместо исходного, а команда restorecon /etc/fstab восстанавливает его SELinux-контекст.
3. Размонтирование /home
umount /homeПосле размонтирования скрипт проверяет, что /home действительно больше не является точкой монтирования. Затем он проверяет пустоту каталога /home, который мог существовать под смонтированной файловой системой. Это защищает от скрытых файлов в корневой XFS.
4. Удаление пустого LVM-тома home
lvremove -y /dev/<VG>/<home-LV>Удаляется только тот логический том, который ранее был определён как отдельная файловая система /home и прошёл все проверки. Освободившиеся extents возвращаются в группу томов.
Официальная последовательность удаления LVM-тома также предусматривает предварительную проверку точки монтирования и размонтирование файловой системы. См. Basic logical volume management.
5. Расширение корневого LVM-тома
lvextend -l +100%FREE /dev/<VG>/<root-LV>Параметр +100%FREE передаёт root LV все свободные extents группы томов. В поддерживаемой скриптом типовой схеме свободное место появилось именно после удаления пустого home LV.
6. Расширение XFS
xfs_growfs /После увеличения блочного устройства файловая система XFS расширяется до нового доступного размера. Корневую файловую систему не нужно размонтировать: XFS поддерживает увеличение в смонтированном состоянии.
При этом XFS нельзя уменьшить. Именно поэтому наш сценарий не пытается сделать home LV меньше: пустой том удаляется целиком. См. Increasing the size of an XFS file system.
7. Восстановление каталога /home и SELinux-контекста
mkdir -p /home
restorecon -RF /homeПосле удаления отдельной файловой системы /home остаётся обычным каталогом внутри /. Команда restorecon восстанавливает ожидаемый SELinux-контекст каталога.
8. Проверка новой конфигурации
findmnt --verify
mount -a
! mountpoint -q /homeСкрипт проверяет новый размер root LV, корректность итогового /etc/fstab, успешное монтирование всех файловых систем и отсутствие отдельной точки монтирования /home.
Чтобы не перегружать экран, подробный технический вывод успешно выполненных команд lvremove, lvextend и xfs_growfs скрывается. Если одна из команд завершится ошибкой, скрипт остановится и покажет понятное сообщение.
9. Операция завершена
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
df -hT /После успешного прохождения всех проверок скрипт показывает новый размер корневого LVM-тома, пути резервных копий /etc/fstab и метаданных LVM, а также итоговую структуру диска и доступное место в корневой файловой системе.
Что получится после исправления
На тестовом диске размером 64 ГБ результат выглядел так:
До:
root LV: 37.4 GiB
home LV: 18.2 GiB
После:
root LV: 55.6 GiB
отдельного home LV нет
/home находится внутри /Корневая файловая система не становится равной полным 64 ГБ. Часть диска по-прежнему занята разделом /boot, swap и служебными структурами разметки.
А результат работы скрипта выглядит так:
Нужна ли перезагрузка
К моменту появления итогового экрана корневой LVM-том и XFS уже увеличены, а файл /etc/fstab проверен командами findmnt --verify и mount -a. Однако эти проверки не воспроизводят полный процесс загрузки системы.
Только перезагрузка окончательно подтверждает, что сервер успешно запускается без удалённого LVM-тома /home и новая конфигурация /etc/fstab не мешает загрузке. Поэтому скрипт рекомендует выполнить контрольную перезагрузку сразу после исправления.
В конце скрипт предлагает два варианта:
-
Завершить без перезагрузки — изменения сохранятся, но окончательная проверка загрузки будет отложена;
-
Перезагрузить сервер сейчас — рекомендуемый вариант, выбранный по умолчанию. Перед перезагрузкой скрипт ещё раз проверяет
/etc/fstab.
Как избежать отдельного /home при установке
Если AlmaLinux ещё не установлена, проблему проще предотвратить во время обычной интерактивной установки. В графическом установщике Anaconda выберите ручную разметку диска:
-
удалите отдельную точку монтирования
/home, а освободившееся пространство передайте корневой файловой системе/.
Каталог /home при этом никуда не исчезает. Он будет обычным каталогом внутри корневой файловой системы, а не отдельным LVM-томом.
Частые вопросы
Нет. Место находится в отдельной файловой системе /home. Команда df -h / и Midnight Commander внутри / показывают только корневую файловую систему.
Нет. Если скрипт найдёт в /home хотя бы один файл или каталог, он остановится до изменений. Для непустого /home нужен отдельный план переноса и резервного копирования данных.
Нет. Скрипт разработан и проверен для типовой схемы AlmaLinux с XFS и LVM. При другой файловой системе он откажется работать.
XFS нельзя уменьшать. Поэтому скрипт не уменьшает home LV, а удаляет его только при условии, что файловая система полностью пуста.
Для непосредственного расширения root LV и XFS перезагрузка технически не требуется: эти изменения применяются во время работы системы. Но только перезагрузка окончательно проверяет, что сервер загружается с новой конфигурацией /etc/fstab. Поэтому контрольная перезагрузка рекомендуется и выбрана в скрипте по умолчанию.
После успешной операции отдельная файловая система /home отсутствует. Повторный запуск обнаружит это и остановится без изменений.
Одна из защитных проверок обнаружила отличие от ожидаемой автоматической разметки: другую файловую систему, другую VG, snapshots, свободные extents, неправильный fstab или другую особенность. Такую систему нужно анализировать вручную.
Нет. Увеличивается корневая файловая система /. /root — только домашний каталог пользователя root внутри неё.
- Руководство по установке RISH
- Резервное копирование (бэкапы)
- Установка/управление CMS/PMA
- Клонирование сайтов
- Авторизация на сервере по ключам SSH
- Что представляет собой RISH?
- Midnight Commander (MC) – курс выживания для владельцев веб-серверов
- Системные требования
- Статистика сайтов сервера
- У вас проблемы со входом на сервер?
- AlmaLinux видит не весь диск: почему и как исправить
- Почему мы не строим RISH на Ubuntu







