Вход в maintenance mode без перезагрузки
От: zx zpectrum  
Дата: 15.08.23 18:25
Оценка:
В стародавние init-ные времена войти в режим техобслуживания без перезагрузки было весьма просто: "init 1". Равно как и выйти из него в нормальный многопользовательский режим с сервисами и ГУЯми: "init 5".

Как сделать нечто похожее в эпоху systemd? Все интернетные советчики говорят о прописывании "init=/usr/bin/bash" в конец параметров ядра из GRUB, но этот метод, очевидно, требует двух перезагрузок туда-обратно.

Хотя на самом-то деле мне single user mode не очень-то и нужен. Хочется иметь возможность входить в режим, в котором остановлены все процессы, пишущие на диск, для того, чтобы снять полный слепок системного диска на внешник (dd if= of=) без риска, что он получится неконсистентным, если в процессе снятия образа кто-нибудь подкакнёт записью.
Re: Вход в maintenance mode без перезагрузки
От: Zhendos  
Дата: 15.08.23 18:45
Оценка:
Здравствуйте, zx zpectrum, Вы писали:

ZZ>Хотя на самом-то деле мне single user mode не очень-то и нужен. Хочется иметь возможность входить в режим, в котором остановлены все процессы, пишущие на диск, для того, чтобы снять полный слепок системного диска на внешник (dd if= of=) без риска, что он получится неконсистентным, если в процессе снятия образа кто-нибудь подкакнёт записью.


Почему тогда просто не:

mount path/to/mount/point -o remount,ro


и никто точно на этот диск писать не будет?
Re: Вход в maintenance mode без перезагрузки
От: kov_serg Россия  
Дата: 15.08.23 19:42
Оценка:
Здравствуйте, zx zpectrum, Вы писали:

ZZ>Хотя на самом-то деле мне single user mode не очень-то и нужен. Хочется иметь возможность входить в режим, в котором остановлены все процессы, пишущие на диск, для того, чтобы снять полный слепок системного диска на внешник (dd if= of=) без риска, что он получится неконсистентным, если в процессе снятия образа кто-нибудь подкакнёт записью.

Для этого есть lvm и snapshot-ы

ps: Для рукопашного боя есть комбы https://www.thegeekstuff.com/2008/12/safe-reboot-of-linux-using-magic-sysrq-key/
Re[2]: Вход в maintenance mode без перезагрузки
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.08.23 21:18
Оценка: 6 (1)
Здравствуйте, Zhendos, Вы писали:

Z>Почему тогда просто не:


Z>
Z>mount path/to/mount/point -o remount,ro
Z>


А ты пробовал?

Шансы, что кто-то держит этот диск открытым на запись, весьма велики.

Кстати, достаточно удалить октрытый (хоть даже и на чтение) файл, и файловую систему становится невозможно перемонтировать в ro. Например, так происходит при обновлении пакетов с системными (или, хотя бы, популярными) разделяемыми библиотеками: обновление удаляет дисковые файлы, но они остаются открытыми теми процессами, которые их используют.

Дело в том, что UNIX позволяет удалить открытый файл. При этом удаляется только имя, а фактическое удаление откладывается до момента окончания использования этого файла. И пока это не произошло, файловая система не может быть перемонтирована в ro
Re: Вход в maintenance mode без перезагрузки
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.08.23 21:20
Оценка:
Здравствуйте, zx zpectrum, Вы писали:

ZZ>В стародавние init-ные времена войти в режим техобслуживания без перезагрузки было весьма просто: "init 1". Равно как и выйти из него в нормальный многопользовательский режим с сервисами и ГУЯми: "init 5".


https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet
Re[3]: Вход в maintenance mode без перезагрузки
От: Zhendos  
Дата: 15.08.23 21:23
Оценка:
Здравствуйте, Pzz, Вы писали:

Z>>
Z>>mount path/to/mount/point -o remount,ro
Z>>


Pzz>А ты пробовал?


Да.

Pzz>Шансы, что кто-то держит этот диск открытым на запись, весьма велики.


Ну судя по контексту это домашняя машина, поэтому завершить все процессы пользователя
и ненужные системные демоны не проблема. "lsof" и прочие покажут кто еще держит открытые файлы.
Re[4]: Вход в maintenance mode без перезагрузки
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.08.23 21:27
Оценка:
Здравствуйте, Zhendos, Вы писали:

Z>Ну судя по контексту это домашняя машина, поэтому завершить все процессы пользователя

Z>и ненужные системные демоны не проблема. "lsof" и прочие покажут кто еще держит открытые файлы.

Не знаю. У меня на домашней машине это никогда надежно не работало. На нонешних домашних машинах всяких загадочных процессов больше, чем на серверах. Дектоп он нынче такой, заковыристый.
Re: Вход в maintenance mode без перезагрузки
От: Sheridan Россия  
Дата: 16.08.23 10:28
Оценка:
Здравствуйте, zx zpectrum, Вы писали:

ZZ>В стародавние init-ные времена войти в режим техобслуживания без перезагрузки было весьма просто: "init 1". Равно как и выйти из него в нормальный многопользовательский режим с сервисами и ГУЯми: "init 5".

Я какое то время думал, но так и не понял — зачем?
Когда всё работает? явно не нужно
Когда не работает какой-то сервис? несложно остановить/запустить именно его пусть даже с зависимостями
Когда не работает всё? явно нужно садиться и разбираться если машина ещё не повесилась и тут дёргать за рычаги вообще опасно ибо оно в шатком состоянии
Когда не бутится? Ну так в грубе несложно f10 нажать и на баш инит сменить на один раз...
Matrix has you...
Re[2]: Вход в maintenance mode без перезагрузки
От: aik Австралия  
Дата: 16.08.23 11:06
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Я какое то время думал, но так и не понял — зачем?

S>Когда всё работает? явно не нужно

Наоборот именно тогда и нужно, чтоб сделать бэкап работающей системы без её остановки. Вполне кейс для сетевого девайса типа роутера, мне тоже такого не хватает.
Re[3]: Вход в maintenance mode без перезагрузки
От: m2user  
Дата: 16.08.23 12:33
Оценка:
aik>Наоборот именно тогда и нужно, чтоб сделать бэкап работающей системы без её остановки. Вполне кейс для сетевого девайса типа роутера, мне тоже такого не хватает.

Почему именно блочный бэкап через dd, а не файловый через tar?
И не нужно будет думать о целостности ФС.
Re[3]: Вход в maintenance mode без перезагрузки
От: Sheridan Россия  
Дата: 16.08.23 12:55
Оценка:
Здравствуйте, aik, Вы писали:

S>>Я какое то время думал, но так и не понял — зачем?

S>>Когда всё работает? явно не нужно

aik>Наоборот именно тогда и нужно, чтоб сделать бэкап работающей системы без её остановки. Вполне кейс для сетевого девайса типа роутера, мне тоже такого не хватает.

На роутере systemd?
Даже если так, то sync + dd на воткнутую флешку или сразу сквозь ssh на другую машину дадут приемлемый результат, так как ничего там на диск не пишется кроме логов
А если не роутер, то "btrfs subvolume snapshot ...". Нету btrfs? Делайте так чтобы был, он рулит. Ну или zfs.
Matrix has you...
Re[4]: Вход в maintenance mode без перезагрузки
От: aik Австралия  
Дата: 16.08.23 12:57
Оценка:
Здравствуйте, m2user, Вы писали:

M>Почему именно блочный бэкап через dd, а не файловый через tar?

M>И не нужно будет думать о целостности ФС.

Мне — для простоты. Такой бэкап можно просто "dd" на новую SD карточку. А так надо писать скрипты куда что распаковать, разбираться в разделах, форматировать это всё, геморои.
Re: Вход в maintenance mode без перезагрузки
От: vsb Казахстан  
Дата: 16.08.23 13:05
Оценка: 26 (3)
Тебе нужен fsfreeze для того, что ты хочешь.
Re: maintenance mode
От: Sharov Россия  
Дата: 16.08.23 22:31
Оценка:
Здравствуйте, zx zpectrum, Вы писали:

А что это такое maintenance mode и зачем он нужен? Их в линупсе вроде штук 7, каково их назначение?
Я прочитал этот ответ, но не понял каковы реальные
сценарии использования. Это типа защищенный режим в венде, когда там доступно минимум ОС функциональности?
Первый раз про такое слышу, поэтому такой дурацкий вопрос.
Кодом людям нужно помогать!
Re[4]: Вход в maintenance mode без перезагрузки
От: m2user  
Дата: 17.08.23 02:17
Оценка:
S>На роутере systemd?
S>Даже если так, то sync + dd на воткнутую флешку или сразу сквозь ssh на другую машину дадут приемлемый результат, так как ничего там на диск не пишется кроме логов

Что есть приемлемый результат?
Копия через dd не мгновенная. Что мешает драйверу ФС в это время перетасовать блоки, и на выходе ты получишь бэкап с поврежденной ФС.

Кстати lvm snapshots, который предлагали ранее, сам вызывает fsfreeze и в этом плане безопасен (но только если ФС поддерживает fsfreeze).
Впрочем, учитывая мгновенность снимка, он и без fsfreeze должен быть безопасен.
Отредактировано 17.08.2023 2:27 m2user . Предыдущая версия .
Re[2]: Вход в maintenance mode без перезагрузки
От: m2user  
Дата: 17.08.23 02:28
Оценка: 12 (1)
Монтирование ФС в readonly не гарантирует отсутствия записи на блочное устройство.

Из man mount:

Note that, depending on the filesystem type, state and kernel behavior, the system may still write to the device. For example, ext3 and ext4 will replay the journal if the filesystem is dirty.
To prevent this kind of write access,you may want to mount an ext3 or ext4 filesystem with the ro,noload mount options or set the block device itself to read-only mode, see the blockdev(8) command.

Re[5]: Вход в maintenance mode без перезагрузки
От: Sheridan Россия  
Дата: 17.08.23 04:41
Оценка:
Здравствуйте, m2user, Вы писали:

S>>На роутере systemd?

S>>Даже если так, то sync + dd на воткнутую флешку или сразу сквозь ssh на другую машину дадут приемлемый результат, так как ничего там на диск не пишется кроме логов

M>Что есть приемлемый результат?

M>Копия через dd не мгновенная. Что мешает драйверу ФС в это время перетасовать блоки, и на выходе ты получишь бэкап с поврежденной ФС.
Маловероятно на девайсах типа роутера. Там некому на диск писать. Логи разве что. Да и вообще бэкап об снапшот диска... Сделай один раз бэкап флешки с ОС а потом просто настройки с данными архивируй. Восстанавливать тогда — dd + обновление + равернуть архив сверху.
Matrix has you...
Re[2]: maintenance mode
От: vsb Казахстан  
Дата: 17.08.23 05:38
Оценка: 5 (1)
Здравствуйте, Sharov, Вы писали:

S>А что это такое maintenance mode и зачем он нужен? Их в линупсе вроде штук 7, каково их назначение?

S>Я прочитал этот ответ, но не понял каковы реальные
S>сценарии использования. Это типа защищенный режим в венде, когда там доступно минимум ОС функциональности?
S>Первый раз про такое слышу, поэтому такой дурацкий вопрос.

В классическом юниксе есть т.н. init run level. Каждому соответствует некий набор сервисов, которые нужно запустить при входе в этот режим.

Номер 1 это single user mode, минимальный набор сервисов для того, чтобы можно было залогиниться в систему в консоли.

Как там с systemd, я не знаю.
Re: systemd.target
От: Sheridan Россия  
Дата: 17.08.23 07:31
Оценка: 3 (1)
Здравствуйте, zx zpectrum, Вы писали:

ZZ>В стародавние init-ные времена войти в режим техобслуживания без перезагрузки было весьма просто: "init 1". Равно как и выйти из него в нормальный многопользовательский режим с сервисами и ГУЯми: "init 5".


Ну а вообще, в systemd есть понятие target'ов, и можно переключаться между ними. А вот тут можно найти соответствие между runlevel и таргетами
Matrix has you...
Re[2]: Вход в maintenance mode без перезагрузки
От: zx zpectrum  
Дата: 17.08.23 09:47
Оценка:
S>Так и не понял зачем
Тут один товарищ уже упомянул, что оно вроде как незачем, и для этой задачи есть LVM и snapshots.

Это бесспорно хорошее решение, однако, оно не подходит под все возможные ситуации и хотелки. Есть еще, например, идеология Clonezilla/Rescuezilla: в качестве бекапа храним легко- и быстровосстановимый raw-слепок всего системного диска. И в некоторых случаях оно предпочтительнее LVM со снапшотами.

Вот как раз снимать такой raw-образ из состояния ОС, когда не происходит запись на системный диск, и при этом без перезагрузки, я и хочу.
Re[4]: Вход в maintenance mode без перезагрузки
От: zx zpectrum  
Дата: 17.08.23 10:04
Оценка:
M>Почему именно блочный бэкап через dd, а не файловый через tar?
Потому что файловый, через tar, может оказаться тоже неконсистентным, если посреди дороги кто-то начнет писать на диск. Целостность структур данных ФС, понятно, не пострадает, однако получится никогда не существовавший единомоментно, "размазанный во времени" снимок.

PS. Лучше не через tar, а через bup. Эта штука эксплуатирует нижний уровень git для индексирования, компрессии и дельта-бекапов.
Re[4]: Вход в maintenance mode без перезагрузки
От: zx zpectrum  
Дата: 17.08.23 10:07
Оценка:
S>На роутере systemd?
S>Даже если так, то sync + dd на воткнутую флешку или сразу сквозь ssh на другую машину дадут приемлемый результат, так как ничего там на диск не пишется кроме логов
Ну это смотря какой роутер. Во времена, когда у меня даже на медиа-приставке крутятся докер-контейнеры (и это не я так рехнулся, самостоятельно прикрутив их, это стандартная возможность медиа-дистрибутивов CoreELEC/LibreELEC), и от роутеров можно ожидать всякого ))
Re[2]: Вход в maintenance mode без перезагрузки
От: zx zpectrum  
Дата: 17.08.23 10:11
Оценка:
Действительно, ioctl(fd, FIFREEZE) / ioctl(fd, FITHAW) (то, что под капотом у fsfreeze) выглядят как то, что доктор прописал.
Re[5]: Вход в maintenance mode без перезагрузки
От: Sheridan Россия  
Дата: 17.08.23 10:28
Оценка:
Здравствуйте, zx zpectrum, Вы писали:

ZZ>Ну это смотря какой роутер. Во времена, когда у меня даже на медиа-приставке крутятся докер-контейнеры (и это не я так рехнулся, самостоятельно прикрутив их, это стандартная возможность медиа-дистрибутивов CoreELEC/LibreELEC), и от роутеров можно ожидать всякого ))

Если от роутера нужно всякое, то нафига мучать себя и железо? Почему бы не взять комп, воткнуть в него несколько сетевух и назначить шлюзом?
Matrix has you...
Re[2]: Вход в maintenance mode без перезагрузки
От: zx zpectrum  
Дата: 17.08.23 10:42
Оценка:
vsb>Тебе нужен fsfreeze для того, что ты хочешь.
В связи с этим возникает планЪ
* Создаём ramdisk
* FIFREEZE
* Перенаправляем /var/log на ramdisk (как это совершает, например, log2ram), но не только /var/log, но также и другие локации, куда обычно подкакивают пользовательские процессы (~/.cache, ~/.config и т.д).
* Снимаем образ
* FITHAW
* Восстанавливаем все, как было, синхронизируя изменения из перенаправленных RAM-папок обратно в дисковые

И можно сидеть в браузере/слаке/тележке, пока происходит снятие образа системного диска.
Re[6]: Вход в maintenance mode без перезагрузки
От: zx zpectrum  
Дата: 17.08.23 10:51
Оценка:
S>Если от роутера нужно всякое, то нафига мучать себя и железо? Почему бы не взять комп, воткнуть в него несколько сетевух и назначить шлюзом?
Собственно, у меня есть желание сделать нечто похожее, только поаккуратнее, не из обычного системника. Х86-одноплатник Odroid H3+ имеет на борту два 2.5GbЕ, и позволяет пристегнуть к себе сетевуху еще на 4 таких же порта. Выглядит весьма вкусно для построения домашнего мультигигабита (а) за вменяемые деньги, и (б) плюс у этой платки хватит мощи еще и на другие задачи (файлопомойка, торрентокачалка, медиаприставка, nextcloud).
Re[7]: Вход в maintenance mode без перезагрузки
От: Sheridan Россия  
Дата: 17.08.23 10:54
Оценка:
Здравствуйте, zx zpectrum, Вы писали:

S>>Если от роутера нужно всякое, то нафига мучать себя и железо? Почему бы не взять комп, воткнуть в него несколько сетевух и назначить шлюзом?

ZZ>Собственно, у меня есть желание сделать нечто похожее, только поаккуратнее, не из обычного системника. Х86-одноплатник Odroid H3+ имеет на борту два 2.5GbЕ, и позволяет пристегнуть к себе сетевуху еще на 4 таких же порта. Выглядит весьма вкусно для построения домашнего мультигигабита (а) за вменяемые деньги, и (б) плюс у этой платки хватит мощи еще и на другие задачи (файлопомойка, торрентокачалка, медиаприставка, nextcloud).

odroid вкусное, да. Сам себе хочу таких штук пять и ceph дома развернуть для файлопомойки.
Но несколько дешевле, думаю, можно будет найти б/у на базе чего нибудь типа 4го пня/i3.
Matrix has you...
Re[8]: Вход в maintenance mode без перезагрузки
От: zx zpectrum  
Дата: 17.08.23 11:20
Оценка: 1 (1)
S>Но несколько дешевле, думаю, можно будет найти б/у на базе чего нибудь типа 4го пня/i3.
Четвертый пень это прям совсем никуда не годится. Вряд ли он вытянет даже мультигигабитную сеть, не говоря уже о доп.функциональности. Да и я что-то не припомню сетевух выше гигабита, которые можно воткнуть в такое старье.

Б/у MiniITX-платки на четырехъядерных безвентиляторных селеронах, а-ля J1900 — это уже ближе к делу. Однако, в отличие от процитированного x86-одноплатника Odroid, там видеоядро никакущее, и на них не взлетит добавочная функциональность медиаприставки.

MiniITX на старых Core i — еще интереснее, но теряется пассивность охлаждения.
Re[9]: Вход в maintenance mode без перезагрузки
От: Sheridan Россия  
Дата: 17.08.23 11:46
Оценка:
Здравствуйте, zx zpectrum, Вы писали:

ZZ>Б/у MiniITX-платки на четырехъядерных безвентиляторных селеронах, а-ля J1900 — это уже ближе к делу. Однако, в отличие от процитированного x86-одноплатника Odroid, там видеоядро никакущее, и на них не взлетит добавочная функциональность медиаприставки.

Ну так нвидию какую нибудь воткнуть. К слову, видяху советую втыкать в любое домашнее железо, путь даже монитор не подключен. Особенно если на видяхе памяти много. Можно swap туда утащить
Matrix has you...
Re[10]: Вход в maintenance mode без перезагрузки
От: zx zpectrum  
Дата: 17.08.23 15:17
Оценка: +1
S>Ну так нвидию какую нибудь воткнуть. К слову, видяху советую втыкать в любое домашнее железо, путь даже монитор не подключен. Особенно если на видяхе памяти много. Можно swap туда утащить

Если делать с видюхой, то уже гулять так гулять Я бы взял низкопрофильную Nvidia A2000 и мини-системник наподобие HP Prodesk или Elitedesk, залил бы туда SteamOS (или собственноручно допиленный чистый Арч, если со Steam OS на Нвидии возникнут проблемы), и будет медиацентр + роутер + файлопомойка + игровая коробочка.
Re[3]: Вход в maintenance mode без перезагрузки
От: m2user  
Дата: 19.08.23 11:38
Оценка:
ZZ>* Перенаправляем /var/log на ramdisk (как это совершает, например, log2ram), но не только /var/log, но также и другие локации, куда обычно подкакивают пользовательские процессы (~/.cache, ~/.config и т.д).

насколько я понимаю работу log2ram, он расчитан на перенос файлов до того, как c ними начнется работа на запись.

ZZ>И можно сидеть в браузере/слаке/тележке, пока происходит снятие образа системного диска.


Так тебе нужен бэкап с остановкой сервисов (как при init 1), или "горячий" (без остановки)?

Вообще тема "горячего" блочного бэкапа (аналога VSS на MS Windows) для Linux весьма актуальна.
Посмотрел ряд статей начиная с этой (про hot-clone).
Упоминается несколько готовых решений:
1) в виде модуля ядра: https://github.com/datto/dattobd
2) решение на базе blktrace: https://github.com/benjojo/hot-clone/

А также занятная история с коммерческим решение от Veeam Backup: они поставляли модуль ядра, использующий хук функции, которую в ядре 5.8 убрали.
И тогда они решили вместо поддержки out-of-tree модуля влить этот функционал в ядро. Мейнтейнеры ядра попросили не дублировать dm snapshot, и вот они теперь предлагают патчи для него — последние от апреля этого года.
Посмотрим, что у них выйдет в итоге.
(подробнее тут, тут и тут)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.