¿Cómo puedo saber desde qué partición había arrancado?

12

Tengo una máquina que tiene particiones de arranque múltiple. Tengo Ubuntu 14.04 en una partición, Ubuntu 15.04 en la segunda y Ubuntu 16.04 en una tercera. ¿Hay alguna manera de saber, desde la línea de comandos, desde qué partición había arrancado, para encontrar en qué partición /boot/grub/grub.cfgse utilizó el proceso de arranque? Tengo /boot/grub/grub.cfg en cada una de las tres particiones.

Kevin Wilson
fuente
3
No se puede hacer eso con absoluta generalidad y confiabilidad. Por lo que sabe, el /boot/grub/grub.cfgarchivo utilizado para el arranque podría haberse eliminado, esa partición podría haberse eliminado de la tabla de particiones y ese disco eliminado físicamente del sistema.
Federico Poloni

Respuestas:

10

Una vez que GRUB ha entregado el arranque al kernel, el kernel no tiene idea de qué lo inició y /bootpodría no ser el que utilizó GRUB. Puede verificar los tiempos de acceso de boot/grub/grub.cfgcada una de las particiones para ver a cuál se accedió más recientemente. Eso podría decirle qué archivo de configuración de partición utilizó GRUB.

stat -c %x /boot/grub/grub.cfg

Si los tiempos de acceso no se actualizan, deberá buscar cualquier diferencia en los parámetros del núcleo utilizados por los diversos archivos de configuración de GRUB. Si puede cambiarlos, por ejemplo, agregar foo=1, foo=2etc. a GRUB_CMDLINE_LINUXcada uno de estos, ejecutar sudo update-grub2y reiniciar, puede verificar /proc/cmdlinepara ver cuáles de estos valores se usaron.

muru
fuente
¡interesante! ¿eso significa que mi solución también tiene una mejor tasa de precisión que la de Ravexina y Katu?
tatsu
@tatsu IMO todas las otras respuestas son incorrectas: Ravexina está ubicando la partición donde /bootse encuentra, pero eso podría no ser lo que usó grub, y usted y Katu están encontrando que la partición montada /está montada, pero, como señaló Ravexina, eso probablemente tiene incluso menos conexión
muru
1
sí, pero ¿cómo puede el desmontaje hacer algo más que fallar en la partición en la que está montado? los discos entregan información tal como el dispositivo, la dirección montada, cualquier información de identificación que pueda necesitar sobre cuál acaba de intentar desmontar. Soy el primero en admitir que mi solución es fea, pero tiene una tasa de éxito del 100%, ¿verdad?
tatsu
1
@tatsu tasa de éxito para qué? Encontrar la partición montada /, seguro. ¿Encontrar qué configuración de GRUB de la partición se usó durante el arranque? No veo cómo se relaciona eso.
muru
44
¿Realmente grub establece esa marca de tiempo de acceso, dado que es su propio DOS y no está sujeto a las convenciones del controlador del sistema de archivos de Linux?
rackandboneman
4

Como sabe, el archivo que está buscando se encuentra en el /bootdirectorio de su sistema en ejecución. o /bootes una partición separada o no lo es; Si su /bootes una partición separada, debe buscar eso:

$ lsblk -r | grep '/boot'
sda2 8:1 0 400M 0 part /boot

Significa grub.cfgque el que se ha utilizado se encuentra en sda2.

De lo contrario, debe buscar root:

$ lsblk -r | grep '/$'
sda1 8:1 0 121.2G 0 part /

esta vez se encuentra ubicado en sda1.

O incluso por diversión , podemos verificar los parámetros de tiempo de arranque:

$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-686-pae root=UUID=938495-1fe2-3302 ro quiet

luego use UUIDpara averiguar qué partición es su raíz.

$ sudo blkid | grep 938495-1fe2-3302
/dev/sda1: UUID="938495-1fe2-3302"

Lo que significa de sda1.

También puede verificar estos parámetros de inicio para ver cuál de sus grub.cfgarchivos los contiene, esto solo funciona cuando sus parámetros de inicio grub.cfgson diferentes entre sí.

Ravexina
fuente
2
Sería una manera más fácil (que no requiere privilegios de superusuario) para encontrar el nodo del dispositivo detrás de un UUID del sistema de archivos readlink -f /dev/disk/by-uuid/<UUID>.
David Foerster
3

Para mostrar el dispositivo que contiene el sistema de archivos raíz montado actualmente:

awk '$2=="/"{print $1}' /proc/mounts

Para mostrar la versión de lanzamiento de Ubuntu actualmente en ejecución:

lsb_release -rs
David Foerster
fuente
eso realmente tiene mucho sentido con respecto a la pregunta y parece ser la respuesta más adecuada hasta ahora. Apuesto a que no hay dos distribuciones en su configuración que tengan el mismo número de versión que usará siempre lsb_release -rs. KISS
tatsu
Por desgracia, esto no funciona. Probé su comando en mi máquina con múltiples sistemas operativos, solo mi "maestro" -SO tiene grub instalado en MBR, otros sistemas operativos tienen Grub instalado en el PBR, el comando parece mostrar la ubicación donde el sistema operativo tiene Grub instalado, pero no mostrar desde qué OS Grub carga el archivo de configuración.
mook765
@ mook765: Mi respuesta no tiene absolutamente nada que ver con Grub o MBR (o cualquier cargador de arranque o tipo de tabla de particiones realmente). No estoy seguro de lo que probaste exactamente y de lo que esperabas ver.
David Foerster
Entonces esta respuesta no tiene nada que ver con la pregunta ...
mook765
@ mook765: Si lo tomas literalmente, entonces sí. Sin embargo, para mí, parece que OP quiere saber cuál de sus múltiples instalaciones de Ubuntu está actualmente iniciada y para eso mi respuesta debería estar bien.
David Foerster
2

Podríamos agregar una entrada de menú personalizada simple en cada sistema operativo y veríamos en el menú Grub desde el cual OS Grub cargó su archivo de configuración.

Ejemplo:

Arrancamos en 16.04 y editamos el archivo /etc/grub.d/40_custompara agregar una entrada de menú.

#! / bin / sh
ejecutivo exe -n +3 $ 0
# Este archivo proporciona una manera fácil de agregar entradas de menú personalizadas. Simplemente escriba el
# entradas de menú que desea agregar después de este comentario. Ten cuidado de no cambiar
# la línea de 'cola ejecutiva' arriba.
# #

menuentry 'grub.conf cargado desde 16.04' {        
            reiniciar  
    }

Nos aseguramos de que el archivo sea ejecutable y se ejecute sudo update-grub.

Luego hacemos los mismos cambios en los otros sistemas operativos, solo usamos diferentes nombres para el menuentry, ig cambiamos 16.04a 15.04y así sucesivamente.

Si seleccionamos esta entrada de menú en el menú Grub durante el arranque, la máquina simplemente se reiniciará, los creamos no para arrancar ningún sistema operativo, sino para ver qué sistema operativo se usa realmente para cargar grub.conf.

Información Adicional

Este tipo de confusión aparece cuando instalamos múltiples sistemas operativos que utilizan Grub y durante la instalación de un sistema operativo elegimos la misma ubicación del cargador de arranque. De hecho, solo necesitamos un sistema operativo que instale Grub, Grub puede arrancar en cualquier distribución de Linux, por lo que si tenemos una distribución instalada (incluida Grub), podríamos instalar sistemas operativos adicionales sin instalar Grub.

En las instalaciones heredadas, es bastante fácil manejar la ubicación para la instalación del cargador de arranque, ya que podemos elegir el registro de arranque de la partición como ubicación, pero debemos tener cuidado de elegir la partición correcta. Entonces, un sistema operativo instala el cargador de arranque en el MBR y los sistemas operativos adicionales instalan el cargador de arranque en el PBR de la partición del sistema operativo. Esta posibilidad solo la tenemos cuando usamos la Something elseopción durante la instalación.

En las instalaciones de UEFI es un poco más extraño, el gestor de arranque se instalará en una carpeta en la partición del sistema EFI (ESP) y pueden coexistir fácilmente varios gestores de arranque. El problema aquí es que todos los sabores de Ubuntu y también algunas otras distribuciones de Linux instalarán Grub en la misma carpeta en el ESP y no tenemos otra opción. Por lo tanto, la instalación de una distribución de Linux adicional sobrescribiría nuestro cargador de arranque ya existente. La única forma en que sé evitar esto es iniciar una sesión en vivo e iniciar el instalador con sudo ubiquity -b.

Otra solucion simple

Supongamos que tenemos tres distribuciones de Linux instaladas en las particiones sda1, sda2y sda3. Ahora echamos un vistazo a las entradas del menú de arranque de Grub. Durante el arranque, veremos algo como esto:

1 Ubuntu
2 opciones avanzadas para Ubuntu
3 Prueba de memoria (memtest86 +)
4 Prueba de memoria (memtest86 +, consola serie 115200)
5 Ubuntu (en / dev / sda2)
6 Opciones avanzadas para Ubuntu (en / dev / sda2)
7 Ubuntu 17.04 (en / dev / sda3)
8 Opciones avanzadas para Ubuntu (en / dev / sda3)

Las dos primeras entradas son las entradas para el sistema operativo que generó el grub.confarchivo que realmente utilizamos. Las entradas # 3 y # 4 no son interesantes en este momento. Las entradas n. ° 5, n. ° 6, n. ° 7 y n. ° 8 son las entradas que se generaron con OS-prober y vemos en qué particiones residen los sistemas operativos para estas entradas. Entonces, en el caso de este pequeño ejemplo, podemos concluir que el grub.configarchivo que realmente utilizamos no pertenece al sistema operativo activado sda2o sda3sí al sistema operativo activado sda1. En el caso de que uno o más sistemas operativos estén instalados con una /bootpartición separada, tendríamos que verificar qué /bootparte pertenece a qué sistema operativo, pero eso se hace fácilmente ejecutando el findmntcomando en cada sistema operativo.

mook765
fuente
+1 A pesar de ser largo, esta respuesta en realidad incluye puntos relevantes. Para los sistemas BIOS, los usuarios que realizan arranque múltiple deberían preferir "Algo más" en el instalador para tener más control; No es necesario forzar "no instalar el cargador de arranque GRUB" (ver mi respuesta anterior ). Para los sistemas UEFI, la configuración de arranque múltiple parece ser muy inexplicable o no probada.
clearkimura
1
lsblk

Y verifique en qué disco está montado /. Lea los comentarios a continuación o la respuesta de Ravexina si tiene /booten sus puntos montados.

Si no está seguro, verifique el UUID

lsblk -o UUID,NAME,SIZE,MOUNTPOINT
Katu
fuente
2
No es cierto, ¿qué /bootpasa si mi es una partición separada? entonces /boot/grub/grub.cfgno se encuentra en la /partición.
Ravexina
@Ravexina Ponte técnico, eso podría ser cierto. Sin embargo, para los propósitos de este usuario, ¿no cuenta la /partición?
@ MarkYisri Supongo que debería decir que no siempre es cierto, sin embargo, el OP nos dice que obtuvo el archivo en tres particiones diferentes, así que supongo que es mejor verificar /bootprimero por separado .
Ravexina
1
Gracias por señalar eso @Ravexina He actualizado la respuesta.
Katu
0

Para saber desde qué partición se inició el usuario, mire el menú del cargador de inicio antes de iniciar cualquiera de los sistemas instalados. Es difícil saberlo sin ver el menú del cargador de arranque.

Donde mirar

En las siguientes capturas de pantalla combinadas, he etiquetado tres pistas que uno podría saber de qué partición había arrancado el usuario.

Menú de arranque múltiple usando la versión de PC / BIOS de GNU GRUB con anotación

Etiqueta (1): entradas del menú GNU GRUB debajo de la primera entrada

Etiqueta (2): versión de GNU GRUB en la parte superior del menú del gestor de arranque

Etiqueta (3): imagen de fondo de GNU GRUB (requiere configuración manual)

La pista más aparente es la etiqueta (3), que es cambiar la imagen de fondo de GNU GRUB en el sistema que tiene control del menú del cargador de arranque. Es el más fácil de saber, siempre que el usuario lo haya configurado de antemano.

Etiqueta (1) explicada

Busque la partición que no aparece en las entradas del menú debajo de la primera entrada. En la captura de pantalla, solo se instalan dos sistemas operativos, es decir, "Ubuntu" y "Ubuntu 14.04.5 LTS".

Ubuntu
Advanced options for Ubuntu
Memory test (memtest86+)
Memory test (memtest86+, serial console 115200)
Ubuntu 14.04.5 LTS (14.04) (on /dev/sda3)
Advanced options for Ubuntu 14.04.5 LTS (14.04) (on /dev/sda3)

Este último ha mencionado (on /dev/sda3), lo que significa que el primero podría estar ubicado en /dev/sda2o /dev/sda1. Para estar seguro, después de iniciar el sistema, es decir, "Ubuntu", ejecute el comando correspondiente para enumerar las particiones disponibles ( lsblkparece ser lo más sencillo).

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0    13G  0 disk 
├─sda1   8:1    0   976M  0 part [SWAP]
├─sda2   8:2    0     6G  0 part /
└─sda3   8:3    0     6G  0 part 
sr0     11:0    1  55.7M  0 rom 

Solo después de comparar con la salida de lsblk, entonces sabemos que el sistema, es decir, "Ubuntu" se encuentra en /dev/sda2(que no figuraba en las entradas del menú) desde el que se gestiona el menú del cargador de arranque.

Etiqueta (2) explicada

Busque la versión GRUB que está impresa en la parte superior del menú del cargador de arranque. Tenga en cuenta esa versión y compárela con la versión de GRUB que se encuentra en el sistema arrancado, es decir, "Ubuntu".

En la captura de pantalla (mitad inferior): GNU GRUB version 2.02~beta2-9

Después de arrancar el sistema, es decir, "Ubuntu", ejecute el comando correspondiente para verificar la versión del paquete GRUB ( grub-install --versiones relevante y más directo).

$ grub-install --version
grub-install (GRUB) 2.02~beta2-9

¿Cómo es esto relevante? Porque grub-instally los update-grubcomandos son proporcionados por el mismo paquete grub2-common. Dado que el menú del cargador de arranque se crea y actualiza utilizando herramientas del mismo paquete, la versión impresa en la parte superior del menú del cargador de arranque será la misma.

Etiqueta (3) explicada

Esta sugerencia requiere que se configure manualmente, ya que la imagen de fondo predeterminada del menú del cargador de arranque es ninguna (solo negro). La imagen de fondo debe tener una profundidad de 8 bits.

Si el desktop-basepaquete está instalado en su sistema, las imágenes de fondo hechas especialmente para GRUB se encuentran fácilmente con el sufijo del nombre de archivo *grub.pngen el directorio de destino.

$ ls /usr/share/images/desktop-base/*grub.png
/usr/share/images/desktop-base/desktop-grub.png
/usr/share/images/desktop-base/joy-grub.png
/usr/share/images/desktop-base/moreblue-orbit-grub.png
/usr/share/images/desktop-base/spacefun-grub.png

Para configurar la imagen de fondo:

  1. Abra el /etc/default/grubarchivo como superusuario, luego agregue la línea GRUB_BACKGROUND=con la ruta completa a la imagen elegida y citada.

    $ sudo nano /etc/default/grub 
    ...
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    GRUB_CMDLINE_LINUX=""
    
    # Show background in GRUB boot menu
    GRUB_BACKGROUND="/usr/share/images/desktop-base/spacefun-grub.png"
    ...
    
  2. Luego, ejecute la sudo update-grubactualización /boot/grub/grub.cfgque incluye el menú del cargador de arranque. El usuario verá una salida similar a la siguiente.

    $ sudo update-grub
    Generating grub configuration file ...
    Found background: /usr/share/images/desktop-base/spacefun-grub.png
    Found background image: /usr/share/images/desktop-base/spacefun-grub.png
    Found linux image: /boot/vmlinuz-3.13.0-24-generic
    Found initrd image: /boot/initrd.img-3.13.0-24-generic
    Found memtest86+ image: /boot/memtest86+.elf
    Found memtest86+ image: /boot/memtest86+.bin
    Found Ubuntu 14.04.5 LTS (14.04) on /dev/sda3
    done
    
  3. Reinicie la máquina y vea si el menú del cargador de arranque tenía cambios visibles realizados por el comando de actualización del sistema.

De lo contrario, repita los pasos para otros sistemas, uno a la vez. Los pasos repetidos habrían sido innecesarios si el usuario supiera qué sistema tenía control sobre el menú del cargador de arranque (nuevamente, esto depende de cómo se realizó la instalación).

Descargo de responsabilidad

Esta respuesta explica los criterios probados y comprobados para el sistema BIOS con configuración de arranque múltiple usando la versión de PC / BIOS GNU GRUB. Se aplicarán las siguientes excepciones.

  • Para UEFI contraparte del sistema utilizando la versión de GNU GRUB EFI, se no garantiza o no sabe si aparecerían los criterios a ser el mismo que el descrito anteriormente.

  • Se enfatiza el aspecto del menú del cargador de arranque (cómo puede parecer diferente, es decir, la mitad superior de la captura de pantalla) en lugar de demostrar cómo funciona la carga en cadena. Como tal, con respecto a "cómo se configuró el arranque múltiple como se ve en la captura de pantalla" no se explicaría en esta respuesta.

  • Si la configuración de arranque múltiple se realiza con las mismas copias de un sistema operativo similar, es decir, Ubuntu 14.04, Kubuntu 14.04, Xubuntu 14.04, etc., entonces la única forma confiable de saber desde qué partición arrancó el usuario es la etiqueta (3).

  • La etiqueta (3) podría funcionar mejor utilizando una imagen de fondo personalizada que escriba explícitamente desde la que se inicia, es decir, "Este menú de inicio se gestiona desde / dev / sda1". Del mismo modo, con respecto a "cómo crear una imagen de fondo personalizada para GRUB" no se explicaría en esta respuesta.

TL; DR Mire el menú del cargador de arranque antes de arrancar cualquiera de los sistemas instalados. La forma más fácil y confiable de conocer es la etiqueta (3), que es configurar manualmente la imagen de fondo de GRUB.

clearkimura
fuente