Bagaimana cara menghapus GRUB?

19

Hard drive yang saya gunakan hanya untuk penyimpanan data masih memiliki GRUB dari instalasi Ubuntu sebelumnya.

Bagaimana saya bisa menghapus GRUB darinya tanpa merusak data drive lainnya?

Latar Belakang

Saya kadang-kadang memindahkan drive data antara komputer dengan berbagai konfigurasi urutan boot, jadi saya ingin agar non-bootable untuk menghindari keharusan mengakomodasinya di pengaturan BIOS setiap komputer.

Ketika saya menyalakan komputer saat hanya drive data terpasang, yang berikut ini muncul:

error: no such device: fdf38dd4-9e9d-479d-b830-2a6989958503.
grub rescue> 

Saya dapat mengonfirmasi dari cadangan lama /etc/fstabbahwa ini adalah UUID dari partisi root yang baru-baru ini saya format ulang dan tidak lagi ada . Berikut tabel partisi drive data dan catatan boot master mentah .

Harap dicatat bahwa saya tidak tertarik dengan solusi yang tidak menjawab pertanyaan utama saya. Saya dapat memikirkan beberapa cara untuk mengatasi masalah ini, tetapi pada dasarnya saya merasa terganggu karena saya tidak tahu bagaimana cara mengatasinya secara langsung. Setiap prosedur instalasi harus memiliki prosedur penghapusan mitra.

ændrük
sumber
Hanya ingin tahu - jika Anda menghapus file di / boot / grub (yang saya asumsikan Anda lakukan), apakah kode mbr benar-benar penting? Saya tidak berpikir itu akan digunakan oleh hal lain, bukan? Saya bisa saja salah, tetapi saya tidak akan berpikir itu akan digunakan, dan saya akan benci untuk bermain-main dengan sesuatu pada tingkat rendah seperti itu jika saya peduli dengan data.
Marty Fried
Bisakah Anda membuang data MBR mentah dan mempostingnya di sini? Anda harus dapat melakukan sesuatu seperti sfdisk -d /dev/sdb > sdb.out.
Terobosan

Jawaban:

25

Anda dapat membuat perangkat tidak dapat di-boot hanya dengan membuat beberapa byte pertama dari disk 0x00.

Biasanya (dan ini berlaku untuk grub, grub2 dan ntldr iirc) byte pertama dari drive Anda akan menjadi instruksi x86 jmp. Ini terjadi bahkan sebelum disklabel, karena ketika meneruskan eksekusi ke perangkat untuk bootstrap, ia hanya mengatur CPU untuk menyedot informasi perangkat sebagai kode. Jika memiliki kode yang tidak valid, hal itu memicu interupsi dan BIOS menangani pengecualian dan pergi ke perangkat yang dapat dibooting berikutnya.

Misalnya, awal disk saya dimulai dengan:

00000000  eb 63 90 d0 bc 00 7c fb  50 07 50 1f fc be 1b 7c  |.c....|.P.P....||

Bagian pertama eb 63adalah Jump untuk mengimbangi 0x63 dari IP saat ini (jadi ke 0x65).

00000060  00 00 00 00 ff fa 90 90  f6 c2 80 74 05 f6 c2 70  |...........t...p|
00000070  74 02 b2 80 ea 79 7c 00  00 31 c0 8e d8 8e d0 bc  |t....y|..1......|

Eksekusi berlanjut dari sini.

Akhir dari sektor ini terlihat seperti ini:

000001b0  cd 10 ac 3c 00 75 f4 c3  ed db 96 d6 00 00 80 01  |...<.u..........|
000001c0  01 00 83 fe ff ff 3f 00  00 00 c1 07 a6 0e 00 fe  |......?.........|
000001d0  ff ff 83 fe ff ff 00 60  00 11 00 00 38 29 00 fe  |.......`....8)..|
000001e0  ff ff 82 fe ff ff 00 08  a6 0e 00 58 5a 02 00 00  |...........XZ...|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|

Jika disk Anda diformat sebagai tabel partisi MBR maka hanya perlu dua hal untuk hadir, tabel partisi yang di offset 0x1bedan tanda tangan MBR, 55aayang terjadi di bagian paling akhir sektor di offset 0x1fe. 0x1beadalah desimal 446.

Berikut ini akan (tentu saja) membuat perangkat unbootable. Tapi ini yang kamu inginkan. Jika Anda tidak ingin perangkat Anda tidak dapat di-boot maka jangan lakukan ini, mmm-kay? Saya berasumsi bahwa perangkat Anda adalah /dev/sdz, hanya karena tidak banyak orang memilikinya /dev/sdz, dan ini menurunkan risiko beberapa orang idiot pemula secara buta menyalin perintah menempel.

Pertama, salin MBR ke file untuk cadangan.

sudo dd if=/dev/sdz of=/some/where/safe/preferably/not/on/dev/sdz/backup.mbr bs=512 count=1

Selanjutnya, buat salinan file itu:

cp backup.mbr backup.mbr.test

Selanjutnya, kita harus membuat perangkat loopback (sehingga konten tidak terpotong.) Dan menerapkan perubahan pada sektor 0 palsu kami sebagai ujian:

sudo losetup /dev/loop7 backup.mbr.test
sudo dd if=/dev/zero of=/dev/loop7 bs=446 count=1
sudo losetup -d /dev/loop7

hexdump file dan pastikan seluruh tabel partisi utuh:

sudo hexdump -C backup.mbr.test

Anda harus melihat sesuatu seperti:

00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000001b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 80 01  |................|
000001c0  01 00 83 fe ff ff 3f 00  00 00 c1 07 a6 0e 00 fe  |......?.........|
000001d0  ff ff 83 fe ff ff 00 60  00 11 00 00 38 29 00 fe  |.......`....8)..|
000001e0  ff ff 82 fe ff ff 00 08  a6 0e 00 58 5a 02 00 00  |...........XZ...|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200

Sekarang, 0x1beadalah di mana Anda melihat 80pada output hexdumped, ini juga bisa 00dan masih berlaku. (Ini bendera "bootable" di tabel partisi, Anda dapat membiarkannya sendiri, karena sepenuhnya diabaikan oleh sebagian besar BIOS modern ...) Byte pada 0x1bfhampir tidak akan pernah0x00 (itu paling umum 0x01tetapi dapat mengambil nilai lain) Anda dapat membandingkan ini dengan Anda backup.mbruntuk memastikan bahwa tidak ada masa lalu 0x1beyang berubah.

Setelah Anda puas bahwa Anda menerapkan perubahan dengan benar maka Anda dapat langsung menyalin file ke bagian pertama disk. Alasan mengapa Anda ingin melakukan file daripada /dev/zerolagi adalah untuk keamanan terhadap kesalahan ketik. Jika Anda secara tidak sengaja menghilangkan count=1waktu yang buruk, menyalin file di sisi lain tidak akan pernah melewati EOF, selamanya. Jadi lebih aman.

sudo dd if=backup.mbr.test of=/dev/sdz

Selanjutnya hexdumpdisk Anda untuk memastikan bahwa perubahan itu terjadi seperti yang diharapkan.

hexdump -C /dev/sdz | head

Bandingkan hingga 0x200menentang backup.mbr.testuntuk memastikan itu yang Anda inginkan.

Akhirnya, jika ada yang kacau karena alasan apa pun Anda bisa menyalin cadangan MBR kembali ke drive melalui:

sudo dd if=backup.mbr of=/dev/sdz

Semoga ini membantu.

OmnipotentEntity
sumber
1
Saya memberi Anda satu plus untuk mengantisipasi dan mencegah kesalahan noob yang serius.
psitae
Terima kasih banyak, saya melakukan yang terbaik untuk mencegah kesalahan noob sebanyak mungkin: membuat cadangan, tidak menulis langsung ke perangkat blok jika count- kalau dilupakan, tidak secara langsung menggunakan nama perangkat blok umum, menentukan bahwa file cadangan harus dibuat off dari perangkat yang sedang berubah, contoh seperti apa pembersihan yang sukses terlihat, bagaimana membatalkan jika Anda mengacaukan. Saya pikir jika Anda cukup berpengetahuan untuk mengetahui apa yang saya maksudkan, Anda dapat memotong langkah-langkah bayi dan hanya melakukan semua ini dalam satu perintah. Tapi saya tidak akan memberi Anda perintah itu jika Anda masih belajar. ;)
OmnipotentEntity
2

PERINGATAN: SANGAT BERBAHAYA

Anda dapat menggunakan perintah dd dari Linux itu sendiri (ini menghapus tabel partisi):

 # dd if=/dev/null of=/dev/sdX bs=512 count=1

Hapus saja MBR, tanpa tabel partisi (lihat komentar di bawah):

# dd if=/dev/null of=/dev/sdX bs=446 count=1

