Mam komputer, który używał do podwójnego uruchamiania Ubuntu (obecnie 16.04) i Windows 7, z GRUB Ubuntu jako programem ładującym.
Właśnie dodałem Arch Linux jako trzeci system operacyjny, zgodnie z oficjalnymi instrukcjami instalacji. Nie zainstalowałem GRUB-a z Arch, ponieważ chciałem użyć kontrolowanego przez Ubuntu. Instrukcje zawierały polecenie, mkinitcpio -p linux
które prawdopodobnie wygenerowało niektóre pliki rozruchowe, które uruchomiłem zgodnie z opisem.
Teraz, gdy próbuję uruchomić Ubuntu z GRUB-a za pomocą domyślnego wpisu, pojawia się ten nieprzyjemny błąd (przepraszam za zdjęcie na ekranie):
Jako wynik uname -a
programów próbuje uruchomić jądro Arch, ale /dev/sda6
jest partycją główną Ubuntu.
Muszę nawigować Advanced options for Ubuntu
i wybrać jeden z Ubuntu, with Linux 4.4.0-*
wpisów, aby móc załadować Ubuntu, nie mogłem jednak znaleźć wpisu, który poprawnie załadowałby Arch.
Uruchamianie sudo update-grub
z Ubuntu ( „ update-grub
to grub-mkconfig -o /boot/grub/grub.cfg
skrót do uruchamiania w celu wygenerowania pliku konfiguracyjnego grub2.” ) Nic nie zmienia. grub-customizer
Narzędzie było również bezużyteczna przy ustalaniu tego do tej pory.
Co powoduje to zamieszanie w GRUB-ie i jak to naprawić, aby każda wersja Linuksa uruchamiała się z prawidłowym jądrem i z właściwej partycji?
Wygląda na to, że głupio zainstalowałem Archa z zamontowanym Ubuntu / boot, więc prawdopodobnie umieścił tam swoje pliki rozruchowe.
Nie mam nic przeciwko usuwaniu wszystkich rzeczy związanych z Archiem, aby ponownie uruchomić program ładujący Ubuntu i wykonać czystą instalację Archa później.
Aktualizacje (dzięki @terdon za wsparcie w czacie Ask Ubuntu):
Tu jest mój /boot/grub/grub.cfg
.
Wszystkie wpisy w Linuksie wydają się wskazywać na moją partycję / dev / sda6, która jest głównym katalogiem Ubuntu:
$ grep ' linux /' /boot/grub/grub.cfg
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
Próbowałem zaktualizować konfigurację GRUB z Ubuntu:
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
dpkg: warning: version 'linux' has bad syntax: version number does not start with a digit
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/initramfs-linux.img
Found linux image: /boot/vmlinuz-4.4.0-21-generic
Found initrd image: /boot/initrd.img-4.4.0-21-generic
Found linux image: /boot/vmlinuz-4.2.0-35-generic
Found initrd image: /boot/initrd.img-4.2.0-35-generic
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
Found Windows 7 (loader) on /dev/sda1
Found Arch on /dev/sda8
done
Próbowałem ponownie zainstalować GRUB do MBR z Ubuntu:
$ sudo grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
$ sudo grub-install --recheck /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
Nawiasem mówiąc, są to zainstalowane pakiety jądra Ubuntu, starałem się je dpkg-reconfigure
wszystkie, ale bez żadnego wpływu na problem:
$ dpkg -l linux-image* | grep ^ii
ii linux-image-4.2.0-35-generic 4.2.0-35.40 amd64 Linux kernel image for version 4.2.0 on 64 bit x86 SMP
ii linux-image-4.4.0-21-generic 4.4.0-21.37 amd64 Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii linux-image-extra-4.2.0-35-generic 4.2.0-35.40 amd64 Linux kernel extra modules for version 4.2.0 on 64 bit x86 SMP
ii linux-image-extra-4.4.0-21-generic 4.4.0-21.37 amd64 Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
Próbowałem także zregenerować initramfs Ubuntu:
$ sudo update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-4.4.0-21-generic
update-initramfs: Generating /boot/initrd.img-4.2.0-35-generic
Mój układ partycji:
Sprawdzone z systemu Ubuntu. Etykiety powinny się wyjaśnić.
$ lsblk -f /dev/sda
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ntfs win7-boot 90DCF3A5DCF3842E /win/boot
├─sda2 ntfs windows7 482C7A572C7A3FCC /win/c
├─sda3 ext4 grub-boot 6dbb8633-dadd-4b5e-8d85-b0895fde9dfb /boot
├─sda5 ext4 images 81dc42c4-a161-4ccd-b704-6e5c09298943 /images
├─sda6 ext4 ubuntu-1604 eee18451-b607-4875-8a88-c9cb6c6544c8 /
├─sda7 ext4 ubuntu-home 485b3ef1-7216-4053-b25c-f656d529e8e6 /home
├─sda8 ext4 arch-root 8d281a0c-969c-44cf-ba6a-1d3c7b4be7ec
├─sda9 ext4 arch-home 32522902-a53d-44c8-90f2-6bbf14c40f1f
└─sda10 swap linux-swap 8b05bd9b-bc42-46f6-8c18-50711a3c48b9 [SWAP]
Struktura menu mojego GRUBA:
Zaawansowane opcje dla Ubuntu:
Mój /boot
katalog:
$ ls -la /boot
total 118480
drwxr-xr-x 4 root root 4096 Apr 24 20:50 .
drwxr-xr-x 28 root root 4096 Apr 24 19:44 ..
-rw-r--r-- 1 root root 1313029 Mär 16 01:45 abi-4.2.0-35-generic
-rw-r--r-- 1 root root 1239577 Apr 19 00:21 abi-4.4.0-21-generic
-rw-r--r-- 1 root root 184888 Mär 16 01:45 config-4.2.0-35-generic
-rw-r--r-- 1 root root 189412 Apr 19 00:21 config-4.4.0-21-generic
drwxr-xr-x 6 root root 4096 Apr 26 19:58 grub
-rw-r--r-- 1 root root 18598360 Apr 24 20:59 initramfs-linux-fallback.img
-rw-r--r-- 1 root root 3516429 Apr 24 20:59 initramfs-linux.img
-rw-r--r-- 1 root root 33642388 Apr 24 18:31 initrd.img-4.2.0-35-generic
-rw-r--r-- 1 root root 36143341 Apr 24 19:51 initrd.img-4.4.0-21-generic
drwx------ 2 root root 16384 Okt 28 17:43 lost+found
-rw-r--r-- 1 root root 182704 Jan 28 13:44 memtest86+.bin
-rw-r--r-- 1 root root 184380 Jan 28 13:44 memtest86+.elf
-rw-r--r-- 1 root root 184840 Jan 28 13:44 memtest86+_multiboot.bin
-rw------- 1 root root 3745312 Mär 16 01:45 System.map-4.2.0-35-generic
-rw------- 1 root root 3853719 Apr 19 00:21 System.map-4.4.0-21-generic
-rw------- 1 root root 6829104 Mär 16 01:45 vmlinuz-4.2.0-35-generic
-rw------- 1 root root 7013968 Apr 19 00:21 vmlinuz-4.4.0-21-generic
-rw-r--r-- 1 root root 4435552 Apr 14 19:20 vmlinuz-linux
Jądra 4.4.0 i 4.2.0 powinny być Ubuntu, Arch powinien mieć jądro 4.5.0. Ale jak mogę się dowiedzieć, który plik bez wersji jądra w nazwie należy do czego?
Mój katalog główny Ubuntu (z wyłączeniem katalogów):
$ ls -la / | grep ^[^d]
total 124
lrwxrwxrwx 1 root root 32 Apr 24 19:44 initrd.img -> boot/initrd.img-4.4.0-21-generic
lrwxrwxrwx 1 root root 32 Apr 5 17:45 initrd.img.old -> boot/initrd.img-4.2.0-35-generic
lrwxrwxrwx 1 root root 29 Apr 24 19:44 vmlinuz -> boot/vmlinuz-4.4.0-21-generic
lrwxrwxrwx 1 root root 29 Apr 5 17:45 vmlinuz.old -> boot/vmlinuz-4.2.0-35-generic
Katalog główny My Arch nie zawiera żadnych plików ani łączy.
os-prober
. następnie uruchom je,sudo mkinitcpio -p linux
a nasudo grub-mkconfig -o /boot/grub/grub.cfg
koniecsudo grub-install /dev/sda
Root device mounted successfully, but /sbin/init does not exists
. Zbadałeś to? Czyinit
naprawdę brakuje? Jeśli tak, zdecydowanie powinieneś go zainstalować, jeśli zamiast tego jest obecny, jakiś pomysł, dlaczego nie można go znaleźć?Odpowiedzi:
W końcu rozwiązałem go, nukując partycję Arch i jej pliki rozruchowe w katalogu mojego Ubuntu
/boot
z orbity. Ubuntu znów jest w porządku, wszystkie pozostałe wpisy GRUBa znów działają.Oto lista tego, co zrobiłem:
Usuń
initramfs
pliki Arch :Usuń
vmlinuz
plik Arch :Sformatuj partycję Arch (
/dev/sda8
) za pomocą GPartedZaktualizuj konfigurację GRUB:
Uruchom ponownie i ciesz się!
źródło
initramfs-linux
nie...ranfs...
Ręczne naprawianie grub.cfg (niezalecane)
Patrzę na ciebie
grub.cfg
wpis Ubuntu jest uszkodzony (a także niektóre z poniższych)
Ostatnie dwa wiersze to wydane przez gruba polecenie załadowania jądra i initrd i obecnie szukają jądra ARCH i initiramfs. Ponadto, szuka ich na
/
partycji in zidentyfikowanej przez,uuid=eee18451-b607-4875-8a88-c9cb6c6544c8
która może, ale nie musi hostować zamierzone pliki Ubuntu.Możesz to naprawić poprzez:
aby uzyskać identyfikator UUID partycji root Ubuntu.
Następnie zamień dwa ostatnie wiersze na link simlink do twojego najnowszego jądra i obrazów initrd (ponieważ tak właśnie oczekuje ubuntu)
Jeśli to nie naprawi tego od razu, może być wymagana inna korekta. Możesz je znaleźć, „kopiując” jeden z testowanych i działających wpisów, i polecam użycie najbardziej waniliowego (np. Brak przekazywanych parametrów jądra lub innych parametrów jądra, takich jak nomodeset).
To powinien być dobry kandydat:
Wpis Arch jest podobnie uszkodzony, ponieważ prawdopodobnie szuka Arch initramfs i jądra w partycji root Ubuntu. Domyślna lokalizacja tych plików to / boot. Dostosuj dwa ostatnie wiersze wpisu Arch, poprawiając lokalizację i sprawdzając, czy identyfikator użytkownika partycji root jest tym, który zawiera Arch Arch.
(Kilka) słów ostrzeżenia:
Zasadniczo NIE zaleca się użytkownikom Ubuntu bałagania się
grub.cfg
ręcznie. Z pewnością wykonaj jego kopię i zachowaj ostrożność podczas jej edycji. Przygotuj się na przypadek, że twój system przestanie się uruchamiać (ale będziesz mógł go wskrzesić za pomocą procedury rozruchu opisanej w mojej starej odpowiedzi).Ponadto, chociaż tym razem może to rozwiązać problem, może wrócić do gryzienia następnym razem, gdy będziesz musiał ponownie wypełnić menu grub. Z jakiegoś powodu sondowanie systemu operacyjnego grub pod Ubuntu jest mylone przez obecność jądra Arch pod / boot. Domyślam się, że narzędzie takie jak naprawa rozruchu powinno być w stanie poprawnie uruchomić wszystkie Twoje dystrybucje, ale jeśli dobrze pamiętam, nie działało to dla ciebie.
Jedna stała poprawka może polegać na zainstalowaniu jądra arch i obrazów w innym katalogu niż domyślny / boot. Jest to nieporadne i powinieneś skonsultować się z wpisem Arch Wiki o tym, jak to zrobić poprawnie.
OLD ODPOWIEDŹ (zalecane, jeśli planujesz przejść na Arch długoterminowo) Oto, co bym zrobił i jakoś zrobił kilka miesięcy temu.
Przejdź do strony Arch Arch Grub i przeczytaj odpowiednią sekcję dla swojej tabeli partycji (prawdopodobnie jesteś UEFI, więc czytaj o ESP i tak dalej).
Ręczne uruchamianie w Arch
Jest to bardzo kształtujące doświadczenie, które polecam spróbować. Zakładając, że jądro Arch Linux znajduje się gdzieś na twoim dysku, naciśnij
c
w wierszu poleceń grub i wpisz ls, aby zobaczyć listę wyglądających urządzeń i partycji(hd0,msdos1),(hd1,gpt1),...
. Możesz ls każdy z nich, aby zobaczyć zawartość.Musisz dowiedzieć się trzech rzeczy:
/
główna partycja Archvmlinuz
intiramfs-linux.img
po posiadaniu tych trzech uruchomisz trzy polecenia w wierszu poleceń grub> coś podobnego do tego.
Zauważ, że grub może znaleźć, np
(ten jeden grub nie może znaleźć się automatycznie i wywołuje panikę w jądrze;))
Tego wszystkiego się tutaj nauczyłem , źródła, które gorąco polecam. Jeśli dasz radę, przejdź do naprawiania grub! Inaczej...
Boot Arch z klucza na żywo! Pobierz środowisko Arch na żywo i śledź wiki instalacyjne
chroot
na Arch w podobny sposób, jak za pierwszym razem.Naprawianie grub
Z poziomu Arch zainstaluj odpowiednie pakiety grub, aw szczególności,
os-prober
aby umożliwićgrub-install
wykrycie twojego innego systemu. Postępuj dokładnie według instrukcji instalacji i powinieneś (przynajmniej) uruchomić zarówno arch, jak i ubuntu z menu grub. Zainstalowanie poleceń skończy się tak.** Ostrzeżenie ** Nie uruchamiaj tych poleceń, są one przykładami, musisz wypracować te odpowiednie dla twojego systemu
** Jeśli wszystko inne zawiedzie **
Niestety, jest to tak szczegółowe, jak to możliwe, biorąc pod uwagę ograniczoną liczbę informacji, a SE nie jest tak naprawdę forum dla takich problemów, stąd moja „ogólna” odpowiedź odnosząca się do przydatnych zasobów.
Jeśli nie możesz tego rozgryźć, być może wpadnij na fora Arch i pod warunkiem, że postarałeś się jak najlepiej i przeczytałeś dokumenty przedtem, możesz znaleźć pomoc.
Robienie tego wszystkiego za pomocą Arch było dla mnie podstawowym doświadczeniem.
źródło
Moje rozwiązanie jest prostsze. Korzystam z terminala i wykonuję następujące czynności:
Jeśli masz dalsze problemy, skorzystaj
boot-repair
z bezpłatnego pliku do pobrania, wystarczająco małego, aby nagrać na dysk CD.źródło
update-grub
. Naprawienie rozruchu jest bardzo mało prawdopodobne w przypadku tego konkretnego problemu.sudo grub-mkconfig -o /boot/grub/grub.cfg
jest właśnie tam.update-grub
to bardzo prosty skrypt powłoki, który działagrub-mkconfig -o /boot/grub/grub.cfg
. Możesz to zobaczyć za pomocącat /usr/sbin/update-grub
.