Итак, у меня есть простая проблема: у меня есть live CD, и я хочу, чтобы CD извлекался при перезагрузке или остановке компьютера.
Выполнение /usr/bin/eject -m
делает извлечение компакт-диска просто прекрасным ... проблема, как вы можете ожидать, приводит к сбою ОС, поскольку теперь она не может читать какие-либо файлы. Так что перезагрузка никогда не происходит, потому что /sbin/reboot
недоступна. (Я пытался выполнить reboot --help > /dev/null
прямо перед перезагрузкой, но есть другие файлы, которые все еще не могут быть прочитаны ...)
Таким образом, кажется, что я должен сделать изгнание самым последним, что происходит. Так что, похоже, systemd
это тот щенок, с которым мне нужно играть ... Но я потратил буквально часы своей жизни, ковыряя и подталкивая его, и независимо от того, что я делаю, он никогда, ни при каких обстоятельствах, фактически не выбрасывает диск. И я понятия не имею, почему. Я пробовал дюжину разных способов вызова eject
, но ничего не происходит.
Кто-нибудь может сказать мне самый простой способ бегать eject
? (Я думаю, что после того, как umount.target
было бы разумно ...)
eject
есть, с тобой все будет в порядке?Ответы:
В конце концов мой коллега нашел следующую статью:
http://lists.freedesktop.org/archives/systemd-devel/2012-September/006573.html
В итоге я создал файл с именем,
/lib/systemd/system/eject.service
который содержитЯ также должен был бежать,
systemctl enable eject.service
чтобы заставить это фактически делать что-нибудь. Но теперьsystemd
извлекает CD прямо перед выключением, именно так, как я хотел.... к сожалению, ОС по-прежнему работает с ошибками, когда не может найти остальные файлы с извлеченным компакт-диском. Я пытался регулировать вышеуказанный файл таким образом , мы имеем
After=unmount.target
, что вы могли бы подумать запускает сценарий после того, как файловые системы были демонтированы. Но нет, все-таки это segfaults.Похоже, мне придется выяснить, как скопировать образ живого CD в ОЗУ при загрузке - но это совсем другой вопрос ...
источник
Следующее может помочь вам:
Добавьте вашу команду извлечения в /etc/init.d/halt.local
Вы также можете посмотреть на шаблон /etc/init.d/skeleton и настроить его так, чтобы, возможно, добавить какой-нибудь вывод, например, выключение системы, нажать любую клавишу, чтобы извлечь диск и т. Д.
Проверьте скрипты в /etc/init.d, связанные с каталогами уровня запуска /etc/rc0.d (halt).
источник
Проверьте сценарии, на
/etc/init.d
которые ссылаются каталоги уровней запуска/etc/rc0.d
(останов) и/etc/rc6.d
(перезагрузка). Например, я вставил команду eject,/etc/init.d/reboot
и она работала нормально.Но я не на Live CD, поэтому я не могу проверить, что будет работать.
Если вы думаете об этом, что-то вроде этого, трудно представить, вставляя скрипт или даже скомпилированный бинарный файл. Даже двоичный файл требует некоторых затрат на распределение / освобождение, и как только вы извлекаете компакт-диск, все готово. Скорее, это должно быть как флаг и указатель на машинную инструкцию, хранящуюся в некоторой сверхпостоянной памяти ...
Может быть, проще просто запустить команду и преднамеренно завершить работу ОС, но сделать это, когда почти все компоненты находятся в автономном режиме, поэтому не будет иметь значения, что вы выйдете из строя оставшейся системы.
(Правка) Еще одна мысль: не могли бы вы каким-то образом разделить файловую систему, создав раздел только для команды eject и перезагрузившись, размонтировав все остальные, а затем запустив команду? (Но, вероятно, тогда fsck нужно было бы сказать, чтобы каждый раз не жаловаться, что раздел извлечения не был правильно размонтирован.) Или, не могли бы вы положить его на флешку? (Это очень интересная проблема; если вы решите ее, сообщите нам!)
(Правка 2) Как насчет слияния eject и reboot, чтобы вы получили один двоичный файл, он загружен в память, eject извлекает компакт-диск, но не должен загружать перезагрузку из какой-либо файловой системы, он уже находится в основной памяти?
источник
Ubuntu может использовать
eject -m; reboot -f
источник