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

  • OK, at redigering er et trin i højre side retning. Skal vi antage, at du allerede har et Linux-system installeret? Starter den fra sda6? Hjælper mit svar her ?
  • FWIW, /cow ser ud til at henvise til Copy-on-write filsystem, der er monteret på / når du starter fra en CD eller USB

Svar

Følg disse trin:

  1. Start op i en Live Linux-session.

  2. Monter / -partitionen på dit installerede operativsystem til /mnt

    sudo mount /dev/sda6 /mnt 
  3. Opret et chroot miljø:

    sudo chroot /mnt 
  4. 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 et chroot 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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *