Próbuję ponownie zainstalować grub z dysku USB. Uruchamiam następujące :

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

Pojawia się następujący błąd:

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

Czy ktoś może wyjaśnić błąd i jak to rozwiązać?

Edytuj

Próbuję naprawić zepsuty system podwójnego rozruchu, działający z USB zawierającego linux mint.

Komentarze

  • OK, ta edycja to krok po prawej kierunek. Czy mamy założyć, że masz już zainstalowany system Linux? Czy uruchamia się z sda6? Czy moja odpowiedź tutaj pomaga?
  • FWIW, /cow wydaje się odnosić do Copy-on-write system plików montowany w / podczas uruchamiania z CD lub USB

Odpowiedź

Wykonaj następujące kroki:

  1. Uruchom sesję systemu Linux na żywo.

  2. Zamontuj partycję / zainstalowanego systemu operacyjnego do /mnt

    sudo mount /dev/sda6 /mnt 
  3. Skonfiguruj chroot środowisko:

    sudo chroot /mnt 
  4. Jesteś teraz na „fałszywej” instalacji Linuksa, która traktuje /mnt jako / . Oznacza to, że wszystkie pliki niezbędne dla GRUB-a znajdują się w /boot miejscu, w którym system ich oczekuje i możesz zainstalować GRUB tak, jakbyś faktycznie uruchomił zainstalowany system:

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

Teraz uruchom ponownie komputer i powinieneś zobaczyć normalne menu GRUB.

Komentarze

  • Ja ' próbuję zainstalować z urządzenia USB. tak czy inaczej próbowałem też bez montażu – ten sam błąd. czy możesz wyjaśnić błąd?
  • @elyashiv, edytuj swoje pytanie i wyjaśnij, co próbujesz. Czy próbujesz uratować uszkodzony system? Czy uruchamiasz system na żywo z USB? Jeśli tak, powiedz nam . Z jakiego systemu operacyjnego korzystasz? Dlaczego myślisz, że GRUB ma opcję root-device i czego oczekujesz od tej opcji? Czy skonfigurowałeś środowisko chroot? Ilekroć zadasz pytanie, musisz dokładnie wyjaśnić, co próbujesz zrobić, możemy ' zgadnąć.
  • Ups, miałem na myśli -root -directory
  • @elyashiv there ' nie jest też --root-directory. Przeczytaj moją odpowiedź tutaj , która wyjaśnia, jak ponownie zainstalować Gruba.
  • spójrz na pierwszą odpowiedź tutaj

Odpowiedz

Jeśli grub mówi, że nie może rozwiązać ścieżki kanonicznej czegoś , to znaczy, że nie istnieje lub realpath() nie powiodło się.

W tym przypadku spróbuj:

$ realpath /cow $ ls -la /cow 

Jeśli oba polecenia mówią „nie można znaleźć pliku lub katalogu”, musisz je utworzyć.

Jeśli drugie polecenie działa, ale pierwsze nie, sprawdź, dlaczego realpath() nie działa. Jedną z przyczyn może być to, że element /proc nie jest podłączony. W niektórych implementacjach libc, /proc/self/fd jest używany do uzyskania kanonicznej ścieżki pliku.

Komentarze

  • Pierwsza komenda działa, ale druga nie działa.
  • ME: root @ ubuntu: / # realpath / cow TERMINAL: / cow ME: # ls -la / cow TERMINAL: ls: niemożliwe do access ' / cow ': Brak pliku lub folderu tego rodzaju (z grubsza przetłumaczone).

Odpowiedź

Też otrzymuję ten błąd i nie sądzę, żeby zdarzał się w chroocie.

Tło

Myślę, że dzieje się tak, gdy systemd nie może znaleźć ścieżki, ponieważ jest zamontowany w katalogu. Różnica polega na tym, że konfigurując chroot, konfigurujesz już dostęp do sprzętu, w tym dysków.

Chociaż możesz skonfigurować ten dostęp w Systemd, co nie oznacza, że możesz skonfigurować uprawnienia dla tych dysków w ten sam sposób.

Na przykład utworzyłem ten plik:

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

I zawiera s te ustawienia:

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

To nadal nie działa, gdy używasz grub-install /dev/sda lub update-grub dla USB na Pi z debootstrapem z Debian Stretch. Nawet przy użyciu grub-uboot i grub-efi-arm nadal występuje ten błąd, że grub-probe nie może znaleźć ścieżki kanonicznej.

Nie tylko to, ale chociaż update-grub zobaczy i pozna systemy operacyjne, ale co ciekawe, grub-install nie rozpoznaje system operacyjny Debian na USB.

Przykład

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# 

Ciekawe, kiedy tworzę chroot i mogę uruchomić update-grub, mimo że jestem w systemie operacyjnym, który zdebootstrowałem na samym USB, nie widzi on własnego systemu operacyjnego!

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

Widzi tylko Raspbian. Dzieje się tak tylko wtedy, gdy próbuję zainstalować i zaktualizować GRUB w kontenerze, ale kiedy wychodzę z chroota.

Zobacz, jak to teraz działa, ponieważ nie odmontowałem katalogów chroot:

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

Z zewnątrz kontenera uwaga, uruchamiam to polecenie z grub-uboot zainstalowanym na Raspbian i bez Gruba na USB zawierającym debootstrapowany 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 nie zdarza się przy użyciu jednego z nieoficjalnie dostępnych obrazów dla Debian ARM , ale oczywiście jest to nadal dostosowanie, które nie jest jeszcze dostępne do debootstrappingu.

Rozwiązywanie problemów

Naprawdę są chwile, kiedy lepiej jest po prostu utworzyć ścieżkę. Jedyną kolejną możliwością (i prawdopodobną) jest po prostu napisanie GRUB-a. W tym celu przeczytam tylko na tej stronie.

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

Inną rzeczą, którą chcę się podzielić w tej kwestii, jest rozwiązanie, które może działać, ale zdaj sobie sprawę, że karty microSD są bardzo wrażliwe. Tworzyłem własne obrazy Linuksa i szybko się tego nauczyłem. Najlepszą rzeczą do zrobienia jest używanie Qemu, kiedy tylko możesz, ale aby spróbować wyczyścić starą tablicę partycji, możesz spróbować uruchomić sgdisk --zap-all na dysku.

sgdisk --zap-all /dev/sdd 

W rzeczywistości, czasami jeśli za pierwszym razem daje błąd i jest a nie błąd tylko do odczytu, możesz go uruchomić ponownie i ostatecznie wszystkie tablice partycji będą nowe lub stare.

I możesz użyć Qemu do emulacji Raspberry Pi na standardowym komputerze z procesorem AMD / Intel. Poleciłbym to. Wiem, że to więcej informacji niż dotyczy oryginalnego postu, ale myślę, że jest to prawdopodobne, w jaki sposób pochodzi ten błąd. To jest wiek kontenera.

Odpowiedź

Na podstawie tego, co napisaliśmy, wygląda na to, że „próbujesz zainstalować GRUB na / dev / sda. Nie chcesz montować dysku.

Prawdopodobnie szukasz: grub-install /dev/sda

Strona podręcznika GRUB w celach informacyjnych lub możesz man grub-install ze swojego systemu: http://linux.die.net/man/8/grub-install

Komentarze

  • Wpisałem już polecenie grub-install (na dev.sda1), ale wystąpił błąd dotyczący bloków. Otrzymałem błąd ” krowa ” z ” grub-install –recheck –root-directory = / mnt / dev / sda1 ” polecenie.

Odpowiedź

Dla każdego, kto boryka się z tym, kto próbuje użyć aktywnego USB lub innego środka chroot do ponownej instalacji lub zainstalowania Gruba – zajmowałem się tym kilka razy i zapomniałem go wcześniej udokumentować, chociaż zamierzałem .

Problem z którym się spotykasz polega na tym, że grub nie ma dostępu do ścieżki, do której odnosisz się ani jako źródło (/ boot), ani jako miejsce docelowe (czy twój system i chroot mogą zobaczyć /dev/sda na przykład?) lub oba. Kiedy przygotowujesz się do chroot, tworzysz montowania bind, które są dostępne w środowisku chroot, lub robisz to w chroot za pomocą montowania -t. W Internecie jest tak wiele przewodników, które to robią.

Musisz się upewnić, że powiążesz / dev lub tylko określone partycje zawierające pliki rozruchowe w / boot (np. / Dev / sda1) . / boot jest albo oddzielną partycją, albo katalogiem w / Chroot potrzebuje dostępu do dysku, na którym będziesz (ponownie) instalować Gruba, więc wykonaj fdisk -l w chroocie, aby upewnić się, że widzisz urządzenie wymienione w danych wyjściowych. Zwróć również uwagę, że jeśli nie masz oddzielnej partycji rozruchowej, ale masz katalog rozruchowy w katalogu / root z plikami rozruchowymi (nie tylko punkt montowania), wystarczy zamontować partycję zawierającą root. Następnie nie. nie trzeba niczego montować w / root / boot.

Musisz także upewnić się, że powiązałeś system plików proc i system plików sys, ale każdy przewodnik, który widziałem, ma te dwa. / dev czasami pomijał. Mogą wystąpić sytuacje, w których jej nie potrzebujesz, ale ja o nich nie wiem.

tl; dr: upewnij się, że powiążesz mount / dev

Komentarze

  • Dlaczego mówisz o chroot, gdy pytanie nie brzmi ' t o ” chroot ?
  • OP mówi, że ” działa z USB zawierającego linux mint „. To będzie chroot.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *