Jeg prøver å installere grub på nytt fra en USB-stasjon. Jeg kjører følgende :

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

Jeg får følgende feil:

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

kan noen forklare feilen , og hvordan kan jeg løse det?

Rediger

Jeg prøver for å reparere et ødelagt dual-boot-system, som kjører fra en USB som inneholder Linux-mynte.

Kommentarer

  • OK, redigering er et skritt til høyre retning. Skal vi anta at du allerede har et Linux-system installert? Starter den fra sda6? Hjelper svaret mitt her ?
  • FWIW, /cow ser ut til å referere til Copy-on-write filsystem som er montert på / når du starter fra en CD eller USB

Svar

Følg disse trinnene:

  1. Start opp i en Live Linux-økt.

  2. Monter / partisjonen til ditt installerte operativsystem til /mnt

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

    sudo chroot /mnt 
  4. Du er nå i en «falsk» Linux-installasjon som behandler /mnt som / . Dette betyr at alle filene som er nødvendige for GRUB er i /boot der systemet forventer at de skal være, og du kan installere GRUB akkurat som om du faktisk kjørte det installerte systemet:

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

Start på nytt, og du ser GRUB-menyen vises normalt.

Kommentarer

  • Jeg ‘ prøver å installere fra USB-enheten. på noen måte prøvde jeg også uten montering – samme feil. kan du forklare feilen?
  • @elyashiv vennligst rediger spørsmålet ditt og forklar hva det er du prøver på. Prøver du å redde et ødelagt system? Starter du et live system fra USB? I så fall fortell oss . Hvilket operativsystem bruker du? Hva får deg til å tro at GRUB har et root-device -alternativ, og hva forventer du at alternativet skal gjøre? Har du satt opp et chroot miljø? Når du stiller et spørsmål, må du forklare nøyaktig hva du prøver å gjøre, vi kan ‘ ikke gjette.
  • ups, jeg mente -root -katalog
  • @elyashiv der ‘ s ikke --root-directory heller. Les svaret mitt her som forklarer hvordan du installerer grub på nytt.
  • se på det første svaret her

Svar

Hvis grub sier at det ikke kan løse den kanoniske banen til noe , betyr det at den ikke eksisterer eller realpath() mislyktes.

I dette tilfellet kan du prøve:

$ realpath /cow $ ls -la /cow 

Hvis begge kommandoene sier «finner ikke fil eller katalog», må du opprette en.

Hvis den andre kommandoen fungerer, men den første ikke, må du sjekke hvorfor realpath() fungerer ikke. En av årsakene kan være at /proc ikke er montert. I noen implementeringer av libc brukes /proc/self/fd for å få en kanonisk bane til en fil.

Kommentarer

  • Jeg har den første kommandoen som fungerer, men ikke den andre.
  • ME: root @ ubuntu: / # realpath / cow TERMINAL: / cow ME: # ls -la / cow TERMINAL: ls: umulig å tilgang ‘ / cow ‘: Ingen fil eller mappe av denne typen (grovt oversatt).

Svar

Jeg får også denne feilen, og jeg tror ikke det skjer i en chroot.

Bakgrunn

Jeg tror dette er når systemd ikke finner stien fordi den er montert i en katalog. Så forskjellen er når du konfigurerer en chroot du allerede konfigurerer tilgang til maskinvare, inkludert stasjoner.

Skjønt du kan konfigurere denne tilgangen i Systemd som ikke betyr at du kan konfigurere tillatelser for disse stasjonene på samme måte.

For eksempel opprettet jeg denne filen:

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

Og den inneholder er disse innstillingene:

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

Dette fungerer fortsatt ikke når du bruker grub-install /dev/sda eller update-grub for en USB på Pi debootstrapped med Debian Stretch. Selv ved bruk av grub-uboot og grub-efi-arm er det fortsatt den feilen grub-probe finner ikke den kanoniske banen.

Ikke bare det, men skjønt update-grub vil se og vite hva operativsystemene er, men det er interessant at grub-install ikke gjenkjenne 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 oppretter en chroot og kan kjøre update-grub, selv om jeg er på operativsystemet som jeg debootstrapped til selve USB-en, ser den ikke 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:/# 

Den ser bare Raspbian. Dette skjer bare når du prøver å installere og oppdatere GRUB inne i beholderen, men når jeg avslutter chroot.

Se hvordan det nå fungerer fordi jeg ikke demonterte chroot-katalogene:

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

Utenom beholderen, husk at jeg løper denne kommandoen med grub-uboot installert på Raspbian og ingen Grub på USB-en som inneholder 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# 

Dette betyr ikke skje ved å bruke et av uoffisielt tilgjengelige bilder for Debian ARM , men dette er selvsagt fortsatt en tilpasning som ennå ikke er tilgjengelig for debootstrapping.

Feilsøking

Det er virkelig tider når det er bedre å lage en bane. Den eneste neste muligheten (og en sannsynlig) er å bare skrive GRUB. Og for det skal jeg bare lese på denne siden.

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

En annen ting jeg vil dele om dette problemet er en løsning som kan fungere, men innser at microSD-kort er veldig følsomme. Jeg har bygget mine egne Linux-bilder og lært dette raskt. Det beste du kan gjøre er å bruke Qemu når du kan, men for å prøve å rydde en gammel partisjonstabell kan du prøve å kjøre sgdisk --zap-all på stasjonen.

sgdisk --zap-all /dev/sdd 

Faktisk, noen ganger hvis det gir en feil første gang og det er ikke en skrivebeskyttet feil, du kan kjøre den igjen, og til slutt vil alle partisjonstabellene være nye eller gamle.

Og du kan bruke Qemu til å etterligne bringebær Pi på en standard AMD / Intel-basert PC. Jeg vil anbefale det. Jeg vet at dette er mer informasjon enn det opprinnelige innlegget, men jeg tror det er sannsynlig hvordan denne feilen er avledet. Det er containeralderen.

Svar

Basert på det som ble skrevet, ser det ut til at du prøver å installere GRUB til / dev / sda. Du vil ikke montere disken.

Du leter sannsynligvis etter: grub-install /dev/sda

GRUB man-side som referanse, eller du kan man grub-install fra systemet ditt: http://linux.die.net/man/8/grub-install

Kommentarer

  • Jeg skrev allerede kommandoen grub-install (på dev.sda1), men jeg hadde en feil med å snakke om blokker. Og jeg fikk » ku » feil med » grub-install –recheck –root-directory = / mnt / dev / sda1 » kommando.

Svar

For alle som sliter med dette som prøver å bruke en live USB eller annen chroot-måte for å installere eller installere grub på nytt – jeg har taklet dette et par ganger og glemte å dokumentere det før, selv om jeg hadde tenkt å .

Problemet du står overfor er grub har ikke tilgang til banen du refererer til, enten som kilde (/ boot) eller destinasjon (kan systemet og chroot se /dev/sda for eksempel?) eller begge deler. Når du forbereder deg på chroot oppretter du bindingsfester som er tilgjengelige i chroot-miljøet, eller du gjør det i chroot ved hjelp av mount -t. Det er så mange guider på nettet som gjør det på begge måter.

Du må sørge for at du binder / dev eller bare den eller de spesifikke partisjonene som inneholder oppstartsfilene i / boot (f.eks. / Dev / sda1) . / boot er enten en egen partisjon eller en katalog i / Chroot trenger tilgang til stasjonen du vil (re) installere grub for å gjøre det fdisk -l i chroot for å sikre at du kan se enheten som er oppført i utgangen. Vær også oppmerksom på at hvis du ikke har en egen oppstartspartisjon, men du har en oppstartkatalog i / root med oppstartsfilene (ikke bare et monteringspunkt), trenger du bare å montere partisjonen som inneholder roten. Du trenger da ikke » t må montere noe til / root / boot.

Du må også sørge for at du binder proc-filsystemet og sys-filsystemet, men hver guide jeg har sett har de to. Jeg har nettopp sett / dev savnet noen ganger. Det kan være noen tilfeller når du ikke trenger det, men jeg vet ikke om dem.

tl; dr: sørg for at du binder mount / dev

Kommentarer

  • Hvorfor snakker du om chroot når spørsmålet ikke er ‘ t om« chroot«?
  • OP sier » som kjører fra en USB som inneholder linux mint «. Det blir en chroot.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *