Вопрос или проблема
Контекст
Я использую систему Red Hat Enterprise Linux версии 8.5 в виртуальной машине на VMWare ESXI.
Мне нужно было больше места на конкретном логическом томе, который называется lv_pmp
в этой виртуальной машине:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 78,4G 0 part
├─VGslash-lv_root 253:0 0 19,5G 0 lvm /
├─VGslash-lv_swap 253:1 0 4G 0 lvm [SWAP]
├─VGslash-lv_usr 253:2 0 8G 0 lvm /usr
├─VGslash-lv_srv 253:3 0 2G 0 lvm /srv
├─VGslash-lv_home 253:4 0 2G 0 lvm /home
├─VGslash-lv_opt 253:5 0 4G 0 lvm /opt
├─VGslash-lv_tmp 253:6 0 4G 0 lvm /tmp
├─VGslash-lv_var_log_audit 253:7 0 512M 0 lvm /var/log/audit
├─VGslash-lv_var_log 253:8 0 1G 0 lvm /var/log
├─VGslash-lv_vartmp 253:9 0 10,4G 0 lvm /var/tmp
├─VGslash-lv_var 253:10 0 3G 0 lvm /var
└─VGslash-lv_pmp 253:11 0 20G 0 lvm /pmp
sr0 11:0 1 1024M 0 rom
Поэтому я увеличил размер диска виртуальной машины до 500G в свойствах VSphere, что отразилось на разделе sda
:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 78,4G 0 part
├─VGslash-lv_root 253:0 0 19,5G 0 lvm /
├─VGslash-lv_swap 253:1 0 4G 0 lvm [SWAP]
├─VGslash-lv_usr 253:2 0 8G 0 lvm /usr
├─VGslash-lv_srv 253:3 0 2G 0 lvm /srv
├─VGslash-lv_home 253:4 0 2G 0 lvm /home
├─VGslash-lv_opt 253:5 0 4G 0 lvm /opt
├─VGslash-lv_tmp 253:6 0 4G 0 lvm /tmp
├─VGslash-lv_var_log_audit 253:7 0 512M 0 lvm /var/log/audit
├─VGslash-lv_var_log 253:8 0 1G 0 lvm /var/log
├─VGslash-lv_vartmp 253:9 0 10,4G 0 lvm /var/tmp
├─VGslash-lv_var 253:10 0 3G 0 lvm /var
└─VGslash-lv_pmp 253:11 0 20G 0 lvm /pmp
sr0 11:0 1 1024M 0 rom
Затем я изменил размер физического тома sda3
, чтобы он соответствовал новому выделенному пространству на диске:
$ resizepart /dev/sda 3 1000000000
$ pvresize /dev/sda3
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 476,9G 0 part
├─VGslash-lv_root 253:0 0 19,5G 0 lvm /
├─VGslash-lv_swap 253:1 0 4G 0 lvm [SWAP]
├─VGslash-lv_usr 253:2 0 8G 0 lvm /usr
├─VGslash-lv_srv 253:3 0 2G 0 lvm /srv
├─VGslash-lv_home 253:4 0 2G 0 lvm /home
├─VGslash-lv_opt 253:5 0 4G 0 lvm /opt
├─VGslash-lv_tmp 253:6 0 4G 0 lvm /tmp
├─VGslash-lv_var_log_audit 253:7 0 512M 0 lvm /var/log/audit
├─VGslash-lv_var_log 253:8 0 1G 0 lvm /var/log
├─VGslash-lv_vartmp 253:9 0 10,4G 0 lvm /var/tmp
├─VGslash-lv_var 253:10 0 3G 0 lvm /var
└─VGslash-lv_pmp 253:11 0 20G 0 lvm /pmp
sr0 11:0 1 1024M 0 rom
Я увеличил размер логического тома lv_pmp
:
$ lvextend /dev/mapper/VGslash-lv_pmp -l+100%FREE
И обновил файловую систему, чтобы она распознала новый размер:
$ xfs_growfs /dev/mapper/VGslash-lv_pmp
На данный момент у меня размер, который я ожидал, на логическом томе lv_pmp
:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 476,9G 0 part
├─VGslash-lv_root 253:0 0 19,5G 0 lvm /
├─VGslash-lv_swap 253:1 0 4G 0 lvm [SWAP]
├─VGslash-lv_usr 253:2 0 8G 0 lvm /usr
├─VGslash-lv_srv 253:3 0 2G 0 lvm /srv
├─VGslash-lv_home 253:4 0 2G 0 lvm /home
├─VGslash-lv_opt 253:5 0 4G 0 lvm /opt
├─VGslash-lv_tmp 253:6 0 4G 0 lvm /tmp
├─VGslash-lv_var_log_audit 253:7 0 512M 0 lvm /var/log/audit
├─VGslash-lv_var_log 253:8 0 1G 0 lvm /var/log
├─VGslash-lv_vartmp 253:9 0 10,4G 0 lvm /var/tmp
├─VGslash-lv_var 253:10 0 3G 0 lvm /var
└─VGslash-lv_pmp 253:11 0 418,4G 0 lvm /pmp
sr0 11:0 1 1024M 0 rom
Проблема
Проблема возникает, как только я перезагружаю систему: кажется, что изменения размера, которые я внес в физический том sda3
, теряются, что, в свою очередь, мешает монтированию логического тома lv_pmp
(так как предполагается, что на родительском PV недостаточно места):
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 76,9G 0 part
├─VGslash-lv_root 253:0 0 19,5G 0 lvm /
├─VGslash-lv_swap 253:1 0 4G 0 lvm [SWAP]
├─VGslash-lv_usr 253:2 0 8G 0 lvm /usr
├─VGslash-lv_srv 253:3 0 2G 0 lvm /srv
├─VGslash-lv_home 253:4 0 2G 0 lvm /home
├─VGslash-lv_opt 253:5 0 4G 0 lvm /opt
├─VGslash-lv_tmp 253:6 0 4G 0 lvm /tmp
├─VGslash-lv_var_log_audit 253:7 0 512M 0 lvm /var/log/audit
├─VGslash-lv_var_log 253:8 0 1G 0 lvm /var/log
├─VGslash-lv_vartmp 253:9 0 10,4G 0 lvm /var/tmp
└─VGslash-lv_var 253:10 0 3G 0 lvm /var
sr0 11:0 1 1024M 0 rom
Решение
Возможно, восстановить работоспособность, выполнив следующие команды вручную после перезагрузки:
### Пере-применить изменения физического тома
$ resizepart /dev/sda 3 1000000000
$ pvresize /dev/sda3
### Пере-сканирование логических томов
$ vgscan --mknodes -v
$ vgchange -a y
Вопрос
Почему это происходит? Что я могу сделать, чтобы этого избежать?
Я не знаю, связано ли это с самой ОС, окружением виртуальной машины или другими факторами, которые я не контролирую, любые советы по этому поводу также помогли бы.
Предложенное решение не полностью удовлетворительно, даже если я мог бы поместить это в скрипт при загрузке, необходимость выполнения этого действия при каждом запуске не кажется правильной: мне не ясно, почему изменение размера тома не сохраняется после перезагрузки.
resizepart
не обновляет структуры на диске. Оно только вносит изменения в живые структуры ядра. Обратитесь к man resizepart
:
resizepart
сообщает ядру Linux о новом размере указанного раздела. Эта команда является простой оберткой вокруг ioctl “изменение размера раздела”.Эта команда не обрабатывает разделы на блочном устройстве.
Необходимо использовать fdisk
(или любой другой редактор разделов), чтобы изменить раздел на диске, а затем обновить представление ядра с помощью resizepart
(или kpartx
, или partprobe
, или перезагрузки).
Существует инструмент под названием growpart
, который делает это и делает это онлайн.
Ответ или решение
Уменьшение размера физического тома после перезагрузки в Red Hat Enterprise Linux 8.5
Ваша проблема заключается в том, что после изменения размера физического тома (PV) на виртуальной машине (VM), структура диска не сохраняет изменения после перезагрузки системы. Это может привести к тому, что логический том (LV) становится недоступным, так как операционная система не видит ожидаемого пространства на родительском PV. Рассмотрим причины этой проблемы и способы её устранения.
Причины проблемы
Суть проблемы связана с использованием команды resizepart
. Данная команда служит для информирования ядра Linux о новом размере указанного раздела, однако она не обновляет физическую структуру на диске. Следовательно, после перезагрузки системы система загружает информацию о разделах из метаданных на диске, а изменения, произведенные с помощью resizepart
, просто не сохраняются.
Кроме того, важно понимать, что после изменения размера диска в VMware необходимо правильно обновить таблицу разделов на физическом устройстве.
Рекомендации по предотвращению проблемы
Для того чтобы изменения размера раздела сохранялись и были корректно видимы после перезагрузки системы, необходимо следовать следующим шагам:
-
Используйте
fdisk
для изменения раздела:
Вместо того чтобы использоватьresizepart
, используйте инструменты для управления разделами, такие какfdisk
, которые непосредственно обновляют физическую структуру на диске.sudo fdisk /dev/sda
- Удалите существующий раздел
sda3
. - Создайте новый раздел
sda3
с таким же начальным сектором, но с увеличенным конечным сектором.
- Удалите существующий раздел
-
Примените
pvresize
:
После изменения размера раздела с помощьюfdisk
, выполните командуpvresize
для его переинициализации:sudo pvresize /dev/sda3
-
Используйте утилиту
growpart
:
В качестве альтернативы можно рассмотреть использование утилитыgrowpart
, которая может автоматически изменять размер раздела как на диске, так и в ядре одновременно:sudo growpart /dev/sda 3
-
Проверьте и измените размер логического тома:
После того как вы измените размер физического тома, не забудьте обновить логические тома:sudo lvextend -l +100%FREE /dev/mapper/VGslash-lv_pmp sudo xfs_growfs /dev/mapper/VGslash-lv_pmp
-
Регулярные проверки:
Регулярно проверяйте, что после перезагрузки размеры физических и логических томов соответствуют ожидаемым. Это можно сделать черезlsblk
илиlvdisplay
.
Заключение
Благодаря изменениям, описанным выше, вы сможете избежать проблемы потери размера физического тома после перезагрузки системы. Важно помнить, что изменения, внесенные с помощью утилит, которые обновляют только представление ядра, могут не сохраняться после перезагрузки. Рекомендуется использовать инструменты управления разделами, которые вносят изменения непосредственно на диск, чтобы обеспечить сохранность и стабильность конфигурации вашей системы.