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
Odpowiedź
Wykonaj następujące kroki:
-
Uruchom sesję systemu Linux na żywo.
-
Zamontuj partycję
/
zainstalowanego systemu operacyjnego do/mnt
sudo mount /dev/sda6 /mnt
-
Skonfiguruj
chroot
środowisko:sudo chroot /mnt
-
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ś środowiskochroot
? 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.
sda6
? Czy moja odpowiedź tutaj pomaga?/cow
wydaje się odnosić do Copy-on-write system plików montowany w/
podczas uruchamiania z CD lub USB