В стародавние init-ные времена войти в режим техобслуживания без перезагрузки было весьма просто: "init 1". Равно как и выйти из него в нормальный многопользовательский режим с сервисами и ГУЯми: "init 5".
Как сделать нечто похожее в эпоху systemd? Все интернетные советчики говорят о прописывании "init=/usr/bin/bash" в конец параметров ядра из GRUB, но этот метод, очевидно, требует двух перезагрузок туда-обратно.
Хотя на самом-то деле мне single user mode не очень-то и нужен. Хочется иметь возможность входить в режим, в котором остановлены все процессы, пишущие на диск, для того, чтобы снять полный слепок системного диска на внешник (dd if= of=) без риска, что он получится неконсистентным, если в процессе снятия образа кто-нибудь подкакнёт записью.
Здравствуйте, zx zpectrum, Вы писали:
ZZ>Хотя на самом-то деле мне single user mode не очень-то и нужен. Хочется иметь возможность входить в режим, в котором остановлены все процессы, пишущие на диск, для того, чтобы снять полный слепок системного диска на внешник (dd if= of=) без риска, что он получится неконсистентным, если в процессе снятия образа кто-нибудь подкакнёт записью.
Здравствуйте, zx zpectrum, Вы писали:
ZZ>Хотя на самом-то деле мне single user mode не очень-то и нужен. Хочется иметь возможность входить в режим, в котором остановлены все процессы, пишущие на диск, для того, чтобы снять полный слепок системного диска на внешник (dd if= of=) без риска, что он получится неконсистентным, если в процессе снятия образа кто-нибудь подкакнёт записью.
Для этого есть lvm и snapshot-ы
Здравствуйте, Zhendos, Вы писали:
Z>Почему тогда просто не:
Z>
Z>mount path/to/mount/point -o remount,ro
Z>
А ты пробовал?
Шансы, что кто-то держит этот диск открытым на запись, весьма велики.
Кстати, достаточно удалить октрытый (хоть даже и на чтение) файл, и файловую систему становится невозможно перемонтировать в ro. Например, так происходит при обновлении пакетов с системными (или, хотя бы, популярными) разделяемыми библиотеками: обновление удаляет дисковые файлы, но они остаются открытыми теми процессами, которые их используют.
Дело в том, что UNIX позволяет удалить открытый файл. При этом удаляется только имя, а фактическое удаление откладывается до момента окончания использования этого файла. И пока это не произошло, файловая система не может быть перемонтирована в ro
Здравствуйте, zx zpectrum, Вы писали:
ZZ>В стародавние init-ные времена войти в режим техобслуживания без перезагрузки было весьма просто: "init 1". Равно как и выйти из него в нормальный многопользовательский режим с сервисами и ГУЯми: "init 5".
Да.
Pzz>Шансы, что кто-то держит этот диск открытым на запись, весьма велики.
Ну судя по контексту это домашняя машина, поэтому завершить все процессы пользователя
и ненужные системные демоны не проблема. "lsof" и прочие покажут кто еще держит открытые файлы.
Здравствуйте, Zhendos, Вы писали:
Z>Ну судя по контексту это домашняя машина, поэтому завершить все процессы пользователя Z>и ненужные системные демоны не проблема. "lsof" и прочие покажут кто еще держит открытые файлы.
Не знаю. У меня на домашней машине это никогда надежно не работало. На нонешних домашних машинах всяких загадочных процессов больше, чем на серверах. Дектоп он нынче такой, заковыристый.
Здравствуйте, zx zpectrum, Вы писали:
ZZ>В стародавние init-ные времена войти в режим техобслуживания без перезагрузки было весьма просто: "init 1". Равно как и выйти из него в нормальный многопользовательский режим с сервисами и ГУЯми: "init 5".
Я какое то время думал, но так и не понял — зачем?
Когда всё работает? явно не нужно
Когда не работает какой-то сервис? несложно остановить/запустить именно его пусть даже с зависимостями
Когда не работает всё? явно нужно садиться и разбираться если машина ещё не повесилась и тут дёргать за рычаги вообще опасно ибо оно в шатком состоянии
Когда не бутится? Ну так в грубе несложно f10 нажать и на баш инит сменить на один раз...
Здравствуйте, Sheridan, Вы писали:
S>Я какое то время думал, но так и не понял — зачем? S>Когда всё работает? явно не нужно
Наоборот именно тогда и нужно, чтоб сделать бэкап работающей системы без её остановки. Вполне кейс для сетевого девайса типа роутера, мне тоже такого не хватает.
aik>Наоборот именно тогда и нужно, чтоб сделать бэкап работающей системы без её остановки. Вполне кейс для сетевого девайса типа роутера, мне тоже такого не хватает.
Почему именно блочный бэкап через dd, а не файловый через tar?
И не нужно будет думать о целостности ФС.
Здравствуйте, aik, Вы писали:
S>>Я какое то время думал, но так и не понял — зачем? S>>Когда всё работает? явно не нужно
aik>Наоборот именно тогда и нужно, чтоб сделать бэкап работающей системы без её остановки. Вполне кейс для сетевого девайса типа роутера, мне тоже такого не хватает.
На роутере systemd?
Даже если так, то sync + dd на воткнутую флешку или сразу сквозь ssh на другую машину дадут приемлемый результат, так как ничего там на диск не пишется кроме логов
А если не роутер, то "btrfs subvolume snapshot ...". Нету btrfs? Делайте так чтобы был, он рулит. Ну или zfs.
Здравствуйте, m2user, Вы писали:
M>Почему именно блочный бэкап через dd, а не файловый через tar? M>И не нужно будет думать о целостности ФС.
Мне — для простоты. Такой бэкап можно просто "dd" на новую SD карточку. А так надо писать скрипты куда что распаковать, разбираться в разделах, форматировать это всё, геморои.
А что это такое maintenance mode и зачем он нужен? Их в линупсе вроде штук 7, каково их назначение?
Я прочитал этот ответ, но не понял каковы реальные
сценарии использования. Это типа защищенный режим в венде, когда там доступно минимум ОС функциональности?
Первый раз про такое слышу, поэтому такой дурацкий вопрос.
S>На роутере systemd? S>Даже если так, то sync + dd на воткнутую флешку или сразу сквозь ssh на другую машину дадут приемлемый результат, так как ничего там на диск не пишется кроме логов
Что есть приемлемый результат?
Копия через dd не мгновенная. Что мешает драйверу ФС в это время перетасовать блоки, и на выходе ты получишь бэкап с поврежденной ФС.
Кстати lvm snapshots, который предлагали ранее, сам вызывает fsfreeze и в этом плане безопасен (но только если ФС поддерживает fsfreeze).
Впрочем, учитывая мгновенность снимка, он и без fsfreeze должен быть безопасен.
Монтирование ФС в 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.
Здравствуйте, m2user, Вы писали:
S>>На роутере systemd? S>>Даже если так, то sync + dd на воткнутую флешку или сразу сквозь ssh на другую машину дадут приемлемый результат, так как ничего там на диск не пишется кроме логов
M>Что есть приемлемый результат? M>Копия через dd не мгновенная. Что мешает драйверу ФС в это время перетасовать блоки, и на выходе ты получишь бэкап с поврежденной ФС.
Маловероятно на девайсах типа роутера. Там некому на диск писать. Логи разве что. Да и вообще бэкап об снапшот диска... Сделай один раз бэкап флешки с ОС а потом просто настройки с данными архивируй. Восстанавливать тогда — dd + обновление + равернуть архив сверху.
Здравствуйте, Sharov, Вы писали:
S>А что это такое maintenance mode и зачем он нужен? Их в линупсе вроде штук 7, каково их назначение? S>Я прочитал этот ответ, но не понял каковы реальные S>сценарии использования. Это типа защищенный режим в венде, когда там доступно минимум ОС функциональности? S>Первый раз про такое слышу, поэтому такой дурацкий вопрос.
В классическом юниксе есть т.н. init run level. Каждому соответствует некий набор сервисов, которые нужно запустить при входе в этот режим.
Номер 1 это single user mode, минимальный набор сервисов для того, чтобы можно было залогиниться в систему в консоли.
Здравствуйте, zx zpectrum, Вы писали:
ZZ>В стародавние init-ные времена войти в режим техобслуживания без перезагрузки было весьма просто: "init 1". Равно как и выйти из него в нормальный многопользовательский режим с сервисами и ГУЯми: "init 5".
Ну а вообще, в systemd есть понятие target'ов, и можно переключаться между ними. А вот тут можно найти соответствие между runlevel и таргетами
S>Так и не понял зачем
Тут один товарищ уже упомянул, что оно вроде как незачем, и для этой задачи есть LVM и snapshots.
Это бесспорно хорошее решение, однако, оно не подходит под все возможные ситуации и хотелки. Есть еще, например, идеология Clonezilla/Rescuezilla: в качестве бекапа храним легко- и быстровосстановимый raw-слепок всего системного диска. И в некоторых случаях оно предпочтительнее LVM со снапшотами.
Вот как раз снимать такой raw-образ из состояния ОС, когда не происходит запись на системный диск, и при этом без перезагрузки, я и хочу.