Jag försöker återinstallera grub från en USB-enhet. Jag kör följande :
sudo mount /dev/sda6 /mnt sudo grub-install --root-directory=/mnt /dev/sda
Jag får följande fel:
grub-probe: error: failed to get canonical path of /cow.
kan någon förklara felet , och hur man löser det?
Redigera
Jag försöker för att reparera ett trasigt dual-boot-system, som körs från en USB som innehåller Linux-mynta.
Kommentarer
Svar
Följ dessa steg:
-
Starta upp i en Live Linux-session.
-
Montera
/
-partitionen på ditt installerade operativsystem till/mnt
sudo mount /dev/sda6 /mnt
-
Ställ in en
chroot
-miljö:sudo chroot /mnt
-
Du befinner dig nu i en ”falsk” Linux-installation som behandlar
/mnt
som/
. Det betyder att alla filer som är nödvändiga för GRUB finns i/boot
där systemet förväntar sig att de ska vara och du kan installera GRUB precis som om du faktiskt körde ditt installerade system:sudo update-grub sudo grub-install /dev/sda
Starta om och du ska se att GRUB-menyn visas normalt.
Kommentarer
- Jag ’ jag försöker installera från USB-enheten. på något sätt försökte jag också utan montering – samma fel. kan du förklara felet?
- @elyashiv snälla redigera din fråga och förklara vad du försöker. Försöker du rädda ett trasigt system? Startar du ett live-system från USB? I så fall berätta för oss . Vilket operativsystem använder du? Vad får dig att tro att GRUB har ett
root-device
-alternativ och vad förväntar du dig att alternativet ska göra? Har du skapat enchroot
-miljö? När du ställer en fråga måste du förklara exakt vad du försöker göra, vi kan ’ gissa. - oops, jag menade -root -katalog
- @elyashiv där ’ s inte
--root-directory
heller. Läs mitt svar här som förklarar hur du installerar om grub. - titta på det första svaret här
Svar
Om grub säger att det inte kunde lösa kanonisk väg för något betyder det att den inte finns eller realpath()
misslyckades.
I det här fallet, försök:
$ realpath /cow $ ls -la /cow
Om båda kommandona säger ”kan inte hitta fil eller katalog” måste du skapa en.
Om det andra kommandot fungerar, men det första inte, kontrollera varför realpath()
fungerar inte. En av anledningarna kan vara att /proc
inte är monterad. I vissa implementeringar av libc används /proc/self/fd
för att få en kanonisk sökväg till en fil.
Kommentarer
- Jag har det första kommandot som fungerar, men inte det andra.
- ME: root @ ubuntu: / # realpath / cow TERMINAL: / cow ME: # ls -la / cow TERMINAL: ls: omöjligt att åtkomst ’ / ko ’: Ingen fil eller mapp av detta slag (grovt översatt).
Svar
Jag får också det här felet och jag tror inte att det händer i en chroot.
Bakgrund
Jag tror att det här är när systemd inte hittar sökvägen eftersom den är monterad i en katalog. Så skillnaden är när du ställer in en chroot du redan konfigurerar åtkomst till hårdvara, inklusive enheter.
Även du kan konfigurera den här åtkomsten inuti Systemd som inte betyder att du kan konfigurera behörigheter för dessa enheter på samma sätt.
Till exempel skapade jag den här filen:
/etc/systemd/system/[email protected]/override.conf
Och den innehåller s dessa inställningar:
[Service] DeviceAllow=char-usb_device rwm DeviceAllow=char-usb [Files] Bind=/var/cache/apt/pkgcache.bin Bind=/var/cache/apt/srcpkgcache.bin
Detta fungerar fortfarande inte när du använder grub-install /dev/sda
eller update-grub
för en USB på Pi debootstrapped med Debian Stretch. Även med hjälp av grub-uboot och grub-efi-arm finns det fortfarande det felet grub-probe
kan inte hitta den kanoniska vägen.
Inte bara det men även om update-grub
kommer att se och veta vad operativsystem är, men intressant grub-install
inte känna igen att Debian-operativsystemet är på USB.
Exempel
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#
Intressant när jag skapar en chroot och kan köra update-grub
, även om jag är på det operativsystem som jag debootstrapped till USB själv ser det inte sitt eget operativsystem!
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:/#
Det ser bara Raspbian. Detta händer bara när du försöker installera och uppdatera GRUB inuti behållaren, men när jag lämnar chroot.
Se hur det nu fungerar eftersom jag inte avmonterade chroot-katalogerna:
/dev dev/ /sys sys/ /proc proc/ /dev/pts dev/pts
Utanför behållaren kom ihåg, jag kör det här kommandot med grub-uboot
installerat på Raspbian och ingen Grub på USB-enheten som innehåller Debootstrastrapped Debian.
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#
Detta fungerar inte hända med en av inofficiellt tillgängliga bilder för Debian ARM , men det är uppenbarligen fortfarande en anpassning som ännu inte är tillgänglig för debootstrapping.
Felsökning
Det finns verkligen tider när det är bättre att bara skapa en sökväg. Den enda nästa möjligheten (och en sannolik) är att helt enkelt skriva GRUB. Och för det ska jag bara läsa på den här sidan.
https://www.dedoimedo.com/computers/grub-2.html
En annan sak som jag vill dela med mig av den här frågan är en lösning som kan fungera, men inser att microSD-kort är mycket känsliga. Jag har byggt mina egna Linux-bilder och lärt mig detta snabbt. Det bästa du kan göra är att använda Qemu när du kan, men för att försöka rensa en gammal partitionstabell kan du försöka köra sgdisk --zap-all
på enheten.
sgdisk --zap-all /dev/sdd
Faktiskt, ibland om det ger ett fel första gången och det är inte ett skrivskyddat fel, du kan köra det igen och slutligen kommer alla partitionstabellerna att vara nya eller gamla.
Och du kan använda Qemu för att emulera hallon Pi på en vanlig AMD / Intel-baserad dator. Jag skulle rekommendera det. Jag vet att detta är mer information än det ursprungliga inlägget, men jag tror att det är troligt hur detta fel härrör. Det är containeråldern.
Svar
Baserat på vad som skrevs, ser det ut som om du försöker installera GRUB till / dev / sda. Du vill inte montera skivan.
Du letar troligen efter: grub-install /dev/sda
GRUB mansida som referens, eller så kan du man grub-install
från ditt system: http://linux.die.net/man/8/grub-install
Kommentarer
- Jag skrev redan kommandot grub-install (på dev.sda1), men jag hade ett fel när jag talade om block. Och jag fick ” ko ” fel med ” grub-install –recheck –root-directory = / mnt / dev / sda1 ” kommando.
Svar
För alla som kämpar med detta som försöker använda en live USB eller andra chroot-metoder för att installera om eller installera grub – jag har hanterat detta några gånger och glömde att dokumentera det tidigare även om jag tänkte .
Problemet du står inför är att grub inte har tillgång till den sökväg du refererar till antingen som källa (/ boot) eller destination (kan ditt system och chroot se /dev/sda
till exempel?) eller båda. När du förbereder dig för chroot skapar du bindningsfästen som är tillgängliga i chroot-miljön, eller så gör du det inom chroot med hjälp av mount -t. Det finns så många guider online som gör det på något sätt.
Du måste se till att du binder / dev eller bara den specifika partition (er) som innehåller startfilerna i / boot (t.ex. / dev / sda1) . / boot är antingen en separat partition eller en katalog i / Chroot behöver åtkomst till den enhet som du kommer att (om) installera grub för att göra det fdisk -l i chroot för att se till att du kan se enheten listad i utgången. Observera också att om du inte har en separat startpartition, men du har en startkatalog i / root med startfilerna (inte bara en monteringspunkt), behöver du bara montera partitionen som innehåller root. t måste montera något på / root / boot.
Du måste också se till att du binder proc-filsystemet och sys-filsystemet, men varje guide jag har sett har de två. Jag har just sett / dev missade ibland. Det kan finnas några fall när du inte behöver det, men jag känner inte till dem.
tl; dr: se till att binda mount / dev
Kommentarer
- Varför pratar du om
chroot
när frågan inte är ’ t om” chroot”? - OP säger ” körs från en USB som innehåller linux mint ”. Det blir en chroot.
sda6
? Hjälper mitt svar här ?/cow
verkar hänvisa till Copy-on-write filsystem som är monterat på/
när du startar från en CD eller USB