El sistema operativo Linux en vivo determina el medio de arranque actual (CD/USB) que se utiliza para arrancar el kernel y los rootfs que residen en el mismo medio.

El sistema operativo Linux en vivo determina el medio de arranque actual (CD/USB) que se utiliza para arrancar el kernel y los rootfs que residen en el mismo medio.

¿Hay alguna manera de detectar elmedios de arranque actualesusado para arrancar unSistema operativo Linux en vivo? En un sistema operativo activo, me gustaría determinar de forma única el medio de arranque actual (CD/USB) que se ha utilizado para iniciar el disco. Me gustaríadetermine esto en el nivel del sistema operativo, no en el nivel del gestor de arranque.

Medios de arranque actualesen mi caso se refiere a los mediosdonde reside el cargador de arranque que se utilizó para iniciar el sistema operativo.

He inspeccionado lo siguiente, pero ninguno parece tener la información de la ruta de desarrollo del medio de arranque actual (como por ejemplo /dev/sr0, que indica que la ruta de arranque actual es cd)

  • Comprobando el sistemadiarioctlregistros.
  • Comprobacióndmesgregistros.
  • Posibles interfaces enudevyudevadmutilidad.
  • caja ocupada rdevcomo se sugiere enhttp://free-electrons.com/blog/find-root-device/. El procedimiento para comparar la estadística / con la del número de dispositivo mayor:menor de /dev/sr0 no parece coincidir.

También revisé GRUB2,http://git.savannah.gnu.org/cgit/grub.git/tree/grub-core/kern/i386/pc/init.cdonde las variables de entorno de GRUBraízyprefijose establecen. Por ejemplo, en un shell GRUB2 que se inició desde un CD, si escriboeco $raíz, Yo obtengohd31. Ahora, ¿cómo hago una asignación de esto a una ruta de dispositivo de bloque de Linux como/dev/sr0para CD o algunos/dev/sdb1para un pendrive? También reviséLinux: obtenga el nombre del dispositivo del disco de arranque actualyhttps://stackoverflow.com/questions/6787819/how-to-determine-the-booting-devicepero ambos no parecen ayudar.

Lo ideal sería que quisieraevitar el montajecada CD/USB (/dev/sr0 o /dev/sdb1 y similares) para verificar manualmente la presencia de archivos initrd y kernel. Este método no es infalible. ¿Existe alguna forma sencilla de hacer esto?

Respuesta1

Encontré lo siguiente pero no estoy seguro de qué lo configuraría. Quizás el kernel/grub, en cuyo caso debería estar configurado.

"También podría ser la referencia del nodo del dispositivo para el punto de montaje de otro sistema de archivos LiveOS,incluido el que se está ejecutando actualmente (como un Live CD/DVD/USB iniciado, donde /run/initramfs/livedev se vincula al dispositivo LiveOS iniciado). "

De https://www.mankier.com/8/livecd-iso-to-disk

Respuesta2

Al kernel de Linux en sí no le importa desde dónde se carga, y considera que ese es el trabajo del gestor de arranque. Lo ideal sería que el gestor de arranque registrara esta información en algún lugar donde el kernel pueda obtenerla más tarde, lo cual es trivial con el gestor de arranque U-Boot, pero no tanto con BIOS/UEFI x86.

Como resultado, realmente no creo que puedas obtener esta información del propio Linux, aunque el lugar donde reside el sistema de archivos raíz es probablemente desde donde se cargó Linux la mayor parte del tiempo. Es 100% posible cargar el kernel desde un lugar y hacer que el sistema de archivos raíz provenga de otro lugar, lo cual es común en plataformas integradas.

Algunas cosas que puedes probar.

  • cat /proc/cmdlineprobablemente le dirá dónde se cargó el sistema de archivos raíz: el root=parámetro de línea de comando del kernel le indica dónde se le dijo al kernel que encontrara el sistema de archivos raíz cuando se cargó.

  • También puede emitir un mountcomando, buscar el /sistema de archivos y observar su dispositivo.

información relacionada