Физический объем, потерянный после перезагрузки

Вопрос или проблема

Контекст

Я использую систему 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 необходимо правильно обновить таблицу разделов на физическом устройстве.

Рекомендации по предотвращению проблемы

Для того чтобы изменения размера раздела сохранялись и были корректно видимы после перезагрузки системы, необходимо следовать следующим шагам:

  1. Используйте fdisk для изменения раздела:
    Вместо того чтобы использовать resizepart, используйте инструменты для управления разделами, такие как fdisk, которые непосредственно обновляют физическую структуру на диске.

    sudo fdisk /dev/sda
    1. Удалите существующий раздел sda3.
    2. Создайте новый раздел sda3 с таким же начальным сектором, но с увеличенным конечным сектором.
  2. Примените pvresize:
    После изменения размера раздела с помощью fdisk, выполните команду pvresize для его переинициализации:

    sudo pvresize /dev/sda3
  3. Используйте утилиту growpart:
    В качестве альтернативы можно рассмотреть использование утилиты growpart, которая может автоматически изменять размер раздела как на диске, так и в ядре одновременно:

    sudo growpart /dev/sda 3
  4. Проверьте и измените размер логического тома:
    После того как вы измените размер физического тома, не забудьте обновить логические тома:

    sudo lvextend -l +100%FREE /dev/mapper/VGslash-lv_pmp
    sudo xfs_growfs /dev/mapper/VGslash-lv_pmp
  5. Регулярные проверки:
    Регулярно проверяйте, что после перезагрузки размеры физических и логических томов соответствуют ожидаемым. Это можно сделать через lsblk или lvdisplay.

Заключение

Благодаря изменениям, описанным выше, вы сможете избежать проблемы потери размера физического тома после перезагрузки системы. Важно помнить, что изменения, внесенные с помощью утилит, которые обновляют только представление ядра, могут не сохраняться после перезагрузки. Рекомендуется использовать инструменты управления разделами, которые вносят изменения непосредственно на диск, чтобы обеспечить сохранность и стабильность конфигурации вашей системы.

Оцените материал
Добавить комментарий

Капча загружается...