GRUB'u nasıl kaldırabilirim?


19

Yalnızca veri depolama için kullandığım sabit diskte, geçmişte Ubuntu kurulumlarından GRUB var.

Sürücünün geri kalanına zarar vermeden GRUB'u ondan nasıl kaldırabilirim?

Arka fon

Bazen veri sürücüsünü çeşitli önyükleme sırası yapılandırmalarına sahip bilgisayarlar arasında taşıyorum, bu yüzden her bilgisayarın BIOS ayarlarına uymak zorunda kalmamak için önyükleme yapmamasını istiyorum .

Yalnızca veri sürücüsü takılıyken bir bilgisayarı açtığımda, aşağıdakiler görünür:

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

Eski yedeklemelerden, /etc/fstabbunun yakın zamanda yeniden biçimlendirdiğim ve artık var olmayan bir kök bölümün UUID'si olduğunu doğrulayabilirim . İşte veri sürücüsünün bölüm tablosu ve ham ana önyükleme kaydı .

Birincil sorumu yanıtlamayan geçici çözümlerle ilgilenmediğimi lütfen unutmayın. Bu soruna geçici bir çözüm bulmak için birkaç yol düşünebilirim, ancak doğrudan nasıl çözeceğini bilmediğim ilkesi beni rahatsız ediyor. Her kurulum prosedürünün bir karşı taraf kaldırma prosedürü olmalıdır.


Sadece merak ediyorum - / boot / grub içindeki dosyaları silerseniz (ki yaptığınızı varsaydım), mbr kodu gerçekten önemli mi? Başka bir şey tarafından kullanılacağını sanmıyorum, değil mi? Yanlış olabilirdim, ama bunun kullanılacağını düşünmezdim ve verileri önemsiyor olsaydım bu kadar düşük bir şeyle uğraşmaktan nefret ederim.
Marty Fried

Ham MBR verilerini döküp buraya gönderebilir misiniz? Böyle bir şey yapabilmelisin sfdisk -d /dev/sdb > sdb.out.
Atılım

Yanıtlar:


25

0x00 diskinin ilk birkaç baytını yaparak cihazı önyüklenemez hale getirebilirsiniz.

Genellikle (ve bu hem grub, grub2 ve ntldr iirc için geçerlidir) sürücünüzün ilk baytı bir x86 jmp komutu olacaktır. Bu, disk etiketinden bile önce gerçekleşir, çünkü önyükleme yapmak için cihaza yürütmeyi geçirirken, CPU'yu cihaz bilgisini kod olarak emecek şekilde ayarlar. Geçersiz kodu varsa, bir kesmeyi tetikler ve BIOS istisnayı işler ve bir sonraki önyüklenebilir aygıta gider.

Örneğin, diskimin başlangıcı şununla başlar:

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

