Estoy intentando reinstalar grub desde una unidad USB. Ejecuto lo siguiente :

sudo mount /dev/sda6 /mnt sudo grub-install --root-directory=/mnt /dev/sda 

Recibo el siguiente error:

grub-probe: error: failed to get canonical path of /cow. 

¿Alguien puede explicar el error? y cómo resolverlo?

Editar

Estoy intentando para reparar un sistema de arranque dual roto, que se ejecuta desde un USB que contiene linux mint.

Comentarios

  • OK, esa edición es un paso a la derecha dirección. ¿Debemos asumir que ya tiene instalado un sistema Linux? ¿Arranca desde sda6? ¿Mi respuesta aquí ayuda?
  • FWIW, /cow parece referirse a la Sistema de archivos de copia en escritura que se monta en / al arrancar desde un CD o USB

Responder

Siga estos pasos:

  1. Inicie una sesión de Live Linux.

  2. Monte la partición / de su sistema operativo instalado en /mnt

    sudo mount /dev/sda6 /mnt 
  3. Configure un chroot entorno:

    sudo chroot /mnt 
  4. Ahora se encuentra en una instalación de Linux «falsa» que trata /mnt como / . Esto significa que todos los archivos necesarios para GRUB están en /boot donde el sistema espera que estén y puede instalar GRUB como si realmente estuviera ejecutando su sistema instalado:

    sudo update-grub sudo grub-install /dev/sda 

Ahora reinicie y debería ver que el menú de GRUB aparece normalmente.

Comentarios

  • Yo ‘ estoy intentando instalar desde el dispositivo USB. De todos modos, probé también sin montar – mismo error. ¿Puede explicar el error?
  • @elyashiv, edite su pregunta y explique qué es lo que está intentando. ¿Está intentando rescatar un sistema averiado? ¿Está iniciando un sistema en vivo desde el USB? Si es así, díganos . ¿Qué sistema operativo estás usando? ¿Qué le hace pensar que GRUB tiene una opción root-device y qué espera que haga esa opción? ¿Ha configurado un entorno chroot? Siempre que haga una pregunta, debe explicar exactamente qué es lo que está tratando de hacer, no podemos ‘ adivinar.
  • Ups, quise decir -root -directorio
  • @elyashiv hay ‘ no --root-directory tampoco. Lee mi respuesta aquí que explica cómo reinstalar grub.
  • mira la primera respuesta aquí
  • Responder

    Si grub dice que no pudo resolver la ruta canónica de algo , significa que no existe o realpath() falló.

    En este caso, intente:

    $ realpath /cow $ ls -la /cow 

    Si ambos comandos dicen «no se puede encontrar el archivo o directorio», entonces tienes que crear uno.

    Si el segundo comando funciona, pero el primero no, verifica por qué realpath() no funciona. Una de las razones puede ser que /proc no esté montado. En algunas implementaciones de libc, /proc/self/fd se usa para obtener la ruta canónica de un archivo.

    Comentarios

    • Tengo el primer comando funcionando, pero no el segundo.
    • ME: root @ ubuntu: / # realpath / cow TERMINAL: / cow ME: # ls -la / cow TERMINAL: ls: imposible de acceso ‘ / cow ‘: No hay archivo o carpeta de este tipo (traducido aproximadamente).

    Respuesta

    También obtengo este error y no creo que suceda en un chroot.

    Antecedentes

    Creo que esto es cuando systemd no puede encontrar la ruta porque está montado en un directorio. Entonces, la diferencia es que cuando configuras un chroot, ya configuras el acceso al hardware, incluidas las unidades.

    Aunque puede configurar este acceso dentro de Systemd, lo que no significa que pueda configurar los permisos para esas unidades de la misma manera.

    Por ejemplo, creé este archivo:

    /etc/systemd/system/[email protected]/override.conf 

    Y contiene s estas configuraciones:

    [Service] DeviceAllow=char-usb_device rwm DeviceAllow=char-usb [Files] Bind=/var/cache/apt/pkgcache.bin Bind=/var/cache/apt/srcpkgcache.bin 

    Esto todavía no funciona cuando se usa grub-install /dev/sda o update-grub para un USB en Pi debootstrapped con Debian Stretch. Incluso usando grub-uboot y grub-efi-arm, todavía existe ese error: grub-probe no puede encontrar la ruta canónica.

    No solo eso, aunque update-grub verá y sabrá cuáles son los sistemas operativos, pero curiosamente grub-install no reconocer que el sistema operativo Debian está en USB.

    Ejemplo

    root@raspixmc:/home/pi# grub-install /dev/sda Installing for arm-uboot platform. grub-install: warning: no hints available for your platform. Expect reduced performance. grub-install: warning: WARNING: no platform-specific install was performed. Installation finished. No error reported. root@raspixmc:/home/pi# 

    Interesante, cuando creo un chroot y puedo ejecutar update-grub, a pesar de que estoy en el sistema operativo que debootstrapeado al USB mismo, ¡no ve su propio sistema operativo!

    root@raspixmc:/home/pi# mount /dev/sda1 /mnt root@raspixmc:/home/pi# cd /mnt root@raspixmc:/mnt# mount --bind /dev dev/ root@raspixmc:/mnt# mount --bind /sys sys/ root@raspixmc:/mnt# mount --bind /proc proc/ root@raspixmc:/mnt# mount --bind /dev/pts dev/pts root@raspixmc:/mnt# chroot . bin/bash root@raspixmc:/# update-grub Generating grub configuration file ... Found Raspbian GNU/Linux 9 (stretch) on /dev/mmcblk0p2 done root@raspixmc:/# 

    Solo ve Raspbian. Esto sucede solo cuando intento instalar y actualizar GRUB dentro del contenedor, pero cuando salgo del chroot.

    Mira cómo funciona ahora porque no desmonté los directorios chroot:

    /dev dev/ /sys sys/ /proc proc/ /dev/pts dev/pts 

    Desde fuera del contenedor, fíjate, estoy ejecutando este comando con grub-uboot instalado en Raspbian y sin Grub en el USB que contiene Debian debootstrapped.

    root@raspixmc:/mnt# update-grub Generating grub configuration file ... Found Raspbian GNU/Linux 9 (stretch) on /dev/mmcblk0p2 Found Debian GNU/Linux 9 (stretch) on /dev/sda1 done root@raspixmc:/mnt# 

    Esto no suceden usando una de las imágenes disponibles no oficialmente para Debian ARM , pero obviamente esta es una personalización que aún no está disponible para debootstrapping.

    Solución de problemas

    Realmente hay ocasiones en las que es mejor crear una ruta. La única posibilidad siguiente (y probable) es simplemente escribir GRUB. Y para eso solo voy a leer en esta página.

    https://www.dedoimedo.com/computers/grub-2.html

    Otra cosa que quiero compartir sobre este problema es una solución que podría funcionar, pero tenga en cuenta que las tarjetas microSD son muy sensibles. He estado construyendo mis propias imágenes de Linux y aprendí esto rápido. Lo mejor que puede hacer es usar Qemu siempre que pueda, pero para intentar borrar una tabla de particiones antigua, puede intentar ejecutar sgdisk --zap-all en la unidad.

    sgdisk --zap-all /dev/sdd 

    De hecho, a veces si da un error la primera vez y es no un error de solo lectura, puede ejecutarlo nuevamente y finalmente todas las tablas de particiones serán nuevas o antiguas.

    Y puede usar Qemu para emular Raspberry Pi en una PC estándar basada en AMD / Intel. Yo lo recomendaría. Sé que esto es más información de la que pertenece a la publicación original, pero creo que es probable que se derive este error. Es la edad del contenedor.

    Respuesta

    Según lo que se escribió, parece que está intentando instalar GRUB en / dev / sda. No desea montar el disco.

    Probablemente esté buscando: grub-install /dev/sda

    Página de manual de GRUB como referencia, o puede man grub-install desde su sistema: http://linux.die.net/man/8/grub-install

    Comentarios

    • Ya escribí el comando grub-install (en dev.sda1), pero tuve un error al hablar de bloques. Y recibí el error » vaca » con el » grub-install –recheck –root-directory = / mnt / dev / sda1 » comando.

    Responder

    Para cualquiera que esté luchando con esto y que esté intentando usar un USB en vivo u otro medio de chroot para reinstalar o instalar grub, he tratado esto varias veces y olvidé documentarlo antes, aunque tenía la intención de hacerlo. .

    El problema al que se enfrenta es que grub no tiene acceso a la ruta a la que se refiere ni como fuente (/ boot) ni como destino (¿pueden su sistema y chroot ver /dev/sda por ejemplo?) o ambos. Cuando se prepara para chroot, crea montajes de enlace que son accesibles en el entorno chroot, o lo hace dentro del chroot usando mount -t. Hay tantas guías en línea que lo hacen de cualquier manera.

    Debe asegurarse de vincular / dev o solo las particiones específicas que contienen los archivos de arranque en / boot (por ejemplo, / dev / sda1) . / boot es una partición separada o un directorio en / El chroot necesita acceso a la unidad en la que (re) instalará grub, así que haga fdisk -l en el chroot para asegurarse de que puede ver el dispositivo en la lista de resultados. También tenga en cuenta que si no tiene una partición de inicio separada, pero tiene un directorio de inicio en / root con los archivos de inicio (no solo un punto de montaje), entonces solo tiene que montar la partición que contiene la raíz. No tiene que montar nada en / root / boot.

    También necesita asegurarse de vincular el sistema de archivos proc y el sistema de archivos sys, pero cada guía que he visto tiene esos dos. Acabo de ver / dev se perdió algunas veces. Puede haber algunos casos en los que no lo necesite, pero no los conozco.

    tl; dr: asegúrese de enlazar mount / dev

    Comentarios

    • ¿Por qué estás hablando de chroot cuando la pregunta no es ‘ t sobre« chroot ?
    • El OP dice » ejecutándose desde un USB que contiene linux mint «. Eso será un chroot.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *