Dual boot windows pada harddisk kedua, sistem UEFI / GPT

15

Saya ingin menginstal linux, tetapi saya tidak ingin mengambil risiko merusak instalasi windows saya saat ini karena saya telah mendengar banyak cerita horor. Untungnya, saya memiliki hard drive ekstra. Bisakah saya menginstal linux ke dalamnya dan kemudian dual boot windows tanpa harus memodifikasi drive windows?

Juga, saya punya UEFI "BIOS" dan drive windows dalam format GPT.

goldilocks
sumber

Jawaban:

18

Saya akan menggunakan istilah BIOS di bawah ini ketika merujuk pada konsep yang sama untuk kedua sistem UEFI yang lebih baru dan sistem BIOS tradisional, karena sementara ini adalah pertanyaan berorientasi UEFI, berbicara tentang jibes "BIOS" yang lebih baik dengan, misalnya, dokumentasi GRUB , dan "BIOS / UEFI" terlalu kikuk. GRUB (sebenarnya, GRUB 2 - ini sering digunakan secara ambigu) adalah bootloader yang diinstal oleh linux dan digunakan untuk dual boot Windows.

Pertama, kata tentang urutan drive dan urutan boot. Urutan drive mengacu pada urutan di mana drive secara fisik terhubung ke bus pada motherboard (drive pertama, drive kedua, dll.); informasi ini dilaporkan oleh BIOS. Urutan bootmengacu pada urutan di mana BIOS memeriksa drive yang dapat di-boot. Ini tidak harus sama dengan urutan drive, dan biasanya dapat dikonfigurasi melalui layar pengaturan BIOS. Urutan drive seharusnya tidak dapat dikonfigurasi atau dipengaruhi oleh urutan boot, karena itu akan menjadi hal yang sangat tidak ramah untuk OS lakukan (tetapi secara teori BIOS tumpul bisa). Juga, jika Anda mencabut drive pertama, drive kedua kemungkinan akan menjadi yang pertama. Kita akan menggunakan UUID dalam mengkonfigurasi boot loader untuk mencoba dan menghindari masalah seperti ini (installer linux kontemporer juga melakukan ini).

Cara ideal untuk mendapatkan apa yang Anda inginkan adalah menginstal linux ke drive kedua dalam hal urutan drive dan kemudian memilihnya terlebih dahulu dalam hal urutan boot menggunakan UEFI set-up. Keuntungan tambahan dari ini adalah Anda kemudian dapat menggunakan urutan boot BIOS / UEFI untuk memilih drive windows dan memotong grub jika Anda mau. Alasan saya merekomendasikan linux pada drive kedua adalah karena GRUB harus "chainload" bootloader asli Windows, dan windows bootloader selalu menganggap itu pada drive pertama. Namun, ada cara untuk mengelabui jika Anda lebih suka atau membutuhkannya sebaliknya.

Mudah-mudahan, Anda bisa melanjutkan dan menggunakan CD langsung atau apa pun dan menyelesaikan ini menggunakan installer GUI. Namun, tidak semua penginstal dibuat sama, dan jika ini dikacaukan dan Anda memiliki masalah seperti:

  1. Saya menginstal linux ke disk pertama dan sekarang saya tidak bisa boot windows, atau

  2. Saya menginstal linux ke disk kedua, tetapi menggunakan disk pertama untuk bootloader, dan sekarang saya tidak bisa boot apa pun!

Terus membaca. Dalam kasus kedua, Anda harus terlebih dahulu mencoba dan menginstal ulang linux ke disk kedua, dan kali ini pastikan ke sanalah bootloader pergi. Cara termudah dan paling mudah untuk melakukan itu adalah dengan menghapus sementara drive Windows dari mesin, karena kita akan menganggap tidak ada tambahan yang diinstal di sana, terlepas dari urutan drive.

Setelah Anda menginstal linux dan memastikannya bisa boot, colokkan drive Windows kembali (jika Anda menghapusnya - dan ingat, kami idealnya menginginkannya terlebih dahulu dalam hal urutan drive, dan drive kedua pertama dalam hal urutan boot) dan lanjutkan ke langkah berikutnya.

Mengakses konfigurasi GRUB

Boot linux, buka terminal, dan

> su root

Anda akan dimintai kata sandi root. Dari titik ini ke depan, Anda adalah pengguna super di terminal itu (untuk memeriksa, mencoba whoami), jadi jangan melakukan hal bodoh. Namun, Anda masih pengguna biasa di GUI, dan karena kami akan mengedit file teks, jika Anda lebih suka editor GUI kami harus mengubah sementara kepemilikan file itu dan direktori itu di:

> chown -R yourusername /etc/grub.d/

Jika Anda mendapatkan "Operasi tidak diizinkan", Anda tidak melakukannya sudengan benar. Jika Anda mendapatkannya chown: invalid user: ‘yourusername’, Anda mengambil perintah terakhir terlalu harfiah.

Anda sekarang dapat menavigasi ke /etc/grub.dserver file Anda dan mencari file bernama 40_custom. Seharusnya terlihat seperti ini:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

Jika Anda tidak dapat menemukannya, di terminal root masukkan perintah berikut:

> touch /etc/grub.d/40_custom
> chmod 755 /etc/grub.d/40_custom
> chown yourusername /etc/grub.d/40_custom

Buka di editor teks Anda, salin tempel bagian di atas (mulai dengan #!/bin/sh) dan lanjutkan ke langkah berikutnya.

Menambahkan opsi boot Windows

Salin-rekatkan ini dengan editor teks di akhir file:

menuentry "MS Windows" {
        insmod part_gpt
        insmod search_fs_uuid
        insmod ntfs
        insmod chain
}

Ini adalah daftar modul yang GRUB perlu untuk menyelesaikan sesuatu ( ntfsmungkin berlebihan, tetapi tidak harus melukai apa pun juga). Perhatikan bahwa ini adalah entri yang tidak lengkap - kita perlu menambahkan beberapa perintah penting.

Menemukan Bootloader Tahap Kedua Windows

Instalasi linux Anda mungkin telah mengotomatiskan partisi Windows Anda dan Anda harus dapat menemukannya di browser file. Jika tidak, cari tahu cara membuatnya (jika Anda tidak yakin bagaimana caranya, ajukan pertanyaan di situs ini). Setelah selesai, kita perlu mengetahui titik mount - ini harus jelas di browser file, mis /media/ASDF23SF23/. Untuk menyimpan beberapa pengetikan, kita akan memasukkannya ke variabel shell:

win="/whatever/the/path/is"

Seharusnya tidak ada spasi di kedua sisi tanda sama dengan. Jangan sertakan elemen jalur Windows di sini. Ini harus mengarah ke folder tingkat atas pada partisi Windows. Sekarang:

cd $win
find . -name bootmgfw.efi

Ini bisa memakan waktu beberapa menit jika Anda memiliki partisi besar, tetapi kemungkinan besar hal pertama yang dimuntahkannya adalah apa yang kami cari; mungkin ada referensi lebih lanjut dalam sistem file yang berisi string goobledygook yang panjang - bukan itu. Gunakan Ctrl-cuntuk menghentikan pencarian begitu Anda melihat sesuatu yang pendek dan sederhana seperti ./Windows/Boot/EFI/bootmgfw.efiatau ./EFI/HP/boot/bootmgfw.efi.

Kecuali .pada awalnya, ingatlah jalan ini untuk nanti; Anda dapat menyalinnya ke editor teks Anda pada baris kosong di bagian bawah, karena kami akan menggunakannya di sana. Jika Anda ingin kembali ke direktori Anda sebelumnya sekarang, gunakan cd -, meskipun tidak masalah di mana Anda berada di shell dari sini maju.

Mengatur Parameter yang Tepat

GRUB harus dapat menemukan dan menyerahkan proses boot ke bootloader Windows tahap kedua. Kami sudah memiliki path di partisi Windows, tetapi kami juga membutuhkan beberapa parameter untuk memberi tahu GRUB di mana partisi itu berada. Seharusnya ada alat yang diinstal pada sistem Anda yang disebut grub-probeatau (aktif, misalnya, Fedora) grub2-probe. Ketik grublalu tekan Tabdua atau tiga kali; Anda harus melihat daftar termasuk yang satu atau yang lain.

> grub-probe --target=hints_string $win

Anda harus melihat string seperti:

--hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1

Kembali ke editor teks dengan konfigurasi GRUB di dalamnya dan tambahkan baris setelah semua insmodperintah (tetapi sebelum kurung kurawal penutupan) sehingga terlihat seperti:

    insmod chain
    search --fs-uuid --set=root [the complete "hint bios" string]
}

Jangan putus garis itu atau biarkan editor teks Anda melakukannya. Mungkin membungkus di layar - cara mudah untuk mengetahui perbedaannya adalah dengan mengatur penomoran baris. Lanjut:

> grub-probe --target=fs_uuid $win

Ini harus mengembalikan string huruf, angka, dan tanda hubung yang lebih pendek seperti "123A456B789X6X" atau "b942fb5c-2573-4222-acc8-bbb883f19043". Tambahkan ke akhir search --fs-uuidbaris setelah string bios petunjuk, dipisahkan dengan spasi.


Selanjutnya, jika (dan hanya jika) Windows berada di drive kedua dalam hal urutan drive , tambahkan baris setelah search --fs-uuidbaris:

    drivemap -s hd0 hd1

Ini "trik" yang disebutkan sebelumnya. Perhatikan itu tidak dijamin untuk bekerja tetapi tidak ada salahnya untuk mencoba.


Akhirnya, baris terakhir seharusnya:

    chainloader (${root})[the Windows path to the bootloader]
}

Untuk lebih jelasnya, misalnya:

    chainloader (${root})/Windows/Boot/EFI/bootmgfw.efi

Itu dia. Simpan file dan periksa di browser file untuk memastikan itu benar-benar telah disimpan dan terlihat seperti seharusnya.

Tambahkan Opsi Menu Baru ke GRUB

Ini dilakukan dengan alat yang disebut grub-mkconfigatau grub2-mkconfig; itu akan ada dalam daftar yang Anda temukan Tabsebelumnya. Anda mungkin juga memiliki perintah aa dipanggil update-grub. Untuk memeriksanya, cukup ketik di terminal root. Jika Anda mendapatkan "perintah tidak ditemukan", Anda harus menggunakan grub-mkconfigsecara langsung. Jika tidak (termasuk mendapatkan kesalahan yang lebih lama), Anda baru saja mengatur konfigurasi dan dapat membaca sedikit.

Untuk menggunakan grub-mkconfigsecara langsung, pertama-tama kita perlu menemukan grub.cfg:

> find /boot -name grub.cfg

Ini mungkin akan /boot/grub/grub.cfgatau /boot/grub2/grub.cfg.

> grub-mkconfig -o /boot/grub/grub.cfg

update-grubsecara otomatis akan memindai konfigurasi untuk kesalahan. grub-mkconfigtidak akan, tetapi penting untuk melakukannya karena jauh lebih mudah untuk berurusan dengan mereka sekarang daripada ketika Anda mencoba untuk mem-boot mesin. Untuk ini, gunakan grub-script-check(atau grub2-script-check):

> grub-script-check /boot/grub/grub.cfg

Jika ini (atau update-grub) menghasilkan kesalahan yang menunjukkan nomor baris, itu adalah nomor baris di grub.cfg, tetapi Anda harus memperbaiki bagian yang terkait di dalam /etc/grub.d/40_custom(file di editor teks Anda). Anda mungkin perlu root hanya untuk melihat file sebelumnya, jadi coba less /boot/grub/grub.cfgdi terminal, tekan :, dan masukkan nomor baris. Anda harus melihat entri menu Anda. Temukan kesalahan ketik, koreksi di editor teks, dan jalankan update-grubatau grub-mkconfiglagi.

Setelah selesai, Anda dapat menutup editor teks dan mengetik exitterminal untuk meninggalkan mode superuser.

Nyalakan kembali!

Saat Anda masuk ke menu grub, gulir ke bawah dengan cepat (sebelum batas waktu berakhir, biasanya 5 detik) ke opsi "Windows" dan mengujinya. Jika Anda mendapatkan pesan kesalahan dari grub, ada yang salah dengan konfigurasi. Jika Anda mendapatkan pesan kesalahan dari Windows , masalah itu ada di antara Anda dan Microsoft. Namun, jangan khawatir, drive Windows Anda belum dimodifikasi dan Anda akan dapat mem-boot langsung ke dalamnya dengan menempatkannya terlebih dahulu (dalam hal urutan boot) melalui pengaturan BIOS.

Ketika Anda kembali ke linux lagi, kembalikan kepemilikan /etc/grub.ddirektori dan isinya ke keadaan semula:

sudo chmod 755 /etc/grub.d/40_custom

Referensi

goldilocks
sumber
2
Istilah yang benar secara teknis yang Anda cari, yang juga tidak kikuk, adalah firmware , yang dapat muncul sebagai BIOS atau UEFI.
Milind R
Sayangnya firmware juga memiliki makna yang jauh lebih umum karena mengacu pada perangkat lunak apa pun yang disematkan ke perangkat keras.
Kylotan
di desktop saya, "rantai" tidak berdasar sebagai perintah saat booting, tetapi chainloader di file 40_custom yang saya perlu tulis. beri tahu saya jika ini normal
FlogFR
Sangat bagus! Namun ketika saya mencoba ini, instalasi Windows 8 saya tidak akan muncul sebagai entri di grub2. Saya telah memperbaiki semua kesalahan sintaks dan file grub.cfg dibuat tanpa kesalahan. Perlu diketahui juga bahwa ada kesalahan sintaks ketika chainload disebutkan pertama kali: chainload $({root})seharusnya chainload (${root})(saya tidak dapat mengeditnya karena terlalu kecil dari perubahan).
sobek
@sobek Terima kasih untuk itu - diperbaiki. Jika Anda telah menambahkan sesuatu ke file /etc/grub.ddan itu tidak ditambahkan ketika Anda menghasilkan konfigurasi, sesuatu yang aneh sedang terjadi. Jika Anda berjalan grub-mkconfigtanpa -omeludah ke standar, itu mungkin membantu mengkonfirmasi atau menolak bahwa penambahan Anda sedang diproses.
goldilocks