Estou tentando reinstalar o grub a partir de uma unidade USB. Execute o seguinte :

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

Recebo o seguinte erro:

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

Alguém pode explicar o erro e como resolvê-lo?

Edite

Estou tentando para reparar um sistema de inicialização dupla quebrado, rodando de um USB contendo linux mint.

Comentários

  • OK, essa edição é um passo à direita direção. Devemos presumir que você já tem um sistema Linux instalado? Ele inicializa de sda6? Minha resposta aqui ajuda?
  • FWIW, /cow parece referir-se ao Sistema de arquivos de cópia na gravação que é montado em / ao inicializar de um CD ou USB

Resposta

Siga estas etapas:

  1. Inicialize em uma sessão Live Linux.

  2. Monte a partição / de seu sistema operacional instalado em /mnt

    sudo mount /dev/sda6 /mnt 
  3. Configure um chroot ambiente:

    sudo chroot /mnt 
  4. Agora você está em uma instalação “falsa” do Linux que trata /mnt como / . Isso significa que todos os arquivos necessários para o GRUB estão em /boot onde o sistema espera que eles estejam e você pode instalar o GRUB como se estivesse realmente executando o sistema instalado:

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

Agora, reinicie e você verá o menu GRUB aparecer normalmente.

Comentários

  • Eu ‘ estou tentando instalar a partir do dispositivo usb. de qualquer forma, tentei também sem montar – mesmo erro. você pode explicar o erro?
  • @elyashiv edite sua pergunta e explique o que você está tentando fazer. Você está tentando resgatar um sistema quebrado? Você está inicializando um sistema live a partir do USB? Se sim, diga-nos . Qual sistema operacional você está usando? O que o faz pensar que o GRUB tem uma opção root-device e o que você espera que essa opção faça? Você configurou um ambiente chroot? Sempre que você faz uma pergunta, precisa explicar exatamente o que está tentando fazer, não podemos ‘ adivinhar.
  • opa, quis dizer -root -diretório
  • @elyashiv lá ‘ não --root-directory também. Vá ler minha resposta aqui que explica como reinstalar o grub.
  • veja a primeira resposta aqui

Resposta

Se grub disser que não conseguiu resolver o caminho canônico de algo , significa que não existe ou realpath() falhou.

Nesse caso, tente:

$ realpath /cow $ ls -la /cow 

Se ambos os comandos disserem “não é possível encontrar o arquivo ou diretório”, você deve criar um.

Se o segundo comando funcionar, mas o primeiro não, verifique por que realpath() não funciona. Um dos motivos pode ser que /proc não está montado. Em algumas implementações de libc, /proc/self/fd é usado para obter o caminho canônico de um arquivo.

Comentários

  • Eu tenho o primeiro comando funcionando, mas não o segundo.
  • ME: root @ ubuntu: / # realpath / cow TERMINAL: / cow ME: # ls -la / cow TERMINAL: ls: impossível acessar ‘ / cow ‘: Nenhum arquivo ou pasta deste tipo (traduzido aproximadamente).

Resposta

Também recebo esse erro e não acho que isso aconteça em um chroot.

Histórico

Acho que é quando o systemd não consegue encontrar o caminho porque está montado em um diretório. Portanto, a diferença é quando você configura um chroot, você já configura o acesso ao hardware, incluindo os drives.

Embora você pode configurar este acesso dentro do Systemd, o que não significa que você pode configurar permissões para essas unidades da mesma maneira.

Por exemplo, eu criei este arquivo:

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

E contém s estas configurações:

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

Isso ainda não funciona ao usar grub-install /dev/sda ou update-grub para USB em Pi desbootstrapped com Debian Stretch. Mesmo usando grub-uboot e grub-efi-arm, ainda há aquele erro que grub-probe não consegue encontrar o caminho canônico.

Não apenas isso, embora update-grub veja e saiba quais são os sistemas operacionais, mas curiosamente grub-install não reconhecer que o sistema operacional Debian está em USB.

Exemplo

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# 

Interessante, quando eu crio um chroot e posso executar update-grub, embora eu esteja no sistema operacional que desinicializei no próprio USB, ele não vê seu próprio sistema operacional!

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:/# 