Ganti /dev/hdXdengan nama perangkat Anda yang sebenarnya seperti /dev/hda. Gunakan fdisk -lperintah untuk mencari tahu nama perangkat:

# fdisk -l

Sumber

  1. http://www.cyberciti.biz/faq/linux-how-to-uninstall-grub/
Tachyons
sumber
Hitungan byte tersebut terlihat sewenang-wenang. Apakah Anda tahu kalau mereka sama untuk GRUB2?
ændrük
1
Hitungan byte adalah karena tabel partisi terletak antara 446 dan 512. Tentu saja, ini menimbulkan pertanyaan mengapa Anda ingin menghapus MBR grub ... tidak ada salahnya hanya duduk di sana tanpa digunakan. Jika Anda menginginkan bootloader lain sebagai gantinya, cukup instal dan itu akan menggantikan grub.
psusi
3
Wow, jenis jawaban ini harus memiliki "PERINGATAN: SANGAT BERBAHAYA" ditulis dengan huruf merah besar di atasnya. Saya yakin OP mampu melakukan ini, tetapi saya benci melihat beberapa pengguna baru menyalin-menempelkan perintah pertama ke terminal tanpa tahu apa itu "tabel partisi"
Sergey
1
Jangan tidak melakukan hal ini . Perintah pertama akan menghapus tabel partisi (seperti OP disebutkan), tetapi perintah kedua akan menyebabkan perilaku yang tidak ditentukan jika MBR tidak dikonfigurasi dengan benar.
Terobosan
1
Umm .. Aku tidak tahu kenapa kalian panik, perintah yang disisipkan tachyons tidak melakukan apa-apa sama sekali. Anda dapat menguji dengan touch testfile, dd if=/dev/urandom of=testfile bs=512 count=1, sudo losetup /dev/loop7 testfile, sudo dd if=/dev/null of=/dev/loop7 bs=446 count=1, sudo hexdump -Cv /dev/loop7. Seperti yang Anda lihat /dev/nullbukan sumber 0, ini adalah sumber EOF. ddtidak dapat dan tidak akan menyalin apa pun dari /dev/nullyang perlu Anda gunakan /dev/zero. Terobosan @ kedua, tidak mungkin ada perilaku tidak terdefinisi jika byte pertama dari sektor 0 adalah 0x00. Saya tidak tahu mengapa Anda berpikir begitu.
OmnipotentEntity
1

Pengalaman saya dengan

sudo install-mbr -i n -p D -t 0 /dev/sda

adalah, bahwa itu berhasil menghapus grub2 dari /dev/sda(tempat Windows 7 saya diinstal), jadi bagian pertama dari pertanyaan "Bagaimana cara menghapus grub dari / dev / sda?" telah dijawab.

Namun, bagian kedua dari pertanyaan, yaitu "Bagaimana cara mengembalikan MBR dari / dev / sda?" belum dijawab sejak install-mbrperintah gagal mengembalikan MBR. Akibatnya, Windows tidak bisa boot lagi dan manajer boot Windows melaporkan kesalahan tentang MBR yang rusak dan meminta pengguna untuk memperbaiki dari CD perbaikan windows.

pengguna ubuntu-13.10
sumber
1

Setelah membaca artikel Wikipedia tentang masalah ini, saya ingin mengusulkan beberapa solusi tambahan:

  1. Ubah urutan boot di BIOS :)

  2. Yang terbaik dan teraman: gunakan fdiskuntuk menghapus flag "bootable" dari setiap partisi pada drive itu. Sebagian besar MBR mencari partisi "bootable" untuk rantai-load dari, jadi saya berharap GRUB tidak melakukan apa-apa jika tidak ada partisi seperti itu. Belum diuji.

    Jika hal di atas tidak membantu, coba pasang klon gratis dari kode MBR standar:

  3. Instal mbrpaket dan gunakan install-mbrperintah seperti ini:

    sudo apt-get install mbr
    sudo install-mbr -i n -p D -t 0 /dev/sda
    

Kredit: CARA: Memulihkan Windows MBR menggunakan Ubuntu LIVE CD

Dari membaca artikel Wikipedia, saya mendapat kesan bahwa satu-satunya hal yang mengidentifikasi MBR adalah tanda tangannya yang berada di ujung sektor (byte 510 dan 511). 446 byte pertama MBR seharusnya berisi instruksi mesin. BIOS seharusnya mentransfer kontrol ke bootloader terlepas dari konten sebenarnya dari 446 byte pertama, asalkan tanda tangan MBR hadir:

Pada komputer yang kompatibel dengan PC IBM, firmware bootstrap yang terkandung dalam ROM BIOS dimuat dan menjalankan catatan boot master. [14] ... Dengan demikian, awal MBR diharapkan berisi instruksi bahasa mesin mode real. [14] BIOS membaca MBR dari perangkat penyimpanan ke dalam memori fisik, dan kemudian mengarahkan mikroprosesor ke awal kode booting.

Karena ukuran terbatas pada bagian kode MBR, biasanya hanya berisi program kecil yang menyalin kode tambahan (seperti boot loader) dari perangkat penyimpanan ke dalam memori. Kontrol kemudian diteruskan ke kode ini, yang bertanggung jawab untuk memuat sistem operasi yang sebenarnya.

...

Urutan bootstrap di BIOS akan memuat MBR valid pertama yang ditemukan ke memori fisik komputer di alamat 0x7C00. Instruksi terakhir yang dieksekusi dalam kode BIOS akan menjadi "lompatan" ke alamat itu, untuk mengarahkan eksekusi ke awal salinan MBR. Validasi utama untuk sebagian besar BIOS adalah tanda tangan 0xAA55 pada akhirnya, meskipun implementor BIOS dapat memilih untuk memasukkan pemeriksaan lain, seperti memverifikasi bahwa MBR berisi tabel partisi yang valid tanpa entri yang merujuk ke sektor-sektor di luar kapasitas disk yang dilaporkan.

Jadi pemahaman saya adalah bahwa MBR selalu seharusnya berisi bootloader, dan memberi nol pada 446 byte pertama tidak akan menghentikan BIOS untuk mencoba mem-boot dari disk - tetapi sepertinya komputer akan hang saat mencoba mengeksekusi kode yang tidak valid.

UPDATE: Juga, artikel ini menyarankan bahwa untuk membuat disk terlihat "tidak bisa di-boot" untuk BIOS, Anda harus benar-benar mengedit tanda tangan MBR di dan sektor (menggunakan editor disk apa saja). Saya tidak yakin apakah itu akan mempengaruhi OS melihat tabel partisi pada disk ... tapi setidaknya Anda selalu dapat memodifikasi byte itu kembali ...

Sergey
sumber
0

Solusi lain yang lebih sederhana.

Dalam kasus saya saya punya linux Debian tetapi ingin menggunakan Mandriva, akan bekerja untuk orang lain juga

Matikan pc Anda, kemudian hapus disk yang melakukan boot yang Anda tidak ingin boot (yang memiliki grub)

Cukup masukkan usb yang dapat di-boot yang dibuat dari mandriva iso atau varian lain yang ingin Anda instal ada alat untuk membuat tongkat usb yang dapat di-boot dari file iso menggunakan google (atau Anda dapat menggunakan installer yang dibakar dari cd rom)

Sekarang sebagian besar penginstal linux memberi Anda pilihan apa yang harus dilakukan, coba dan mainkan / gunakan untuk evaluasi atau portable linux atau jalankan pengaturan untuk menginstalnya. Pada titik ini kita hanya menunggu (bergerak ke bawah kursor sehingga layar akan menunggu tetapi jangan tekan enter atau klik dengan mouse).

Hanya ingatkan pada titik ini USB / atau / CDRom Anda sudah mulai dan sedang berjalan. sekarang saatnya untuk plugin kembali harddisk yang kita temporaly dihapus tunggu sebentar (beberapa bios memang perlu menunggu sebentar lebih dari cukup)

Lanjutkan ke proses penyiapan karena sebagian besar penginstal berisi alat partisi yang dapat Anda lakukan apa pun yang Anda inginkan. baik itu solusi sederhana, saya menyingkirkan setup linux lama hanya sebagai pemula

Peter
sumber
0

Pertanyaan lama, tetapi seperti yang terjadi pada saya kemarin, saya menyelesaikannya seperti ini: Saya mematikan komputer, secara fisik memutus hard drive yang diserang, menyalakan kembali komputer, lalu

~ $ sudo update-grub

Setelah selesai, saya mematikan komputer, menghubungkan kembali hard drive dan partisi Windows 7 lama saya, yang sudah tidak ada lagi sejak 2 tahun yang lalu, tidak muncul — akhirnya.

Saya mengerti ini adalah solusi sederhana, tetapi berhasil. Suatu hari saya akan menghapus hard drive itu sepenuhnya, dan sisa jejak GRUB akan hilang.

ElStellino
sumber