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
Resposta
Siga estas etapas:
-
Inicialize em uma sessão Live Linux.
-
Monte a partição
/
de seu sistema operacional instalado em/mnt
sudo mount /dev/sda6 /mnt
-
Configure um
chroot
ambiente:sudo chroot /mnt
-
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 ambientechroot
? 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.
sda6
? Minha resposta aqui ajuda?/cow
parece referir-se ao Sistema de arquivos de cópia na gravação que é montado em/
ao inicializar de um CD ou USB