Jeg prøver at geninstallere grub fra et USB-drev. Jeg kører følgende :
sudo mount /dev/sda6 /mnt sudo grub-install --root-directory=/mnt /dev/sda
Jeg får følgende fejl:
grub-probe: error: failed to get canonical path of /cow.
kan nogen forklare fejlen , og hvordan løser man det?
Rediger
Jeg prøver at reparere et ødelagt dual-boot-system, der kører fra en USB, der indeholder linux-mynte.
Kommentarer
Svar
Følg disse trin:
-
Start op i en Live Linux-session.
-
Monter
/
-partitionen på dit installerede operativsystem til/mnt
sudo mount /dev/sda6 /mnt
-
Opret et
chroot
miljø:sudo chroot /mnt
-
Du er nu i en “falsk” Linux-installation, der behandler
/mnt
som/
. Dette betyder, at alle de filer, der er nødvendige for GRUB, er i/boot
hvor systemet forventer, at de er, og du kan installere GRUB ligesom hvis du faktisk kørte dit installerede system:sudo update-grub sudo grub-install /dev/sda
Genstart nu, så GRUB-menuen vises normalt.
Kommentarer
- Jeg ‘ m forsøger at installere fra USB-enheden. på nogen måde prøvede jeg også uden montering – samme fejl. kan du forklare fejlen?
- @elyashiv venligst rediger dit spørgsmål og forklar, hvad det er, du prøver. Forsøger du at redde et ødelagt system? Starter du et live system fra USB? I så fald fortæl os . Hvilket operativsystem bruger du? Hvad får dig til at tro, at GRUB har en
root-device
mulighed, og hvad forventer du, at denne mulighed skal gøre? Har du oprettet etchroot
miljø? Når du stiller et spørgsmål, skal du forklare nøjagtigt, hvad du prøver at gøre, vi kan ‘ ikke gætte. - Ups, jeg mente -root -katalog
- @elyashiv der ‘ er heller ikke
--root-directory
. Læs mit svar her , der forklarer, hvordan du geninstallerer grub. - se på det første svar her
Svar
Hvis grub siger, at det ikke kunne løse den kanoniske vej til noget betyder det, at den ikke findes, eller realpath()
mislykkedes.
I dette tilfælde skal du prøve:
$ realpath /cow $ ls -la /cow
Hvis begge kommandoer siger “kan ikke finde fil eller bibliotek”, skal du oprette en.
Hvis den anden kommando fungerer, men den første ikke, skal du kontrollere, hvorfor realpath()
fungerer ikke. En af grundene kan være, at /proc
ikke er monteret. I nogle implementeringer af libc bruges /proc/self/fd
til at få kanonisk sti til en fil.
Kommentarer
- Jeg har den første kommando, der fungerer, men ikke den anden.
- ME: root @ ubuntu: / # realpath / cow TERMINAL: / cow ME: # ls -la / cow TERMINAL: ls: umulig at adgang ‘ / ko ‘: Ingen fil eller mappe af denne art (groft oversat).
Svar
Jeg får også denne fejl, og jeg tror ikke, det sker i en chroot.
Baggrund
Jeg tror, det er, når systemd ikke kan finde stien, fordi den er monteret i en mappe. Så forskellen er, når du konfigurerer en chroot, du allerede konfigurerer adgang til hardware, inklusive drev.
Selvom du kan konfigurere denne adgang inde i Systemd, hvilket ikke betyder, at du kan konfigurere tilladelser til disse drev på samme måde.
For eksempel oprettede jeg denne fil:
/etc/systemd/system/[email protected]/override.conf
Og den indeholder s disse indstillinger:
[Service] DeviceAllow=char-usb_device rwm DeviceAllow=char-usb [Files] Bind=/var/cache/apt/pkgcache.bin Bind=/var/cache/apt/srcpkgcache.bin
Dette fungerer stadig ikke, når du bruger grub-install /dev/sda
eller update-grub
til en USB på Pi debootstrapped med Debian Stretch. Selv ved brug af grub-uboot og grub-efi-arm er der stadig den fejl grub-probe
kan ikke finde den kanoniske sti.
Ikke kun det, men selvom update-grub
vil se og vide, hvad operativsystemerne er, men interessant nok grub-install
ikke genkende, at Debian-operativsystemet er på USB.
Eksempel
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#
Interessant, når jeg opretter en chroot og kan køre update-grub
, selvom jeg er på det operativsystem, som jeg debootstrapped til selve USBen, ser det ikke sit 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 kun Raspbian. Dette sker kun, når du prøver at installere og opdatere GRUB inde i containeren, men når jeg forlader chroot.
Se hvordan det nu fungerer, fordi jeg ikke afmonterede chroot-mapperne:
/dev dev/ /sys sys/ /proc proc/ /dev/pts dev/pts
Uden for containeren skal du huske, jeg kører denne kommando med grub-uboot
installeret på Raspbian og ingen Grub på USB indeholdende debootstrapped 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#
Dette betyder ikke ske ved hjælp af et af uofficielt tilgængelige billeder til Debian ARM , men dette er selvfølgelig stadig en tilpasning, der endnu ikke er tilgængelig til debootstrapping.
Fejlfinding
Der er virkelig tidspunkter, hvor det er bedre bare at oprette en sti. Den eneste næste mulighed (og sandsynligvis) er simpelthen at skrive GRUB. Og til det vil jeg bare læse på denne side.
https://www.dedoimedo.com/computers/grub-2.html
En anden ting, jeg vil dele om dette problem, er en løsning, der muligvis fungerer, men er klar over, at microSD-kort er meget følsomme. Jeg har bygget mine egne Linux-billeder og lært det hurtigt. Den bedste ting at gøre er at bruge Qemu når som helst, men for at forsøge at rydde en gammel partitionstabel kan du prøve at køre sgdisk --zap-all
på drevet.
sgdisk --zap-all /dev/sdd
Faktisk, nogle gange hvis det giver en fejl første gang, og det er ikke en skrivebeskyttet fejl, du kan køre den igen, og endelig vil alle partitionstabellerne være nye eller gamle.
Og du kan bruge Qemu til at efterligne hindbær Pi på en standard AMD / Intel-baseret pc. Jeg vil anbefale det. Jeg ved, at dette er mere information end det oprindelige indlæg, men jeg tror, det er sandsynligt, hvordan denne fejl er afledt. Det er containerens alder.
Svar
Baseret på hvad der blev skrevet ser det ud til at du prøver at installere GRUB til / dev / sda. Du vil ikke montere disken.
Du leder sandsynligvis efter: grub-install /dev/sda
GRUB man-side til reference, eller du kan man grub-install
fra dit system: http://linux.die.net/man/8/grub-install
Kommentarer
- Jeg skrev allerede kommandoen grub-install (på dev.sda1), men jeg havde en fejl ved at tale om blokke. Og jeg fik ” ko ” fejl med ” grub-install –recheck –root-directory = / mnt / dev / sda1 ” kommando.
Svar
For alle, der kæmper med dette, der forsøger at bruge en live USB eller anden chroot-måde til at geninstallere eller installere grub – jeg har behandlet dette et par gange og glemte at dokumentere det før, selvom jeg havde til hensigt at .
Det problem, du står over for, er, at grub ikke har adgang til den sti, du henviser til som kilde (/ boot) eller destination (kan dit system og chroot se /dev/sda
for eksempel?) eller begge dele. Når du forbereder dig på chroot, opretter du bindingsbeslag, der er tilgængelige i chroot-miljøet, eller du gør det inden i chroot ved hjælp af mount -t. Der er så mange guider online, der gør det på begge måder.
Du skal sørge for, at du binder / dev eller bare den eller de specifikke partition (er), der indeholder bootfilerne i / boot (f.eks / dev / sda1) . / boot er enten en separat partition eller en mappe i / Chroot har brug for adgang til det drev, som du vil (gen) installere grub for at gøre det fdisk -l i chroot for at sikre, at du kan se den enhed, der er anført i output. Bemærk også, at hvis du ikke har en separat boot-partition, men du har en boot-mappe i / root med boot-filerne (ikke kun et monteringspunkt), skal du kun montere den partition, der indeholder root. Du don derefter ” Jeg skal ikke montere noget til / root / boot.
Du skal også sørge for at binde proc-filsystemet og sys-filsystemet, men hver guide, jeg har set, har de to. Jeg har lige set / dev savnede nogle gange. Der kan være nogle tilfælde, hvor du ikke har brug for det, men jeg kender dem ikke.
tl; dr: sørg for at binde mount / dev
Kommentarer
- Hvorfor taler du om
chroot
når spørgsmålet ikke er ‘ t om“ chroot“? - OP siger ” kører fra en USB, der indeholder linux mint “. Det bliver en chroot.
sda6
? Hjælper mit svar her ?/cow
ser ud til at henvise til Copy-on-write filsystem, der er monteret på/
når du starter fra en CD eller USB