Вимкніть компакт-диск при відключенні


12

Гаразд, тому у мене проста проблема: у мене є живий компакт-диск, і я хочу, щоб CD виймався, коли комп'ютер перезавантажився або зупинився.

Виконання /usr/bin/eject -mвиконує витяг компакт-дисків просто чудово ... як і можна було очікувати, проблема може призвести до аварійної роботи ОС, оскільки вона тепер не може читати жодні файли. Тож перезавантаження ніколи не відбувається, бо /sbin/rebootце недоступно. (Я спробував виконати reboot --help > /dev/nullбезпосередньо перед перезавантаженням, але все ж є інші файли, які досі неможливо прочитати ...)

Підсумовуючи це, виходить, що мені потрібно зробити викид саме останнім, що трапляється. Отож здається, що systemdце цуценя, з яким мені потрібно грати ... Але я витрачав буквально години свого життя, колючи і висуваючи його, і що б я не робив, він ніколи, ніколи, ні за яких обставин насправді не виймає компакт-диск. І я поняття не маю, чому. Я спробував десяток різних способів викликати eject, але ніколи нічого не відбувається.

Хтось може сказати мені найпростіший спосіб бігти eject? (Я думаю, що тільки після цього umount.targetбуло б розумно ...)


Я вважаю, у вас на комп’ютері є інша ОС або чому ще ви хотіли б вийняти компакт-диск при перезавантаженні? Якщо це причина, ви, ймовірно, можете зробити краще, якщо ви створили меню завантаження, де можна було вибрати, чи потрібно завантажуватись з компакт-диска чи з диска.
Емануель Берг

Після того, як ви вимкнете компакт-диск, ви все ще не залишилися зі змістом своїх initramfs? Якби там ejectє, то було б добре?
Ульріх Шварц

Зачекай. Це дивно. Linux Mint, і я думаю, що Ubuntu це робить за замовчуванням.
Linuxios

Відповіді:


4

Врешті мій колега знайшов таку статтю:

http://lists.freedesktop.org/archives/systemd-devel/2012-September/006573.html

Підводячи підсумок, я створив файл, /lib/systemd/system/eject.serviceякий містить ім'я

[Unit]
Description=Eject the DVD
Before=final.target
After=shutdown.target
DefaultDependencies=no

[Service]
Type=oneshot
ExecStart=/usr/bin/eject -m
StandardInput=tty-force
StandardOutput=inherit
StandardError=inherit

[Install]
WantedBy=shutdown.target

Мені також довелося бігти, systemctl enable eject.serviceщоб змусити це насправді щось робити . Але тепер systemdвиймає компакт-диск безпосередньо перед відключенням, саме так, як я хотів.

... на жаль, операційна система все ще не працює, коли вона не може знайти решту файлів із вилученим компакт-диском. Я спробував скоригувати вищезазначений файл, щоб у нас є After=unmount.target, який, на вашу думку, запускає сценарій після відключення файлових систем. Але ні, все-таки це segfault.

Схоже, мені доведеться розібратися, як скопіювати образ живого CD в оперативну пам'ять під час завантаження - але це зовсім інше питання ...


1

Наступні дії можуть вам допомогти:

  • Додайте команду викидання на /etc/init.d/halt.local

  • Ви також можете переглянути шаблон /etc/init.d/skeleton і налаштувати його, щоб, можливо, додати деякий вихід, наприклад, вимкнення системи, натисніть будь-яку клавішу, щоб вийняти компакт-диск тощо.

  • Ознайомтеся з сценаріями в /etc/init.d, які пов'язані з каталогами runlevel /etc/rc0.d (halt).


0

Ознайомтеся зі сценаріями /etc/init.d, які пов'язані з каталогами runlevel /etc/rc0.d(зупинка) та /etc/rc6.d(перезавантаження). Наприклад, я помістив команду eject, /etc/init.d/rebootі вона спрацювала чудово.

Але я не на Live CD, тому не можу перевірити, що б працювало.

Якщо ви задумаєтесь про щось подібне, важко уявити, вкладаючи сценарій або навіть складений двійковий файл. Навіть двійковий файл вимагає певного наділу / розподілу накладних витрат, і як тільки ви виймаєте компакт-диск, ви закінчите. Швидше, це має бути як прапор і вказівник на машинну інструкцію, що зберігається в якійсь супер-стійкій пам'яті ...

Можливо, простіше просто запустити команду і навмисно збігти ОС, але це робити, коли майже всі речі в режимі офлайн, тому не має значення, що ви зірвете вашу систему, що залишилася.

(Редагувати) Ще одна думка: Чи можете ви якимось чином розділити вашу файлову систему, створивши розділ лише для команди вилучення та перезавантажте, відключіть усі інші, а потім запустіть команду? (Але, ймовірно, тоді fsck доведеться сказати, щоби не скаржитися кожен раз, що розділ для вилучення не було відключено правильно.) Або ви могли б покласти його на USB-накопичувач? (Це дуже цікава проблема; якщо ви вирішите її, скажіть нам!)

(Редагувати 2) Що з об’єднанням викидання та перезавантаження, тож ви отримуєте один двійковий файл, він завантажується в пам’ять, викидає викидає компакт-диск, але не потрібно завантажувати перезавантаження з будь-якої файлової системи, вона вже є в основній пам'яті?


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