Expulsar CD al apagar


12

Bien, tengo un problema simple: tengo un CD en vivo y quiero que el CD se expulse cuando la computadora se reinicie o se detenga.

La ejecución /usr/bin/eject -mhace que el CD se expulse bien ... el problema es que, como es de esperar, esto bloquea el sistema operativo porque ahora no puede leer ningún archivo. Entonces el reinicio nunca ocurre, porque /sbin/rebootes inaccesible. (Intenté ejecutar reboot --help > /dev/nulljusto antes del reinicio, pero todavía hay otros archivos que aún no se pueden leer ...)

En resumen, parece que necesito hacer que la expulsión sea lo último que suceda. Parece que ese systemdes el cachorro con el que necesito jugar ... Pero he desperdiciado literalmente horas de mi vida hurgando y empujándolo, y no importa lo que haga, nunca, bajo ninguna circunstancia, expulsa el CD. Y no tengo idea de por qué. He intentado una docena de formas diferentes de invocar eject, pero nunca pasa nada.

¿Alguien puede decirme la forma más sencilla de correr eject? (Me imagino que justo después umount.targetsería sensato ...)


Supongo que tiene otro sistema operativo en la computadora o ¿por qué más le gustaría expulsar el CD al reiniciar? Si esta es la razón, probablemente podría hacerlo mejor si configura un menú de arranque donde puede seleccionar si arrancar desde el CD o desde el disco.
Emanuel Berg

Después de desmontar el CD, ¿no te quedan los contenidos de tus initramfs? Si hay un ejectallí, ¿estarías bien?
Ulrich Schwarz el

Espere. Eso es extraño. Linux Mint, y creo que Ubuntu hace esto por defecto.
Linuxios

Respuestas:


4

Finalmente, mi colega encontró el siguiente artículo:

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

En resumen, creé un archivo llamado /lib/systemd/system/eject.serviceque contiene

[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

También tuve que correr systemctl enable eject.servicepara que esto realmente hiciera cualquier cosa. Pero ahora systemdexpulsa el CD justo antes del apagado, exactamente como quería.

... desafortunadamente, el sistema operativo sigue siendo predeterminado cuando no puede encontrar el resto de los archivos con el CD expulsado. Traté de ajustar el archivo anterior para que tengamos After=unmount.target, lo que pensarías que ejecuta el script después de que los sistemas de archivos se hayan desmontado. Pero no, todavía se daña.

Parece que voy a tener que descubrir cómo copiar la imagen del CD en vivo en la RAM en el arranque, pero esa es otra pregunta ...


1

Los siguientes pueden ayudarlo:

  • Agregue su comando de expulsión en /etc/init.d/halt.local

  • También puede mirar la plantilla /etc/init.d/skeleton y personalizarla para agregar alguna salida, por ejemplo, apagado del sistema, presionar cualquier tecla para expulsar cdrom, etc.

  • Consulte los scripts en /etc/init.d que están vinculados en los directorios de nivel de ejecución /etc/rc0.d (detener).


0

Consulte los scripts /etc/init.dque están vinculados en los directorios de nivel de ejecución /etc/rc0.d(detener) y /etc/rc6.d(reiniciar). Por ejemplo, puse el comando de expulsión /etc/init.d/rebooty funcionó bien.

Pero no estoy en un Live CD, así que no puedo probar qué funcionaría.

Si lo piensas, algo así, es difícil de imaginar, poner un script o incluso un binario compilado. Incluso un binario requiere una sobrecarga de asignación / desasignación, y tan pronto como expulse el CD, habrá terminado. Más bien, debería ser como una bandera y un puntero a una instrucción de máquina, almacenada en una memoria súper persistente ...

Tal vez sea más fácil ejecutar el comando y bloquear deliberadamente el sistema operativo, pero hacerlo cuando casi todo esté desconectado, por lo que no importará que bloquee el sistema restante.

(Editar) Otro pensamiento: ¿Podría de alguna manera particionar su sistema de archivos, crear una partición solo para el comando de expulsión y reiniciar, desmontar todos los demás y luego ejecutar el comando? (Pero, probablemente, entonces fsck tendría que tener que decirle que no se queje cada vez, que la partición de expulsión no se desmontó correctamente.) O, ¿podría colocarlo en una memoria USB? (Este es un problema muy interesante; si lo resuelve, ¡díganos!)

(Edición 2) ¿Qué pasa con la fusión de expulsión y reinicio, por lo que obtiene un binario, se carga en la memoria, expulsa el CD, pero no tiene que cargar el reinicio desde ningún sistema de archivos, ya está en la memoria principal?


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.