[Sysadmins] e2fsck не может провести проверка при загрузке корневой ФС на LVM RAID1

Васюк Максим vasukma на yandex.ru
Пт Дек 7 14:34:08 MSK 2018


Привет, Всем!

Новые вводные.

05.12.2018 14:42, Sergey пишет:
> On Wednesday 05 December 2018, Васюк Максим wrote:
> 
>> Возможно из-за того, что e2fsck видит на LVM зеркалах систему,
> 
> e2fsck ничего не видит. Он просто чекает то, что ему кто-то говорит
> чекать. Вот почему ему скармливают /dev/mapper/vg00-root_sys_rimage_0,
> это не знаю.
> 
>> И нет бы сказал, что-то типа того: "Не могу работать, устройство
>> занято!" и пошел дальше грузиться, но останавливает загрузку.

Под пристальным внимаем обнаружилось, следующее:
GRUB загрузил initrd, процессы запускаются и доходит дело до следующего 
момента:
Starting system-udevd service: DONE
Populating /dev: DONE
Activaiting swap partition: DONE
Setting hostname: DONE
Checking root filesystem: DONE
/dev/mapper/vg00-root_sys_rimage_0 in in use.
e2sfck: Cannont continue, aborting.
				FAILED

Жму Ctrl-D, идёт перезагрузка и может остановится или с такой же 
строчкой, или немного с другой:
/dev/mapper/vg00-root_sys_rimage_0 in in use.

Опять жму Ctrl-D, перезагрузка и так несколько раз, пока не попадёт на:
/dev/mapper/vg00-root_sys
и тогда загрузка проходит нормально:
Remounting root filesystem in read/write mode: DONE
и дальше по списку.

Получается, при неудачных загрузках, initrd перед монтированием выбирает 
не LVM раздел собранный из разделов LVM зеркал, а как раз одно из LVM 
зеркал, т.к. эти устройства уже используются, e2fsck не может 
примонтировать файловую систему для проверки, а т.к. думает, что там 
корень, останавливает загрузку.

Полез в  fstab:
# cat /etc/fstab
UUID=57dc8810-3432-4477-b4ee-294642884ec7  /  ext4    relatime 1 1

Глянул на UUID разделов и оказалось, что они у всех трёх разделов 
одинаковые:
# blkid
/dev/mapper/vg00-root_sys_rimage_0: 
UUID="57dc8810-3432-4477-b4ee-294642884ec7" TYPE="ext4"
/dev/mapper/vg00-root_sys_rimage_1: 
UUID="57dc8810-3432-4477-b4ee-294642884ec7" TYPE="ext4"
/dev/mapper/vg00-root_sys: UUID="57dc8810-3432-4477-b4ee-294642884ec7" 
TYPE="ext4"

Получается GRUB или initrd тупо подхватывают первое под руку попавшееся 
устройство с указанными uuid, и начинает с ним пытаться работать, а 
результат зависит от того, какое таки устройство он подхватил.

Кусок из grub.cfg:
...
menuentry 'ALT starter kit' --class gnu-linux --class gnu --class os 
--unrestricted $menuentry_id_option 
'gnulinux-simple-57dc8810-3432-4477-b4ee-294642884ec7' {
...
   search --no-floppy --fs-uuid --set=root 
57dc8810-3432-4477-b4ee-294642884ec7
...
linux<->/boot/vmlinuz root=/dev/mapper/vg00-root_sys ro panic=30 splash
echo    'Loading initial ramdisk ...'
initrd  /initrd.img
...

Посмотрел на другой машине, там где организован MD RAID1. Оказалось, что 
у зеркал одинаковые uuid, а вот у собранного раздела из этих зеркал другой:

# df
...
/dev/md1                         28G         2,7G   24G           11% /
...

# cat /proc/mdstat
...
md1 : active raid1 sda3[0] sdb3[1]
...

# blkid
...
/dev/sda3: UUID="c2029de0-13c6-1261-5cc0-45fc1eca55fc" 
TYPE="linux_raid_member"
...
/dev/sdb3: UUID="c2029de0-13c6-1261-5cc0-45fc1eca55fc" 
TYPE="linux_raid_member"
...
/dev/md1: UUID="a210197a-0b6f-4626-8d72-a2cfd5f73d38" TYPE="ext4"
...

# cat /etc/fstab
...
UUID=a210197a-0b6f-4626-8d72-a2cfd5f73d38 / ext4 relatime 1 1
...

Кусок из grub.cfg:
menuentry 'ALT Linux starter kit' --class gnu-linux --class gnu --class
os $menuentry_id_option 
'gnulinux-simple-a210197a-0b6f-4626-8d72-a2cfd5f73d38' {
...
         set root='mduuid/a427249a0b7032ac5cc045fc1eca55fc'
         if [ x$feature_platform_search_hint = xy ]; then
           search --no-floppy --fs-uuid --set=root 
--hint='mduuid/a427249a0b7032ac5cc045fc1eca55fc' 
7d127096-dbff-4453-b8fc-70a350ee6afe
...
         linux   /vmlinuz root=UUID=a210197a-0b6f-4626-8d72-a2cfd5f73d38 
ro panic=30 splash
         echo    'Loading initial ramdisk ...'
         initrd  /initrd.img
...

Получается что md с этой проблемой знаком, а lvm нет.

На проблемной машине делаю:
#UUID=57dc8810-3432-4477-b4ee-294642884ec7 / ext4 relatime 1 1
/dev/mapper/vg00-root_sys                  / ext4 relatime 1 1

И всё начинает загружаться как надо.

Grub грузит initrd с одного из зеркал, а корень монтирует initrd глядя, 
в свою очередь, уже в /etc/fstab.

Т.к. в такой конфигурации имя устройства, на котором лежит корень, не 
меняется при замене, добавлении и пр. жестких дисков, в теории можно 
оставить так.

>>>> Один вариант вижу, не использовать ext4. Смотрел в сторону btrfs
>>>
>>> Насколько понимаю, если данные не нужны, вполне себе вариант...
> 
>> С данными всё в порядке,
> 
> Михаил, как мне показалось, имеет ввиду предполагаемую недостаточную
> обкатку btrfs и вероятные будущие проблемы. Но, вроде как, в SuSe
> используют и планов по отказу не озвучивали.
Я сначала тоже так решил, но потом подумал, что он же серьёзный человек, 
и не будет приколяться над страждущими ;)
-- 
Васюк Максим


Подробная информация о списке рассылки Sysadmins