CD beim Herunterfahren auswerfen

12

OK, ich habe also ein einfaches Problem: Ich habe eine Live-CD und möchte, dass die CD ausgeworfen wird, wenn der Computer neu gestartet oder angehalten wird.

Beim Ausführen /usr/bin/eject -mwird die CD einwandfrei ausgeworfen. Wie zu erwarten ist, stürzt das Betriebssystem ab, da jetzt keine Dateien mehr gelesen werden können. Der Neustart findet also nie statt, da nicht darauf /sbin/rebootzugegriffen werden kann. (Ich habe versucht, reboot --help > /dev/nulldirekt vor dem Neustart auszuführen , aber es gibt noch andere Dateien, die immer noch nicht gelesen werden können ...)

Zusammenfassend scheint es, dass ich den Auswurf zum allerletzten Ereignis machen muss. Es scheint also, dass dies systemdder Welpe ist, mit dem ich spielen muss ... Aber ich habe buchstäblich Stunden meines Lebens damit verschwendet, ihn zu stupsen und zu stupsen, und egal was ich tue, wirft er die CD unter keinen Umständen wirklich aus. Und ich habe keine Ahnung warum. Ich habe ein Dutzend verschiedene Arten des Aufrufens ausprobiert eject, aber es passiert nie etwas.

Kann mir jemand sagen, wie man am einfachsten rennt eject? (Ich stelle mir kurz danach umount.targetwäre vernünftig ...)

MathematicalOrchid
quelle
Ich nehme an, Sie haben ein anderes Betriebssystem auf dem Computer oder warum möchten Sie die CD sonst beim Neustart auswerfen? Wenn dies der Grund ist, können Sie wahrscheinlich bessere Ergebnisse erzielen, wenn Sie ein Startmenü einrichten, in dem Sie auswählen können, ob Sie von der CD oder von der Festplatte starten möchten.
Emanuel Berg
Haben Sie nach dem Ummounten der CD nicht noch den Inhalt Ihrer initramfs übrig? Wenn es eine ejectgibt, geht es dir gut?
Ulrich Schwarz
Warten Sie mal. Das ist seltsam. Linux Mint und ich denke Ubuntu tun dies standardmäßig.
Linuxios

Antworten:

4

Schließlich fand mein Kollege den folgenden Artikel:

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

Zusammenfassend habe ich eine Datei mit dem Namen erstellt, /lib/systemd/system/eject.servicedie enthält

[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

Ich musste auch laufen systemctl enable eject.servicemachen dies tatsächlich tut nichts. Aber jetzt systemdwirft die CD kurz vor dem Herunterfahren genau so aus, wie ich es wollte.

... leider ist das Betriebssystem immer noch fehlerhaft, wenn der Rest der Dateien mit ausgeworfener CD nicht gefunden werden kann. Ich habe versucht, die obige Datei so anzupassen After=unmount.target, dass sie das Skript ausführt, nachdem die Dateisysteme ausgehängt wurden. Aber nein, es gibt immer noch Fehler.

Es sieht so aus, als müsste ich herausfinden, wie ich das Live-CD-Image beim Booten in den RAM kopieren kann - aber das ist eine ganz andere Frage ...

MathematicalOrchid
quelle
1

Das Folgende kann Ihnen helfen:

  • Fügen Sie Ihren Auswurfbefehl unter /etc/init.d/halt.local hinzu

  • Sie können sich auch die Vorlage /etc/init.d/skeleton ansehen und diese anpassen, um möglicherweise eine Ausgabe hinzuzufügen, z. B. Herunterfahren des Systems, Drücken einer beliebigen Taste zum Auswerfen der CD-ROM usw.

  • Checken Sie die Skripte in /etc/init.d aus, die mit den Runlevel-Verzeichnissen /etc/rc0.d (halt) verknüpft sind.

Md Mahbubur Rahman
quelle
0

Überprüfen Sie die Skripte in /etc/init.d den Runlevel-Verzeichnissen /etc/rc0.d(halt) und /etc/rc6.d(reboot). Zum Beispiel habe ich den Befehl zum Auswerfen eingegeben /etc/init.d/rebootund es hat gut funktioniert.

Da ich nicht auf einer Live-CD bin, kann ich nicht testen, was funktionieren würde.

Wenn Sie darüber nachdenken, ist es schwer vorstellbar, ein Skript oder sogar eine kompilierte Binärdatei einzufügen. Sogar eine Binärdatei erfordert einen gewissen Zuweisungs- / Freigabeaufwand, und sobald Sie die CD auswerfen, sind Sie fertig. Es sollte eher wie ein Flag und ein Zeiger auf einen Maschinenbefehl sein, der in einem superpersistenten Speicher abgelegt ist ...

Vielleicht ist es einfacher, den Befehl auszuführen und das Betriebssystem absichtlich zum Absturz zu bringen, aber wenn fast alles offline ist, spielt es keine Rolle, dass Sie Ihr verbleibendes System zum Absturz bringen.

(Bearbeiten) Ein anderer Gedanke: Könnten Sie Ihr Dateisystem irgendwie partitionieren, eine Partition nur für den Auswurfbefehl erstellen und neu starten, alle anderen aushängen und dann den Befehl ausführen? (Aber dann müsste fsck wahrscheinlich angewiesen werden, sich nicht jedes Mal zu beschweren, dass die Eject-Partition nicht korrekt ausgehängt wurde.) Oder könnten Sie sie auf einen USB-Stick stecken? (Dies ist ein sehr interessantes Problem. Wenn Sie es lösen, teilen Sie es uns mit!)

(Edit 2) Was ist mit Zusammenführen von Auswerfen und Neustarten, damit Sie eine Binärdatei erhalten, die in den Speicher geladen wird, die CD auswirft, aber keinen Neustart von einem Dateisystem laden muss, die sich bereits im Hauptspeicher befindet?

Emanuel Berg
quelle
0

Ubuntu kann verwenden eject -m; reboot -f

Jamlee
quelle