Pokouším se znovu nainstalovat grub z USB disku. Spustím následující :

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

Zobrazuje se mi následující chyba:

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

může někdo chybu vysvětlit , a jak to vyřešit?

Upravit

Snažím se opravit rozbitý systém s dvojím spuštěním spuštěný z USB obsahujícího linuxovou mincovnu.

Komentáře

  • Dobře, tato úprava je krokem vpravo směr. Předpokládáme, že již máte nainstalovaný systém Linux? Spouští se z sda6? Pomůže moje odpověď zde ?
  • FWIW, zdá se, že /cow odkazuje na Souborový systém Copy-on-write , který je při zavádění z CD nebo USB
  • ul připojen k / >

Odpověď

Postupujte takto:

  1. Spusťte relaci Live Linux.

  2. Připojte / oddíl vašeho nainstalovaného OS k /mnt

    sudo mount /dev/sda6 /mnt 
  3. Nastavení prostředí chroot:

    sudo chroot /mnt 
  4. Nyní jste ve „falešné“ instalaci systému Linux, která /mnt považuje za / . To znamená, že všechny soubory potřebné pro GRUB jsou v /boot, kde je očekává, že budou, a můžete GRUB nainstalovat stejně, jako kdybyste skutečně nainstalovaný systém provozovali:

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

Nyní restartujte a měli byste vidět, že se nabídka GRUB zobrazí normálně.

Komentáře

  • Snažím se ‚ nainstalovat ze zařízení USB. jakkoli jsem to zkusil také bez montáže – stejná chyba. můžete vysvětlit chybu?
  • @elyashiv prosím upravte svoji otázku a vysvětlete, o co se pokoušíte. Pokoušíte se zachránit poškozený systém? Zavádíte živý systém z USB? Pokud ano, řekněte nám . Jaký OS používáte? Proč si myslíte, že GRUB má možnost root-device a co od ní očekáváte? Nastavili jste prostředí chroot? Kdykoli položíte otázku, musíte přesně vysvětlit, o co se snažíte, nemůžeme ‚ odhadnout.
  • oops, myslel jsem -root -directory
  • @elyashiv tam ‚ není ani --root-directory. Přečtěte si mou odpověď zde , která vysvětluje, jak znovu nainstalovat grub.
  • podívejte se na první odpověď zde

odpověď

Pokud grub říká, že nemohl vyřešit kanonickou cestu něčeho , to znamená, že neexistuje nebo realpath() selhal.

V tomto případě zkuste:

$ realpath /cow $ ls -la /cow 

Pokud oba příkazy říkají „nelze najít soubor nebo adresář“, musíte jeden vytvořit.

Pokud druhý příkaz funguje, ale první ne, zkontrolujte proč realpath() nefunguje. Jedním z důvodů může být to, že /proc není připojen. V některých implementacích libc se /proc/self/fd používá k získání kanonické cesty k souboru.

Komentáře

  • Mám první příkaz funkční, ale ne druhý.
  • ME: root @ ubuntu: / # realpath / cow TERMINAL: / cow ME: # ls -la / cow TERMINAL: ls: nemožné přístup ‚ / cow ‚: Žádný soubor ani složka tohoto druhu (zhruba přeložena).

Odpověď

Tuto chybu dostávám také a nemyslím si, že se to stane v chrootu.

Pozadí

Myslím, že to je situace, kdy systemd nemůže najít cestu, protože je připojena v adresáři. Rozdíl je tedy v tom, že když nastavíte chroot, nakonfigurujete již přístup k hardwaru, včetně disků.

Ačkoli tento přístup můžete nakonfigurovat uvnitř Systemd, což neznamená, že můžete nakonfigurovat oprávnění pro tyto disky stejným způsobem.

Například jsem vytvořil tento soubor:

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

A obsahuje s tato nastavení:

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

Toto stále nefunguje při použití grub-install /dev/sda nebo update-grub pro USB na Pi debootstrapped s Debian Stretch. I když použijete grub-uboot a grub-efi-arm, stále existuje chyba, že grub-probe nemůže najít kanonickou cestu.

Nejen to, ale update-grub uvidí a bude vědět, jaké jsou operační systémy, ale zajímavě grub-install ne rozpoznat, že operační systém Debian je na USB.

Příklad

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# 

Zajímavé, když vytvořím chroot a mohu spustit update-grub, i když jsem v operačním systému, který jsem debootstrapped na samotné USB, nevidí svůj vlastní operační systém!

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:/# 

Vidí pouze raspbian. K tomu dochází pouze při pokusu o instalaci a aktualizaci GRUBu uvnitř kontejneru, ale když opustím chroot.

Podívejte se, jak to nyní funguje, protože jsem neodpojil adresáře chroot:

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

Z vnějšku kontejneru na vás běží tento příkaz s grub-uboot nainstalovaným na Raspbian a bez Grub na USB obsahující 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# 

To není stane se pomocí jednoho z neoficiálně dostupných obrázků pro Debian ARM , ale samozřejmě se stále jedná o přizpůsobení, které zatím není k dispozici pro debootstrapping.

Odstraňování problémů

Opravdu existují chvíle, kdy je lepší vytvořit cestu. Jedinou další možností (a pravděpodobnou) je jednoduše napsat GRUB. A proto si na této stránce jen přečtu.

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

Další věc, o které se chci podělit o tomto problému, je řešení, které by mohlo fungovat, ale uvědomte si, že karty microSD jsou velmi citlivé. Vytvářel jsem své vlastní obrazy Linuxu a rychle jsem se to naučil. Nejlepším řešením je použít Qemu, kdykoli můžete, ale abyste se pokusili vyčistit starou tabulku oddílů, můžete zkusit spustit sgdisk --zap-all na jednotce.

sgdisk --zap-all /dev/sdd 

Ve skutečnosti někdy, pokud dojde k chybě poprvé a není chyba jen pro čtení, můžete ji spustit znovu a nakonec budou všechny tabulky oddílů nové i staré.

A můžete použít Qemu k emulaci Raspberry Pi na standardním počítači založeném na AMD / Intel. Doporučil bych to. Vím, že se jedná o více informací, než se týká původního příspěvku, ale myslím, že je pravděpodobné, jak je tato chyba odvozena. Je to věk kontejneru.

Odpověď

Na základě napsaného textu vypadá, že se pokoušíte nainstalovat GRUB do / dev / sda. Nechcete disk připojit.

Pravděpodobně hledáte: grub-install /dev/sda

Manuální stránka GRUBu pro informaci, nebo můžete man grub-install ze systému: http://linux.die.net/man/8/grub-install

Komentáře

  • Již jsem zadal příkaz grub-install (na dev.sda1), ale při mluvení o blocích se vyskytla chyba. A dostal jsem “ krávu “ chybu s “ grub-install –recheck –root-directory = / mnt / dev / sda1 “ příkaz.

Odpovědět

Pro kohokoli, kdo s tím zápasí a kdo se pokouší použít živé USB nebo jiné prostředky chroot k opětovné instalaci nebo instalaci grubu, jsem se s tím několikrát zabýval a zapomněl jsem to zdokumentovat, i když jsem to .

Problém, kterému čelíte, je, že grub nemá přístup k cestě, na kterou odkazujete, buď jako zdroj (/ boot), nebo cíl (může váš systém a chroot vidět /dev/sda například?) nebo obojí. Když se připravujete na chroot, vytvoříte vazby vazeb, které jsou přístupné v prostředí chroot, nebo tak učiníte v chrootu pomocí mount -t. Existuje tolik online průvodců, kteří to dělají oběma způsoby.

Musíte se ujistit, že svážete / dev nebo pouze konkrétní oddíl (oddíly) obsahující bootovací soubory v / boot (např. / Dev / sda1) . / boot je buď samostatný oddíl, nebo adresář v / Chroot potřebuje přístup k jednotce, na kterou budete (znovu) instalovat grub, takže v chrootu proveďte fdisk -l, abyste viděli zařízení uvedené na výstupu. Všimněte si také, že pokud nemáte samostatný zaváděcí oddíl, ale máte spouštěcí adresář v / root se zaváděcími soubory (nejen přípojný bod), stačí připojit pouze oddíl obsahující root. Nemusím nic připojovat k / root / boot.

Musíte se také ujistit, že svážíte souborový systém proc a souborový systém sys, ale každý průvodce, který jsem viděl, má ty dva. Právě jsem viděl / dev někdy chyběl. Mohou nastat případy, kdy to nepotřebujete, ale já o nich nevím.

tl; dr: nezapomeňte svázat mount / dev

Komentáře

  • Proč mluvíte o chroot když otázka není ‚ o chroot„?
  • OP říká “ běžící z USB obsahujícího linuxovou mincovnu „. To bude chroot.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *