Вход в 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-образ из состояния ОС, когда не происходит запись на системный диск, и при этом без перезагрузки, я и хочу.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.