Як підключити живлення, коли немає systemd / init (наприклад, використовуючи init = / bin / bash)?


9

poweroffскаржиться, що не може підключитися до systemd через DBus (звичайно, це не живе). Я syncпішов за цим kill $$, думаючи, що Pid 1 вмирання призведе до того, що ядро ​​перетвориться на потужність, але це спричинило паніку ядра. Тоді я тримав кнопку живлення, щоб примусити потужність.

Що є найбільш правильним способом відключення в цьому сценарії?


Існує нестабільна неявна передумова питання про те, що встановлений набір системних інструментів. Коли "немає системного" насправді означає, що не встановлений системний набір інструментів, тому як заголовок також можна прочитати, відповіді досить різні; і це, мабуть, саме по собі варто окремого питання.
JdeBP

@JdeBP Ви праві, що, читаючи лише заголовок і ігноруючи init=/bin/bashпідказку / імплікацію, неоднозначно, встановлено systemd чи ні. Я мав на увазі, що немає системного запуску . У будь-якому випадку, не маючи запущеного systemd, я вважав, що набір інструментів systemd буде марним, і що у відповідях будуть використані інші засоби, наприклад, про sysrq.
JoL

Відповіді:


10

Демонтуйте файлові системи, які ви встановили. Коренева файлова система - це окремий випадок; для цього можна скористатися mount / -o remount,ro. В Linux umount /теж буває, що він працює, оскільки він ефективно перетворюється на колишню команду.


При цьому, вам не потрібно турбуватися над тим, як виймати занадто багато, якщо тільки

  1. Ви встановили стару файлову систему на зразок FAT - як використовується системний розділ EFI - або ext2, яка не реалізує журналинг чи еквівалент. З сучасною файловою системою, syncяк передбачається, буде достатньо, і файлова система відновить себе дуже швидко при наступному завантаженні.
  2. Можливо, ви залишили запущений процес, який записує у файлову систему, і ви мали намір закрити його чисто. У такому випадку корисно намагатись перерахувати файлові системи, тому що umount не вдасться, і помилка буде зайнята, щоб нагадати про письменника, що залишився.

Сказане є важливою частиною. Після цього ви також можете зручно вимкнути обладнання за допомогою poweroff -f. Або перезавантажте програму reboot -f.

Існує systemd-специфічні еквівалент poweroff -f: systemctl poweroff -f -f. Однак poweroff -fте саме робить і systemdпідтримує цю команду, навіть якщо вона була побудована без сумісності SysV.


Технічно я пам’ятаю, що на моєму жорсткому диску USB було зафіксовано, що він вимагає «безпечного видалення» для Windows або іншого еквівалента. Але ця вимога не є безпечною для відключення електроенергії, і Linux це не робить цього під час звичайного відключення. Це краще трактувати як сенс, що не слід бігати на жорсткий диск, поки він обертається - в тому числі, намагаючись відключити його від мережі. Повне вимкнення живлення повинно зупинити обертання приводу. Ви, напевно, можете почути, відчути чи побачити, чи це не зупиняється :-).


Просто так ви знаєте, я не забуваю прийняти. Просто я побачив пораду почекати деякий час, перш ніж приймати відповідь, щоб інші (можливо, в різні часові пояси) побачили питання і мали можливість дати власні відповіді.
JoL

sync()достатньо для ext2. Він скаржиться на те, що забруднився, але насправді не був зіпсований, за винятком зведеної інформації. Як правило, я вважаю, що init = / bin / bash або будь-який локальний еквівалент є надзвичайною ситуацією.
Джошуа

@Joshua ext2 fsck дивовижний . Але продуктивність fsck у великих файлових системах набагато гірша, ніж журнал. У надзвичайній ситуації ви не хочете затримуватися через нечисті відключення.
sourcejedi

Ви знаєте, fsck.mode=skipправда?
Джошуа

3
@ Джошуа, що актуально чому? Якщо ви зробите нечистий демонтаж, з часом вам доведеться відремонтувати FS. Не використовуйте fsck.mode=skipдля завантаження звичайно після нечистого відключення!
sourcejedi

5

Я просто виконую нижче двох команд:

echo s > /proc/sysrq-trigger    <= For sync
echo o > /proc/sysrq-trigger    <= For shutdown the system

Припустимо, що в ядрі включений магічний ключ


4

Гаразд, так мені просто спало на думку, що я маю можливість це зробити exec init. Звідти я, мабуть, зможу пізніше poweroff. Цікаво, чи є кращі альтернативи.


@ G-Man не розпочне нормальний процес завантаження і надасть вам нормальну оболонку зрештою?
муру

2
@muru Ви могли б зробити exec init 0. Це не працюватиме з усіма системами init, але ті ж самі пройдуть послідовність відключення.
Остін Хеммельгарн

1
Я думаю, що це справді хороша відповідь з інших причин; тим більше, що в більшості випадків відключення електроенергії не бажано настільки, як перезавантаження, і це дозволяє уникнути перезавантаження після того, як виправлено пошкодження.
Джошуа

1
@Joshua Це зручно, але якщо ви хочете бути найбезпечнішими, часто корисно перевірити, чи повністю працює процес завантаження :-).
sourcejedi

3

Ефективно, Tou хочу викликати перезавантаження (2) syscall.

Два способи зробити це:

  1. Виконати reboot -fабо poweroff -f, для цього слід зателефонувати reboot(2)безпосередньо.

  2. Якщо ви перебуваєте у справжньому віртуальному терміналі Linux (не емуляторі терміналу GUI), натискаючи Ctrl+ Alt+ Delete.

Зауважте, що комбінація клавіш може бути відключена якоюсь програмою для користувальницького простору (як правило, init), коли відключена комбінація клавіш надсилатиме сигнал до init.

Усі вищезазначені команди слід виконати після підрахунку всіх дисків або перезарядки лише для читання та запуску синхронізації, інакше ви можете втратити неписані дані. Якщо ваша оболонка - єдиний запущений процес, синхронізації може бути достатньо.


1

Ви можете використовувати клавіші Magic SysRq ( https://en.wikipedia.org/wiki/Magic_SysRq_key ) для вимкнення комп'ютера.

Щоб правильно вимкнутись, ви можете скористатися наступним (форма цитати Вікіпедії):

Загальне використання магічної клавіші SysRq - це безпечна перезавантаження комп'ютера Linux, який в іншому випадку заблокований ( абр . REISUB ). Це може запобігти fsckнеобхідності перезавантаження та надає деяким програмам можливість зберегти аварійні резервні копії збереженої роботи. [5]   QWERTY - (або AZERTY) Мнемоніка: " R aising Е lephants Я з S про U tterly В ORing", " R Eboot Е VEN Я F S ystem U tterly Брозгорнуто "або просто слово" BUSIER ", прочитане назад, часто використовується для запам'ятовування наступної послідовності клавіш SysRq:

  • un Raw (поверніть управління клавіатурою назад від X),
  • t Erminate (надсилайте SIGTERM до всіх процесів, дозволяючи їм граціозно закінчуватися),
  • k Ill (надішліть SIGKILL до всіх процесів, змусивши їх негайно припинити роботу),
  • Sync (передайте дані на диск),
  • Unmount (перезавантажте всі файлові системи лише для читання),
  • re Boot.

Але заміну останнього B на O (для azerty / qwerty) на "power O ff"


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.