İlk bölüm, eb 63geçerli IP'den 0x63'e (yani 0x65'e) atlamaktır.

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......|

İcra buradan devam ediyor.

Sektörün sonu şöyle:

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.|

Diskiniz bir MBR bölümleme tablosu olarak biçimlendirilmişse, yalnızca iki şeyin bulunması gerekir: ofsette olan bölme tablosu ve ofsette sektörün sonundaki 0x1beMBR imzası . ondalık 446.55aa0x1fe0x1be

Aşağıdakiler (elbette) cihazı önyüklenemez hale getirecektir. Ama istediğin bu. Cihazınızın önyükleme yapmasını istemiyorsanız, bunu yapmayın, mmm-kay? Cihazınızın, /dev/sdzbirçok insanın sahip olmadığı için olduğunu düşünüyorum /dev/sdzve bu, aptal bir aceminin kör bir şekilde yapıştırma komutlarını kopyalama riskini azalttığını düşünüyorum.

İlk olarak, MBR'yi yedekleme için bir dosyaya kopyalayın.

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

Ardından, bu dosyanın bir kopyasını oluşturun:

cp backup.mbr backup.mbr.test

Daha sonra, bir geri döngü cihazı oluşturmalıyız (böylece içerik kesilmez.) Ve sahte sektör 0'ımızdaki değişiklikleri bir test olarak uygulamalıyız:

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 ve tüm bölüm tablosunun sağlam olduğundan emin olun:

sudo hexdump -C backup.mbr.test

Şuna benzer bir şey görmelisiniz:

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

Şimdi, onaltılık çıktıda 0x1begördüğünüz 80yer, bu da 00geçerli olabilir ve hala geçerli olabilir. (Bu, bölüm tablosundaki "önyüklenebilir" bayrağı, yalnız bırakabilirsiniz, çünkü çoğu modern BIOS tarafından tamamen göz ardı edilir ...) Yine de bayt 0x1bfneredeyse hiç olmayacak 0x00(en yaygın olanı 0x01ancak diğer değerleri alabilir) backup.mbrgeçmişin 0x1bedeğiştirilmediğinden emin olmak için bunu kendinizle karşılaştırabilirsiniz .

Değişikliği doğru bir şekilde uyguladığınızdan memnun olduğunuzda, dosyayı doğrudan diskin ilk kısmına kopyalayabilirsiniz. Dosyayı bir kez daha yapmak istemenizin nedeni /dev/zeroyazım hatalarına karşı güvenlik içindir. Yanlışlıkla count=1kötü bir zaman geçireceğinizi ihmal ederseniz, bir dosyayı kopyalamak EOF'u asla geçmeyecektir. Yani daha güvenli.

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

Sonraki hexdumpDisk emin değişiklikler beklendiği aldı emin olmak için.

hexdump -C /dev/sdz | head

Kadar Karşılaştırma 0x200karşı da backup.mbr.testemin istediğini olması için.

Son olarak, herhangi bir nedenden ötürü herhangi bir şey bozulursa, MBR'nin yedeğini aşağıdaki yolla sürücüye kopyalayabilirsiniz:

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

Bu yardımcı olur umarım.


1
Ciddi bir çaylak hatasını tahmin etmek ve önlemek için size artı bir tane veriyorum.
Mart'ta psitae

Bir demet teşekkürler, mümkün olduğunca çok sayıda noob hatasını önlemek için elimden geleni yaptım: bir yedekleme yapmak count, unutulması durumunda doğrudan blok cihaza yazmamak, doğrudan bir blok cihaz adı kullanmak değil, yedekleme dosyasının yapılması gerektiğini belirterek cihazdan çıkarıldığında, başarılı bir takas işleminin nasıl göründüğüne, vidalanırsanız nasıl geri alınacağına bir örnek. Sana ne aldığımı bilecek kadar bilgili olup olmadığınızı anlıyorum, bebek adımlarını kesebilir ve tüm bunları tek bir komutla yapabilirsiniz. Ama hala öğreniyorsan sana bu emri vermeyeceğim. ;)
OmnipotentEntity

2

UYARI: ÇOK TEHLİKELİ

Linux'un kendisinden dd komutunu kullanabilirsiniz (bölüm tablosunu kaldırır):

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

Bölüm tablosu olmadan MBR'yi kaldırmanız yeterlidir (aşağıdaki yoruma bakın):

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

/dev/hdXGerçek cihaz adınızla değiştirin /dev/hda. fdisk -lCihaz adını bulmak için command komutunu kullanın :

# fdisk -l

Kaynak

  1. http://www.cyberciti.biz/faq/linux-how-to-uninstall-grub/

Bu bayt sayıları rahatsız edici şekilde keyfi görünüyor. GRUB2 için aynı olup olmadıklarını biliyor musunuz?
ændrük

1
Bayt sayısı, bölüm tablosunun 446 ve 512 arasında olması nedeniyle. Tabii ki, bu neden grub MBR'yi kaldırmak istediğiniz sorusunu yalvarır ... sadece orada kullanılmamış bir şeyleri incitmez. Bunun yerine başka bir önyükleyici yükleyici istiyorsanız, sadece yükleyin ve grubun yerini alacaktır.
psusi

3
Vay be, bu tür bir cevabın her yerinde büyük kırmızı harflerle yazılmış "UYARI: ÇOK TEHLİKELİ TEHLİKELİ" olmalıdır. Ben OP bunu yapabiliyor eminim ama bazı "acemi kullanıcı" ne "bölüm tablosu" ne olduğunu bile bilmeden terminaline ilk komutu kopya-yapıştırma görmek nefret ediyorum
Sergey

1
Do not Bunu yapmak . İlk komut bölüm tablosunu siler (OP'nin belirttiği gibi), ancak ikinci komut MBR düzgün yapılandırılmazsa tanımlanmamış davranışa neden olur.
Atılım

1
Umm .. Neden korktuğunuzu bilmiyorum, takyonların yapıştırdığı komutlar hiçbir şey yapmıyor. Sen ile test edebilirsiniz 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. Gördüğünüz gibi /dev/null0 kaynağı değil, bir EOF kaynağı. kullanmanız gereken ddhiçbir şeyi kopyalayamaz ve kopyalamaz . İkinci @Breakthrough, eğer sektör 0'ın ilk baytı ise tanımsız davranış mümkün değildir . Neden böyle düşündüğünü bilmiyorum. /dev/null/dev/zero0x00
OmnipotentEntity

1

Deneyimim

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

, grub2'yi başarıyla yüklediğimden /dev/sda(Windows 7'nin yüklü olduğu yerde), bu yüzden sorunun ilk bölümü " grub'u / dev / sda'dan nasıl kaldırabilirim?" yanıtlandı.

Ancak, sorunun "2. dev / sda MBR'sini nasıl geri yüklerim?" install-mbrkomut MBR'yi geri yükleyemediği için yanıtlanmadı . Sonuç olarak, Windows artık önyükleme yapmıyor ve Windows önyükleme yöneticisi bozuk bir MBR ile ilgili bir hata bildiriyor ve kullanıcıdan bir Windows onarım CD'sinden onarmasını istiyor.


1

Konuyla ilgili Wikipedia makalesini okuduktan sonra birkaç ek çözüm öneriyorum:

  1. BIOS'ta önyükleme sırasını değiştirin :)

  2. En iyi ve en güvenli olanı: fdiskbu sürücüdeki bölümlerden "önyüklenebilir" bayrağı kaldırmak için kullanın . Çoğu MBR, zincir yükü için "önyüklenebilir" bir bölüm arar, bu yüzden GRUB'un böyle bir bölüm yoksa hiçbir şey yapmasını beklemem. Yine de test etmedim.

    Yukarıdakiler yardımcı olmazsa, standart MBR kodunun ücretsiz bir kopyasını yüklemeyi deneyin:

  3. mbrPaketi yükleyin ve şu install-mbrkomutu kullanın :

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

Kredi: NASIL YAPILIR: Ubuntu LIVE CD'sini kullanarak Windows MBR'yi kurtarma

Wikipedia makalesini okurken MBR'yi tanımlayan tek şeyin sektörün en sonundaki imzası olduğu izlenimine kapıldım (bayt 510 ve 511). MBR'nin ilk 446 baytı, makine talimatlarını içermesi gerekiyordu. MBR imzasının mevcut olması şartıyla, BIOS'un ilk 446 baytın gerçek içeriğinden bağımsız olarak denetimi önyükleyiciye aktarması gerekiyor:

IBM PC uyumlu bilgisayarlarda, ROM BIOS'ta bulunan önyükleme sabit yazılımı ana önyükleme kaydını yükler ve yürütür. [14] ... Bu nedenle, MBR'nin başlangıcında gerçek mod makine dili talimatları olması beklenir. [14] BIOS, MBR'yi depolama aygıtından fiziksel belleğe okur ve ardından mikroişlemciyi önyükleme kodunun başlangıcına yönlendirir.

MBR'nin kod bölümünün kısıtlı boyutu nedeniyle, genellikle ek kodu (önyükleme yükleyicisi gibi) depolama aygıtından belleğe kopyalayan küçük bir program içerir. Daha sonra kontrol, gerçek işletim sisteminin yüklenmesinden sorumlu olan bu koda geçirilir.

...

BIOS'taki önyükleme sırası, bulduğu ilk geçerli MBR'yi bilgisayarın fiziksel belleğine 0x7C00 adresinden yükler. BIOS kodunda yürütülen son talimat, çalıştırmayı MBR kopyasının başına yönlendirmek için bu adrese bir "atlama" olacaktır. Çoğu BIOS için birincil doğrulama, sondaki 0xAA55 imzasıdır, ancak bir BIOS uygulayıcısı, diğer denetimleri de dahil etmeyi seçebilir, ancak MBR'nin, diskin rapor edilen kapasitesinin ötesindeki sektörlere başvuruda bulunmayan girişler olmadan geçerli bir bölüm tablosu içerdiğini doğrulamak.

Benim anlayışım, MBR'nin her zaman bir önyükleyici içermesi gerekiyordu ve ilk 446 baytını sıfırlamak, BIOS'un diskten önyüklemeye çalışmasını durdurmaz - ancak geçersiz kod yürütmeye çalışırken bilgisayarın askıda kalması muhtemeldir.

GÜNCELLEME: Ayrıca, bu makalede , diskin BIOS için "önyükleme yapılamaz" görünmesini sağlamak için, sektörün (ve herhangi bir disk düzenleyicisini kullanarak) MBR imzasını gerçekten düzenlemeniz gerekir. Diskteki bölüm tablosunu görerek işletim sistemini etkileyip etkilemeyeceğinden emin değilim ... ama en azından her zaman bu baytları geri değiştirebilirsiniz ...


0

Başka bir basit çözüm.

Benim durumumda Debian linux vardı ama Mandriva kullanmak istedim, başkaları için de çalışacak

Bilgisayarınızı kapatın, ardından önyüklemek istemediğiniz önyükleme yapan diski çıkarın (gruba sahip)

Sadece mandriva iso'dan veya yüklemek istediğiniz diğer varyanttan yapılmış bir önyüklenebilir usb koyun, iso dosyalarından önyüklenebilir usb çubukları yapmak için araçlar vardır google (veya cd rom'dan yanmış bir yükleyici olabilirsiniz)

Artık çoğu linux montajcısı, değerlendirme veya taşınabilir linux için ne yapacağınızı, çalışacağınızı / oynadığınızı / kullanacağınızı veya yüklemek için kurulumu çalıştırdığınızı seçmenizi sağlar. Bu noktada sadece bekleriz (ekranın beklemesi için imleci yukarı hareket ettirin ancak enter tuşuna basmayın veya fare ile tıklamayın).

Bu noktada USB / veya / CDRom'unuzun başladığını ve çalıştığını hatırlatmanız yeterlidir. şimdi geçici olarak kaldırdığımız sabit diski geri takma zamanı bir dakika bekle (bazı biyografiler bir dakika daha küçük bir bekleme gerektirir yeterlidir)

Çoğu yükleyici, istediğiniz her şeyi yapabileceğiniz bölüm araçları içerdiğinden kurulum işlemine devam edin. iyi bir çözüm, yeni başlayanlar gibi eski bir linux kurulumundan kurtuldum


0

Eski soru, ama dün başıma geldiğinde, şu şekilde çözdüm: Bilgisayarı kapattım, suçlu sabit sürücüyü fiziksel olarak çıkardım, bilgisayarı yeniden başlattım, sonra

~ $ sudo update-grub

Bunu yaptığımda, bilgisayarı kapattım, sabit sürücüyü yeniden bağladım ve 2 yıl önce artık mevcut olmayan eski Windows 7 bölümüm ortaya çıkmadı - sonunda.

Bunun dünyaya bir çözüm olduğunu anlıyorum, ama işe yarıyor. Bir gün bu sabit diski tamamen sileceğim ve kalan GRUB izi yok olacak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.