Ele só vê Raspbian. Isso acontece apenas ao tentar instalar e atualizar o GRUB dentro do contêiner, mas quando eu saio do chroot.

Veja como funciona agora porque eu não desmontei os diretórios chroot:

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

De fora do contêiner, lembre-se, estou executando este comando com grub-uboot instalado no Raspbian e sem Grub no USB contendo 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# 

Isso não acontecer usando uma das imagens não oficialmente disponíveis para o Debian ARM , mas obviamente esta ainda é uma personalização ainda não disponível para debootstrapping.

Solução de problemas

Realmente, há momentos em que é melhor apenas criar um caminho. A única próxima possibilidade (e provável) é simplesmente escrever o GRUB. E para isso vou apenas ler nesta página.

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

Outra coisa que quero compartilhar sobre esse problema é uma solução que pode funcionar, mas percebo que os cartões microSD são muito sensíveis. Tenho construído minhas próprias imagens do Linux e aprendi isso rápido. A melhor coisa a fazer é usar o Qemu sempre que puder, mas para tentar limpar uma tabela de partição antiga, você pode tentar executar sgdisk --zap-all na unidade.

sgdisk --zap-all /dev/sdd 

Na verdade, às vezes, se der um erro na primeira vez e não um erro somente leitura, você pode executá-lo novamente e ele finalmente exibirá todas as tabelas de partição novas ou antigas.

E você pode usar o Qemu para emular o Framboesa Pi em um PC padrão baseado em AMD / Intel. Eu recomendaria. Eu sei que isso é mais informação do que a postagem original, mas acho que é provavelmente como esse erro é derivado. É a idade do contêiner.

Resposta

Com base no que foi escrito, parece que você está tentando instalar o GRUB para / dev / sda. Você não deseja montar o disco.

Você provavelmente está procurando por: grub-install /dev/sda

Página do manual do GRUB para referência ou você pode man grub-install em seu sistema: http://linux.die.net/man/8/grub-install

Comentários

  • Já digitei o comando grub-install (em dev.sda1), mas tive um erro ao falar sobre blocos. E recebi o erro ” cow ” com o ” grub-install –recheck comando –root-directory = / mnt / dev / sda1 “.

Resposta

Para qualquer pessoa que esteja lutando contra isso e tentando usar um USB ativo ou outro meio de chroot para reinstalar ou instalar o grub – já lidei com isso algumas vezes e esqueci de documentá-lo antes, embora tivesse a intenção de .

O problema que você enfrenta é que o grub não tem acesso ao caminho ao qual você está se referindo como fonte (/ boot) ou destino (seu sistema e chroot podem ver /dev/sda por exemplo?) ou ambos. Quando você se prepara para fazer o chroot, cria montagens de bind que são acessíveis no ambiente chroot, ou faz isso dentro do chroot usando mount -t. Existem tantos guias online que fazem isso de qualquer maneira.

Você precisa se certificar de vincular / dev ou apenas a (s) partição (ões) específica (s) contendo os arquivos de inicialização em / boot (por exemplo, / dev / sda1) . / boot é uma partição separada ou um diretório em / O chroot precisa acessar a unidade que você irá (re) instalar o grub para fazer fdisk -l no chroot para ter certeza de que pode ver o dispositivo listado na saída. Observe também que se você não tem uma partição de boot separada, mas tem um diretório de boot em / root com os arquivos de boot (não apenas um ponto de montagem), então você só precisa montar a partição que contém o root. não preciso montar nada em / root / boot.

Você também precisa ter certeza de vincular o sistema de arquivos proc e o sistema de arquivos sys, mas todo guia que eu vi tem esses dois. Eu acabei de ver / dev perdeu algumas vezes. Pode haver alguns casos em que você não precisa, mas eu não os conheço.

tl; dr: certifique-se de vincular mount / dev

Comentários

  • Por que você está falando sobre chroot quando a pergunta não é ‘ sobre“ chroot“?
  • O OP diz ” rodando de um USB contendo linux mint “. Isso será um chroot.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *