シャットダウン時にCDを取り出す


12

わかりました、それで私は簡単な問題があります:私はライブCDがあり、コンピューターがリブートまたは停止したときにCDを取り出したいです。

実行/usr/bin/eject -mすると、CDが正常にイジェクトされます。問題は、ご想像のとおり、ファイルを読み取れないためにOSがクラッシュすることです。したがって、/sbin/rebootアクセスできないため、再起動は発生しません。(reboot --help > /dev/null再起動の直前に実行しようとしましたが、まだ読み取れないファイルがまだあります...)

要約すると、イジェクトを最後に行う必要があるようです。だから、それはsystemd私が遊ぶ必要がある子犬です...しかし、私は文字通り私の人生の何時間もそれを突っ込んだり、無駄にしたりしており、私が何をしようとも、どんな状況でも決して実際にCDを排出することはありません。そして、私には理由がわかりません。さまざまな呼び出し方法を試しましたejectが、何も起こりません。

実行する最も簡単な方法を教えてもらえますejectか?(私はすぐにumount.target賢明になると思います...)


コンピューターに別のOSがインストールされている、または再起動時にCDを取り出す理由が他にあると思いますか?これが理由である場合、CDから起動するかディスクから起動するかを選択できる起動メニューを設定すると、おそらくより良い結果が得られます。
エマニュエルベルク

CDをアンマウントしても、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はシャットダウンの直前に、まさに私が望んだとおりにCDを取り出します。

...残念ながら、CDが排出された残りのファイルが見つからない場合、OSはまだセグメンテーション違反を起こします。上記のファイルを調整してみましたので、ファイルシステムがアンマウントされた後にスクリプトAfter=unmount.target実行すると思われます。しかし、いや、まだセグメンテーション違反です。

起動時にライブCDイメージをRAMにコピーする方法を理解する必要があるように見えますが、それはまったく別の質問です...


1

次のことが役立つ場合があります。

  • /etc/init.d/halt.localにイジェクトコマンドを追加します

  • /etc/init.d/skeletonテンプレートを見て、これをカスタマイズして、システムのシャットダウン、任意のキーを押してcdromを取り出すなどの出力を追加することもできます。

  • ランレベルディレクトリ/etc/rc0.d(停止)にリンクされている/etc/init.dのスクリプトを確認します。


0

/etc/init.dランレベルディレクトリ/etc/rc0.d(halt)および/etc/rc6.d(reboot)でリンクされているスクリプトをチェックアウトします。例えば、私はejectコマンドを入れて/etc/init.d/reboot、それはうまく働きました。

しかし、私はLive CDを使用していないので、何が機能するかをテストすることはできません。

このようなことを考えると、スクリプトやコンパイル済みのバイナリを入れることは想像しにくいです。バイナリでさえ、いくらかの割り当て/割り当て解除のオーバーヘッドが必要です。CDを取り出すとすぐに完了です。むしろ、それはフラグと機械命令へのポインタのようなものであるべきであり、いくつかの超永続的なメモリに保存されます...

コマンドを実行して意図的にOSをクラッシュさせる方が簡単かもしれませんが、ほとんどすべてのものがオフラインのときにそうするので、残りのシステムをクラッシュしてもかまいません。

(編集)別の考え:ファイルシステムを何らかの方法でパーティション分割して、ejectコマンドとリブート用のパーティションを作成し、他のすべてをアンマウントしてからコマンドを実行できますか?(しかし、おそらくfsckは、毎回文句を言わないように、イジェクトパーティションが正しくマウント解除されなかったと言われる必要があります。)または、USBスティックに置くことができますか?(これは非常に興味深い問題です。解決したら、教えてください!)

(編集2)については何マージあなたが得るように、イジェクトし、再起動を、1つのバイナリを、それがメモリにロードされ、イジェクトがCDをイジェクトが、任意のファイルシステムからの再起動をロードする必要はありません、それはメインメモリにすでにありますか?


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.