CityCat4
@CityCat4
//COPY01 EXEC PGM=IEBGENER

Lvm versus fsck — как решить проблему курицы и яйца?

Периодически возникает следующая проблема:
все диски на lvm, кроме boot
initrd с поддержкой lvm, монтирует / и /usr при загрузке initrd, в итоге к моменту switch root / и /usr примонтированы и отмонтировать их нельзя
при жестком ребуте fsck на /usr не проходит, так как он примонтирован, половина сервисов может не стартовать, приходится грузить livedvd и чекать диск вручную. Это напрягает.
(При загрузке через livedvd все проходит нормально, это советовать не надо)

Хотелось бы послушать мнения - как сохранить возможность безболезненного расширения/сужения/перемещения разделов, но получить возможность нормальной работы fsck при загрузке, если таковое надо. Советовать можно что угодно, даже бред :) (кроме загрузки с dvd) Иногда даже из бредового совета можно построить идею, которая приведет к решению.

UPD: Cм. мой собственный ответ, в котором излагается то, что я посчитал решением (хотя возможно оно им и не является)
  • Вопрос задан
  • 4203 просмотра
Пригласить эксперта
Ответы на вопрос 4
hint000
@hint000
у админа три руки
Ответ хоть и никак не относится к lvm, но...
юзер жмет ресет во время работы по дурной виндовой привычке
/ или /usr не восстанавливаются, полэкрана красным, сервисы не стартовали
Митигирую такой сценарий выносом из / отдельных ФС /var и /tmp (про /home можно не говорить, это у всех норма его выносить, ну и тем более никакого swap-файла на / ). В сам / при повседневной работе практически ничего не пишется, только при редких ручных изменениях /etc и при обновлении или установке пакетов. Так что в момент, когда Штирлиц бьёт Холтоффа бутылкой по башке, повредиться может в основном /var или /home, но никак не / (ведь Штирлиц обычно не устанавливает обновления при беседе с Холтоффом).
Практикую этот лайфхак уже лет семь, полёт нормальный.
spoiler
65b2852c9562e042532647.png
Ответ написан
CityCat4
@CityCat4 Автор вопроса
//COPY01 EXEC PGM=IEBGENER
Пока нашел только возможность обойтись без livedvd :)

Добавить в dracut.conf:
add_drauctmodules+=" rescue"

после чего в нем появится fsck.

После этого при необходимости проверки добавлять в командную строку ядра rd.break=mount (это стопит работу initrd ДО switchroot). Для отображения томов lvm использовать команду "lvm lvscan", ну а fsck как обычно.

UPD: То, что я посчитал решением.

- Оборвать руки особо умным сборщикам дистриба Calculate Linux :) Вот ей-Богу - это было первое желание! Оборвать им руки и вставить туда ... ноги, все равно разница будет небольшая. Какой прости-Господи, дебил придумал прописывать rc.skipfsck=1 в конфиге initrd и почему об этом можно узнать только путем розыска с собаками? Почему нигде не написано о таком серьезном изменении?

- Наложить вот такой простяцкий патч на файл, находящийся в совершенно буквальном смысле в #опе мира - на пути /var/db/repos/calculate/profiles/templates/2_ac_install_merge/sys-kernel/dracut/80calculate:
--- module-setup.sh.old 2024-01-29 18:08:49.015843080 +0700
+++ module-setup.sh     2024-01-29 18:09:02.207842940 +0700
@@ -36,5 +36,5 @@
         inst_script "$moddir/nfsroot.sh" "/sbin/nfsroot"
         inst_hook initqueue/timeout 95 "$moddir/live-fallback.sh"
     fi
-    echo rd.skipfsck=1 >> "${initdir}/etc/cmdline.d/95-skipfsck.conf"
+    #echo rd.skipfsck=1 >> "${initdir}/etc/cmdline.d/95-skipfsck.conf"
 }

Этот шаг нужен только тем, у кого Calculate Linux. У кого гента или вообще негентовская линейка и нет модуля dracut под названием 80calculate - тем можно его пропустить. Патч этот, как видите отключает отключение :) то есть восстанавливает возможность проверки файловых систем / и /usr при их начальном монтировании.

- Наложить еще один простяцкий патч на файл /usr/lib/dracut/dracut.conf.d/50-calculate.conf
--- /usr/lib/dracut/dracut.conf.d/50-calculate.conf.old 2024-01-29 18:13:24.669840150 +0700
+++ /usr/lib/dracut/dracut.conf.d/50-calculate.conf     2024-01-29 18:14:00.049839774 +0700
@@ -2,6 +2,7 @@
 omit_dracutmodules+=" multipath "
 add_dracutmodules+=" video calculate "
 add_dracutmodules+=" plymouth "
+add_dracutmodules+=" rescue img-lib "
 omit_dracutmodules+=" gensplash "
 omit_dracutmodules+=" biosdevname "

Опять же этот шаг только для тех, у кого Calculate Linux. У кого гента или дистриб из другой линейки - добавить в то место, где лежат конфиги для dracut (если они не лежат нигде - почитать ман и создать). Этот патч включит в initrd программы для ремонта ФС - мне совершенно непонятно за каким хреном их туда не включают по умолчанию.

- Отключить в /etc/fstab для /usr вызов проверки ФС (если уже не отключен), установив значение последнего поля в 0 (там может стоять 2 или другое число до 9).

- Для юзерской машины желательно отделение /home от /usr и включение флага проверки ФС - отключение проверки /usr нужно для того, чтобы fsck попусту не алертил что проверка не может быть сделана из-за смонтированной ФС (проверка /usr пройдет при первом монтировании)
Ответ написан
Комментировать
@xoid555
Для принудительного запуска fsck при следующей загрузке Linux, вы можете создать пустой файл с именем forcefsck в корневом каталоге файловой системы и затем перезагрузить систему. Когда система загружается, она обнаруживает этот файл и запускает fsck перед монтированием корневого файлового каталога. Можно поместить файл в /usr раздел

вы можете создавать файл при загрузке и удалять при выключении, тогда при ресете он останется взведенным и форсирует проверку диска до окончательной загрузки
Ответ написан
Комментировать
@rPman
в linux есть btrfs и zfs файловые системы, с функционалом управления разделами и дисками. Первый хоть и рекомендован к работе но имеет незначительные проблемы (я не встречал но они заявлены), второй имеет высокие требования к ram и дает много накладных расходов на диски, и не рекомендуется для hdd (точнее можно, если там есть дисковый кеш большой, встроенный или в контроллере).

lvm однозначно на помойку, его снапшоты это тормозной ад, когда как btrfs/zfs они бесплатны.

К сожалению переход lvm+ext4 -> btrfs можно сделать только через backup format restore. В похожих ситуциях я несколько раз делал последовательное уменьшение разделов, в пределах свободного места на диске, переносил данные снова уменьшал... Долгий и опасный процесс (вероятность потери данных при сбое во время упаковки и сдвига раздела - высокая) но когда вообще нет возможности сделать оперативно бакап и восстановления - подойдет. Но лучше выбирай бакапы, они так и так нужны.

Недостатки btrfs/zfs там же где и их достоинство. Это Copy-On-Write файловые системы, каждая следующая запись происходит в новое место, базы данных в таких случаях сильно фрагментируются (на самом деле не на столько все плохо но на hdd это заметно), и само собой есть возможность это отключить для выбранных каталогов (снапшоты само собой нормально перестанут работать с этими файлами).

upd. Отключи резет физически и научи комбинации ctrl+shift+alt+prnscr.. +u, ...+b,... +s. prnscr отжимать и нажимать следующую букву, не отпуская ctrl+shift+alt, затем отпускать все кнопки и повторять но последний символ другой.
u - перемонтирует все маунты принудительно в readonly
s - запускает sync (формально он не нужен, так как после readonly он уже работает, но я могу придумать комбинации конфига ext4 и опций монтирования когда это не так, с другой стороны времени на этот синк дать нужно, поэтому пока пользователь жмет кнопку - процесс идет)
b - перезагрузка, даже если все висит (я не помню когда это не сработало, даже если ядро в панике, хотя ситуации придумать можно)

Подробнее - не отпуская ctrl+shift+alt, нажимаешь и затем отжимаешь prnscr и нажимаешь символ b/u/s/... и только после этого отпускаешь ctrl+shift+alt (иначе он не поймает следующий prnscr)

вот первая попавшаяся инструкция (shift нажимать не надо только если у тебя в режиме терминала, нажимай всегда не попутаешь, та же фигня чтобы переключиться между текстовыми терминалами ctrl+alt+F1...7 один из них графический, но в режиме графического нужно добавлять shift)

во всех linux что я смотрел, по умолчанию это работает (но есть шанс что облачные ядра для гостевых виртуалок максимально кастрированы и это там отключено, что логично)

если открыт консольный терминал, то нажатие этих кнопок будет выдавать текстовые сообщения о процессе (там ее есть комбинации, советую погуглить, но они нужны тем кто ядро отлаживает)

В результате, если проблема не в драйвере файловой системы или дисковой подсистему, то перезагрузка получится не ломающей файловую систему (базы данных все еще могут быть сломаны, но тут уже ничего не поможет, с другой стороны это происходит очень редко)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы