Saya memiliki mesin yang digunakan untuk dual-boot Ubuntu (16,04 saat ini) dan Windows 7, dengan GRUB Ubuntu sebagai boot loader.
Sekarang saya baru saja menambahkan Arch Linux sebagai OS ketiga, mengikuti instruksi instalasi resmi. Saya tidak menginstal GRUB dari Arch karena saya ingin menggunakan yang dikendalikan oleh Ubuntu. Instruksi berisi perintah mkinitcpio -p linux
yang mungkin menghasilkan beberapa file boot yang saya jalankan seperti yang dijelaskan.
Sekarang ketika saya mencoba untuk mem-boot Ubuntu dari GRUB melalui entri default-nya, saya mendapatkan kesalahan yang tidak menyenangkan ini (maaf untuk foto layar):
Sebagai output dari uname -a
pertunjukan, ia mencoba untuk mem-boot kernel Arch, tetapi /dev/sda6
merupakan partisi root Ubuntu.
Saya harus menavigasi ke Advanced options for Ubuntu
dan memilih salah satu Ubuntu, with Linux 4.4.0-*
entri untuk dapat memuat Ubuntu, saya tidak dapat menemukan entri yang akan memuat Arch dengan benar.
Menjalankan sudo update-grub
dari Ubuntu ( " update-grub
adalah sebuah rintisan untuk menjalankan grub-mkconfig -o /boot/grub/grub.cfg
untuk menghasilkan file konfigurasi grub2." ) Tidak mengubah apa pun. The grub-customizer
alat yang juga berguna dalam memperbaiki sejauh ini.
Apa yang menyebabkan kebingungan GRUB ini dan bagaimana cara memperbaikinya sehingga setiap versi Linux mem-boot dengan kernel yang benar dan dari partisi yang benar?
Sepertinya saya bodoh menginstal Arch dengan Ubuntu / boot yang terpasang, jadi mungkin menempatkan file boot-nya di sana.
Saya baik-baik saja dengan menghapus semua hal yang berhubungan dengan Arch untuk mendapatkan boot loader Ubuntu langsung lagi dan melakukan instalasi Arch yang bersih nanti.
Pembaruan (terima kasih kepada @terdon untuk dukungannya dalam obrolan Tanya Ubuntu):
Ini milik saya /boot/grub/grub.cfg
.
Semua entri Linux tampaknya menunjuk pada partisi / dev / sda6 saya, yang merupakan root 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
Saya mencoba memperbarui konfigurasi GRUB dari 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
Saya mencoba menginstal ulang GRUB ke MBR dari 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.
Mereka adalah paket-paket kernel Ubuntu yang terinstal, saya memang mencoba dpkg-reconfigure
semuanya, tetapi tanpa efek pada masalah:
$ 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
Saya juga mencoba membuat ulang 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
Layout partisi saya:
Diperiksa dari sistem Ubuntu. Label harus menjelaskan sendiri.
$ 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]
Struktur menu GRUB saya:
Opsi lanjutan untuk Lengkungan:
/boot
Direktori saya :
$ 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
Kernel 4.4.0 dan 4.2.0 haruslah Ubuntu, Arch harus memiliki kernel 4.5.0. Tetapi bagaimana saya mencari tahu file mana yang tidak memiliki versi kernel atas namanya?
Direktori root Ubuntu saya (direktori tidak termasuk):
$ 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
Direktori root Arch saya tidak mengandung file atau tautan apa pun.
os-prober
. kemudian jalankan inisudo mkinitcpio -p linux
lalusudo grub-mkconfig -o /boot/grub/grub.cfg
terakhirsudo grub-install /dev/sda
Root device mounted successfully, but /sbin/init does not exists
. Apakah Anda menyelidiki ini? Apakahinit
benar-benar hilang? Jika demikian, Anda harus menginstalnya, jika ada, ada ide mengapa tidak dapat ditemukan?Jawaban:
Saya akhirnya menyelesaikannya dengan nuking partisi Arch dan file bootnya di
/boot
direktori Ubuntu saya dari orbit. Ubuntu baik-baik saja lagi sekarang, semua entri GRUB yang tersisa berfungsi lagi.Berikut daftar yang saya lakukan:
Hapus
initramfs
file Arch :Hapus
vmlinuz
file Arch :Format partisi Arch (
/dev/sda8
) menggunakan GPartedPerbarui konfigurasi GRUB:
Reboot dan nikmatilah!
sumber
initramfs-linux
tidak...ranfs...
Memperbaiki grub.cfg dengan tangan (tidak disarankan)
Melihat milikmu
grub.cfg
entri Ubuntu rusak (dan beberapa yang berikut juga)
Dua baris terakhir adalah perintah grub Anda untuk memuat kernel dan initrd, dan saat ini mencari kernel ARCH dan initiramfs. Lebih jauh, ia mencari mereka di bawah
/
partisi yang diidentifikasiuuid=eee18451-b607-4875-8a88-c9cb6c6544c8
yang mungkin atau mungkin tidak meng-host file Ubuntu yang dimaksud.Anda dapat memperbaikinya dengan:
untuk mendapatkan uuid dari partisi root ubuntu Anda.
Kemudian ganti dua baris terakhir dengan simlink ke kernel dan gambar initrd terbaru Anda (karena ini adalah cara yang diharapkan ubuntu)
Jika ini tidak segera memperbaikinya, beberapa koreksi lainnya mungkin diperlukan. Anda dapat menemukannya dengan "menyalin" salah satu entri yang diuji dan berfungsi, dan saya akan merekomendasikan Anda menggunakan yang paling vanilla (mis. Tidak ada pemula atau parameter kernel lainnya seperti nomodeset yang sedang diteruskan).
Ini harus menjadi kandidat yang baik:
Entri Arch juga rusak, karena mungkin mencari Arch initramfs dan kernel di bawah partisi root Ubuntu. Lokasi default dari mereka adalah di bawah / boot. Sesuaikan dua baris terakhir entri Arch dengan mengoreksi lokasi dan memeriksa bahwa partisi root uuid adalah yang berisi root Arch.
A (beberapa) kata peringatan:
Secara umum TIDAK direkomendasikan untuk pengguna Ubuntu untuk mengacaukan dengan
grub.cfg
tangan. Membuat salinannya dengan hati-hati dan berhati-hati dalam mengeditnya. Bersiaplah untuk kemungkinan bahwa sistem Anda menjadi tidak dapat di-boot (tetapi Anda akan dapat menghidupkannya kembali menggunakan prosedur boot yang diuraikan dalam jawaban lama saya).Selain itu, saat ini mungkin memperbaiki masalah Anda kali ini, mungkin akan kembali menggigit Anda saat berikutnya Anda harus mengisi kembali menu grub Anda. Untuk beberapa alasan, os probing grub di bawah ubuntu menjadi bingung dengan keberadaan Arch kernel under / boot. Saya kira utilitas seperti boot-repair seharusnya dapat membuat semua distro Anda dapat di-boot dengan benar, tetapi jika saya ingat dengan benar itu tidak bekerja untuk Anda.
Satu perbaikan permanen mungkin terdiri dari menginstal kernel dan gambar arch di direktori yang berbeda dari default / boot. Ini fiddly dan Anda harus berkonsultasi dengan entri grub Arch wiki tentang cara melakukannya dengan benar.
JAWABAN TUA (disarankan jika Anda berencana untuk beralih ke Arch jangka panjang) Inilah yang akan saya lakukan, dan entah bagaimana telah dilakukan beberapa bulan yang lalu.
Pergi ke halaman grub wiki lengkung dan bacalah bagian yang relevan untuk tabel partisi Anda (Anda kemungkinan UEFI, jadi baca tentang ESP dan seterusnya).
Booting ke Arch secara manual
Ini adalah pengalaman yang sangat formatif yang saya sarankan coba. Dengan asumsi kernel Linux Arch Anda berada di suatu tempat di disk Anda, tekan
c
pada grub prompt dan ketik ls untuk melihat daftar perangkat dan partisi yang terlihat seperti(hd0,msdos1),(hd1,gpt1),...
. Anda dapat meminta mereka untuk melihat kontennya.Anda perlu menemukan tiga hal:
/
partisi root Arch Andavmlinuz
intiramfs-linux.img
setelah memiliki ketiga ini, Anda akan menjalankan tiga perintah di grub> meminta sesuatu yang mirip dengan ini.
Perhatikan bahwa grub dapat menemukan, mis
(satu grub tidak dapat menemukan secara otomatis dan membuat Anda panik kernel;))
Semua ini saya pelajari di sini , sumber yang sangat saya rekomendasikan. Jika Anda dapat mengelola, lewati untuk memperbaiki grub! Jika tidak...
Boot Arch dari kunci langsung! Dapatkan lingkungan Arch langsung dan ikuti wiki instalasi
chroot
ke Arch dengan cara yang sama seperti yang Anda lakukan pertama kali.Memperbaiki grub
Dari dalam Arch, instal paket grub yang relevan, dan khususnya
os-prober
untuk memungkinkangrub-install
untuk mendeteksi sistem lain. Ikuti dengan hati-hati panduan instalasi di sana dan Anda harus dapat (setidaknya) mem-boot kedua arch dan ubuntu dari menu grub. Menginstal perintah pada akhirnya akan tampak seperti ini.** Peringatan ** Jangan menjalankan perintah ini, mereka mencontohkan, Anda perlu mencari yang sesuai dengan sistem Anda
** Jika semuanya gagal **
Sayangnya, ini adalah spesifik karena mendapat jumlah info yang terbatas dan SE bukan benar-benar forum untuk masalah seperti itu, maka jawaban "generik" saya merujuk pada sumber daya yang bermanfaat.
Jika Anda tidak bisa mengetahuinya, mungkin mampir di forum Arch, dan asalkan Anda sudah mencoba yang terbaik dan membaca dokumen sebelumnya, Anda mungkin menemukan bantuan.
Melakukan semua ini melalui Arch telah menjadi pengalaman belajar yang mendasar bagi saya.
sumber
Solusi saya lebih sederhana. Saya menggunakan terminal dan melakukan hal berikut:
Jika Anda memiliki masalah lebih lanjut, gunakan saja
boot-repair
, yang merupakan unduhan gratis, cukup kecil untuk dibakar ke disk CD.sumber
update-grub
. Perbaikan-boot sangat tidak mungkin untuk membantu dengan masalah khusus ini.sudo grub-mkconfig -o /boot/grub/grub.cfg
ada di sana.update-grub
adalah skrip shell yang sangat sederhana yang berjalangrub-mkconfig -o /boot/grub/grub.cfg
. Anda dapat melihat ini dengancat /usr/sbin/update-grub
.