ฉันจะถอนการติดตั้ง GRUB ได้อย่างไร


19

ฮาร์ดไดรฟ์ที่ฉันใช้สำหรับการจัดเก็บข้อมูลเท่านั้นยังคงมีด้วงจากการติดตั้ง Ubuntu ที่ผ่านมา

ฉันจะลบ GRUB จากมันโดยไม่ทำอันตรายต่อข้อมูลส่วนที่เหลือของไดรฟ์ได้อย่างไร

พื้นหลัง

ฉันย้ายไดรฟ์ข้อมูลระหว่างคอมพิวเตอร์ด้วยการกำหนดค่าลำดับการบู๊ตต่าง ๆ เป็นครั้งคราวดังนั้นฉันจึงต้องการให้ไม่สามารถบูตได้เพื่อหลีกเลี่ยงการปรับให้เข้ากับการตั้งค่า BIOS ของคอมพิวเตอร์แต่ละเครื่อง

เมื่อฉันเปิดคอมพิวเตอร์ขณะที่ติดตั้งไดรฟ์ข้อมูลเท่านั้นข้อมูลต่อไปนี้จะปรากฏขึ้น:

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

เราสามารถยืนยันได้จากการสำรองข้อมูลเก่า/etc/fstabว่านี่คือ UUID ของพาร์ทิชันรากที่ฉันเพิ่งจัดรูปแบบใหม่ซึ่งไม่มีอยู่แล้ว นี่คือไดรฟ์ข้อมูลของตารางพาร์ทิชันและดิบต้นแบบบันทึกการบูต

โปรดทราบว่าฉันไม่สนใจวิธีแก้ปัญหาที่ไม่ตอบคำถามหลักของฉัน ฉันสามารถคิดถึงวิธีแก้ปัญหานี้ได้หลายวิธี แต่มันทำให้ฉันรำคาญใจในหลักการที่ฉันไม่รู้ว่าจะแก้ไขได้อย่างไร ทุกขั้นตอนการติดตั้งควรมีขั้นตอนการถอนการติดตั้งที่เหมือนกัน


แค่อยากรู้อยากเห็น - ถ้าคุณลบไฟล์ใน / boot / grub (ซึ่งฉันคิดว่าคุณทำ), รหัส mbr ไม่สำคัญจริงๆ? ฉันไม่คิดว่ามันจะถูกใช้อย่างอื่นอีกหรือไม่ ฉันอาจจะผิด แต่ฉันจะไม่คิดว่ามันจะถูกนำมาใช้และฉันเกลียดที่จะพลาดอะไรบางอย่างในระดับต่ำถ้าฉันใส่ใจเกี่ยวกับข้อมูล
Marty Fried

คุณสามารถถ่ายโอนข้อมูล MBR ดิบและโพสต์ที่นี่ได้หรือไม่ sfdisk -d /dev/sdb > sdb.outคุณควรจะสามารถที่จะทำสิ่งที่ชอบ
พัฒนา

คำตอบ:


25

คุณสามารถทำให้อุปกรณ์ไม่สามารถบู๊ตได้โดยการทำให้ดิสก์มีขนาดไม่กี่ไบต์แรก 0x00

โดยทั่วไป (และสิ่งนี้จะเป็นจริงสำหรับทั้ง grub, grub2 และ ntldr iirc) ไบต์แรกของไดรฟ์ของคุณจะเป็นคำสั่ง x86 jmp สิ่งนี้เกิดขึ้นก่อนแม้กระทั่งดิสเก็ตแถบเพราะเมื่อผ่านการประมวลผลไปยังอุปกรณ์เพื่อบู๊ตมันก็แค่ตั้งค่า CPU ให้ดูดข้อมูลอุปกรณ์เป็นรหัส ถ้ามันมีรหัสที่ไม่ถูกต้องมันจะเรียกการขัดจังหวะและ BIOS จัดการข้อยกเว้นและไปที่อุปกรณ์ที่สามารถบูตได้ต่อไป

ตัวอย่างเช่นการเริ่มต้นของดิสก์ของฉันเริ่มต้นด้วย:

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

ส่วนแรกeb 63คือกระโดดเพื่อชดเชย 0x63 จาก IP ปัจจุบัน (ดังนั้นถึง 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......|

การดำเนินการต่อจากที่นี่

จุดสิ้นสุดของภาคมีลักษณะเช่นนี้:

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

ถ้าฮาร์ดดิสก์ของคุณมีรูปแบบเป็นตารางพาร์ทิชัน MBR แล้วมันต้องการเพียงสองสิ่งที่จะนำเสนอตารางพาร์ทิชันซึ่งเป็นที่ออฟเซต0x1beและลายเซ็น MBR ที่ซึ่งเกิดขึ้นในท้ายสุดของภาคที่ออฟเซต 55aa คือทศนิยม 4460x1fe0x1be

เจตจำนงต่อไปนี้จะทำให้อุปกรณ์ไม่สามารถบูตได้ แต่นี่คือสิ่งที่คุณต้องการ หากคุณไม่ต้องการให้อุปกรณ์ของคุณไม่สามารถบูตได้แล้วอย่าทำเช่นนี้เลย mmm-kay? ฉันสมมติว่าอุปกรณ์ของคุณเป็น/dev/sdzเพียงเพราะมีไม่กี่คน/dev/sdzและสิ่งนี้ช่วยลดความเสี่ยงของคนที่เพิ่งเริ่มทำคำสั่งการคัดลอกวาง

ก่อนอื่นให้คัดลอก MBR ไปยังไฟล์เพื่อสำรองข้อมูล

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

ถัดไปทำสำเนาไฟล์นั้น:

cp backup.mbr backup.mbr.test

ต่อไปเราต้องสร้างอุปกรณ์ลูปแบ็ค (เพื่อไม่ให้เนื้อหาถูกตัดทอน) และใช้การเปลี่ยนแปลงในภาคปลอมของเรา 0 เป็นแบบทดสอบ:

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 ไฟล์และตรวจสอบให้แน่ใจว่าตารางพาร์ติชันทั้งหมดไม่เปลี่ยนแปลง:

sudo hexdump -C backup.mbr.test

คุณควรเห็นบางสิ่งเช่น:

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

ตอนนี้0x1beเป็นที่ที่คุณเห็น80บนเอาต์พุต hexdumped สิ่งนี้สามารถเป็นได้00และยังคงใช้ได้ (มันเป็น "ที่สามารถบูตธง" ในตารางพาร์ทิชันคุณสามารถปล่อยให้มันคนเดียวเพราะมันละเว้นสมบูรณ์โดย BIOSes ที่ทันสมัยที่สุด ... ) ไบต์ที่0x1bfแม้ว่าจะเกือบไม่เคยเป็น0x00(มันมากที่สุด0x01แต่ก็สามารถใช้ค่าอื่น ๆ ) คุณ สามารถเปรียบเทียบสิ่งนี้กับคุณbackup.mbrเพื่อให้แน่ใจว่าไม่มีการ0x1beเปลี่ยนแปลงในอดีต

เมื่อคุณพอใจกับการใช้การเปลี่ยนแปลงอย่างถูกต้องแล้วคุณสามารถคัดลอกไฟล์ไปยังส่วนแรกของดิสก์ได้โดยตรง เหตุผลที่คุณต้องการทำไฟล์มากกว่า/dev/zeroเพื่อความปลอดภัยจากการพิมพ์ผิด หากคุณไม่ได้ตั้งใจcount=1คุณจะมีเวลาที่ไม่ดีการคัดลอกไฟล์ในทางกลับกันจะไม่มีทางผ่าน EOF ได้เลย ดังนั้นจึงปลอดภัยกว่า

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

ติดhexdumpแผ่นดิสก์ของคุณเพื่อให้แน่ใจว่าการเปลี่ยนแปลงจะเกิดขึ้นตามที่คาดไว้

hexdump -C /dev/sdz | head

เปรียบเทียบ0x200กับbackup.mbr.testเพื่อให้แน่ใจว่าเป็นสิ่งที่คุณต้องการ

สุดท้ายหากมีสิ่งใดเกิดขึ้นคุณสามารถคัดลอกข้อมูลสำรองของ MBR กลับไปยังไดรฟ์ผ่านทาง:

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

หวังว่านี่จะช่วยได้


1
ฉันให้คุณบวกหนึ่งสำหรับการคาดการณ์และป้องกันข้อผิดพลาด noob ร้ายแรง
psitae

ขอบคุณมัดฉันทำดีที่สุดเพื่อป้องกันข้อผิดพลาด noob มากที่สุด: การสำรองข้อมูลไม่เขียนโดยตรงไปยังอุปกรณ์บล็อกในกรณีที่countลืมไม่ได้โดยตรงโดยใช้ชื่ออุปกรณ์บล็อกทั่วไประบุว่าควรสำรองไฟล์ จากอุปกรณ์ที่กำลังเปลี่ยนแปลงตัวอย่างของการล้างที่ประสบความสำเร็จมีลักษณะอย่างไรจะยกเลิกหากคุณพลาด ฉันคิดว่าคุณมีความรู้เพียงพอที่จะรู้ว่าสิ่งที่ฉันได้รับที่คุณสามารถตัดผ่านขั้นตอนเด็กและเพียงทำทั้งหมดนี้ในคำสั่งเดียว แต่ฉันจะไม่ให้คำสั่งแก่คุณถ้าคุณยังเรียนรู้อยู่ ;)
OmnipotentEntity

2

คำเตือน: อันตรายมาก

คุณสามารถใช้คำสั่ง dd จาก Linux เอง (จะลบตารางพาร์ติชัน):

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

เพียงลบ MBR โดยไม่มีตารางพาร์ติชัน (ดูความคิดเห็นด้านล่าง):

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

แทนที่ด้วยชื่ออุปกรณ์ที่แท้จริงของคุณเช่น/dev/hdX /dev/hdaใช้fdisk -lคำสั่งเพื่อค้นหาชื่ออุปกรณ์:

# fdisk -l

แหล่ง

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

จำนวนไบต์เหล่านั้นดูไม่สะดวกสบาย คุณรู้หรือไม่ว่าพวกเขาเหมือนกันสำหรับ GRUB2
ændrük

1
การนับไบต์เป็นเพราะตารางพาร์ทิชันอยู่ระหว่าง 446 ถึง 512 แน่นอนว่านี่เป็นคำถามที่ว่าทำไมคุณต้องการลบ grub MBR ... มันไม่ได้ทำร้ายอะไรแค่นั่งเฉยๆ หากคุณต้องการบูตโหลดเดอร์ตัวอื่นแทนเพียงแค่ติดตั้งและมันจะแทนที่ด้วง
psusi

3
ว้าวคำตอบประเภทนี้ควรมี "คำเตือน: อันตรายมาก" เขียนด้วยตัวอักษรสีแดงตัวใหญ่ ฉันแน่ใจว่า OP สามารถทำสิ่งนี้ได้ แต่ฉันเกลียดที่จะเห็นผู้ใช้มือใหม่คัดลอกวางคำสั่งแรกลงในเทอร์มินัลโดยไม่รู้ตัวว่า "ตารางพาร์ทิชัน" คืออะไร
Sergey

1
อย่าได้ทำเช่นนี้ คำสั่งแรกจะล้างตารางพาร์ติชัน (ตามที่กล่าวถึง OP) แต่คำสั่งที่สองจะทำให้เกิดพฤติกรรมที่ไม่ได้กำหนดหาก MBR ไม่ได้รับการกำหนดค่าอย่างเหมาะสม
พัฒนา

1
อืม .. ฉันไม่รู้ว่าทำไมพวกคุณถึงออกนอกลู่นอกทางคำสั่งที่ tachyons วางไม่ทำอะไร คุณสามารถทดสอบกับ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อย่างที่คุณเห็น/dev/nullไม่ใช่แหล่ง 0 มันเป็นแหล่ง EOF ddไม่สามารถและจะไม่คัดลอกอะไรจากคุณจำเป็นต้องใช้/dev/null /dev/zeroประการที่สอง @Breakthrough ไม่มีพฤติกรรมที่ไม่ได้กำหนดเป็นไปได้ถ้าไบต์แรกของภาค 0x000 ฉันไม่รู้ว่าทำไมคุณถึงคิดอย่างนั้น
OmnipotentEntity

1

ประสบการณ์ของฉันกับ

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

คือว่าติดตั้ง grub2 สำเร็จแล้ว/dev/sda(ซึ่งติดตั้ง Windows 7 ของฉัน) ดังนั้นส่วนแรกของคำถาม "ฉันจะลบ grub ออกจาก / dev / sda ได้อย่างไร" ได้รับคำตอบแล้ว

อย่างไรก็ตามส่วนที่ 2 ของคำถามซึ่งคือ "ฉันจะคืนค่า MBR ของ / dev / sda ได้อย่างไร" ไม่ได้รับคำตอบเนื่องจากinstall-mbrคำสั่งไม่สามารถกู้คืน MBR เป็นผลให้ Windows ไม่บูตอีกต่อไปและตัวจัดการการบูต Windows รายงานข้อผิดพลาดเกี่ยวกับ MBR ที่เสียหายและขอให้ผู้ใช้ซ่อมแซมจากซีดีซ่อมแซม windows


1

หลังจากอ่านบทความ Wikipediaในเรื่องที่ฉันต้องการเสนอโซลูชั่นเพิ่มเติมไม่กี่:

  1. เปลี่ยนลำดับการบูตใน BIOS :)

  2. ดีที่สุดและปลอดภัยที่สุด: ใช้fdiskเพื่อลบการตั้งค่าสถานะ "สามารถบูตได้" จากพาร์ติชันใด ๆ บนไดรฟ์ MBR ส่วนใหญ่มองหาพาร์ติชั่น "บูตได้" เพื่อโหลดเชนจากนั้นฉันคาดว่า GRUB จะไม่ทำอะไรเลยถ้าไม่มีพาร์ติชั่นดังกล่าว ยังไม่ได้ทดสอบ

    หากวิธีด้านบนไม่ช่วยลองติดตั้งโคลน MBR มาตรฐานฟรี:

  3. ติดตั้งmbrแพ็คเกจและใช้install-mbrคำสั่งดังนี้:

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

เครดิต: วิธีการ: กู้คืน Windows MBR โดยใช้ Ubuntu LIVE CD

จากการอ่านบทความ Wikipedia ฉันมีความประทับใจว่าสิ่งเดียวที่ระบุ MBR คือลายเซ็นต์ซึ่งอยู่ท้ายสุดของเซกเตอร์ (ไบต์ 510 และ 511) MBR 446 ไบต์แรกของ MBR ควรมีคำแนะนำเครื่อง ไบออสควรจะถ่ายโอนการควบคุมไปยัง bootloader โดยไม่คำนึงถึงเนื้อหาจริงของ 446 ไบต์แรกโดยมีลายเซ็น MBR อยู่:

บนคอมพิวเตอร์ที่เข้ากันได้กับพีซี IBM, เฟิร์มแวร์ bootstrapping ที่บรรจุอยู่ใน ROM BIOS จะโหลดและประมวลผลมาสเตอร์บูตเรคคอร์ด [14] ... ดังนั้นจุดเริ่มต้นของ MBR จึงคาดว่าจะมีคำแนะนำภาษาเครื่องโหมดจริง [14] BIOS อ่าน MBR จากอุปกรณ์จัดเก็บข้อมูลลงในหน่วยความจำกายภาพแล้วจึงนำไมโครโปรเซสเซอร์ไปยังจุดเริ่มต้นของรหัสบูต

เนื่องจากขนาดที่ จำกัด ของส่วนรหัสของ MBR โดยทั่วไปจะมีเพียงโปรแกรมขนาดเล็กที่คัดลอกรหัสเพิ่มเติม (เช่นบูตโหลดเดอร์) จากอุปกรณ์เก็บข้อมูลลงในหน่วยความจำ การควบคุมจะถูกส่งไปยังรหัสนี้ซึ่งรับผิดชอบในการโหลดระบบปฏิบัติการจริง

...

ลำดับ bootstrap ใน BIOS จะโหลด MBR ที่ถูกต้องครั้งแรกที่พบในหน่วยความจำกายภาพของคอมพิวเตอร์ตามที่อยู่ 0x7C00 คำสั่งสุดท้ายที่ดำเนินการในรหัส BIOS จะเป็น "ข้าม" ไปยังที่อยู่นั้นเพื่อดำเนินการโดยตรงไปยังจุดเริ่มต้นของการคัดลอก MBR การตรวจสอบความถูกต้องหลักสำหรับ BIOSes ส่วนใหญ่คือลายเซ็น 0xAA55 ที่ส่วนท้ายแม้ว่าผู้ใช้งาน BIOS อาจเลือกที่จะรวมการตรวจสอบอื่น ๆ เช่นการตรวจสอบว่า MBR มีตารางพาร์ติชันที่ถูกต้องโดยไม่มีรายการที่อ้างถึงเซกเตอร์

ดังนั้นความเข้าใจของฉันคือ MBR ควรจะมี bootloader อยู่เสมอและการ zeroate 446 ไบต์แรกของมันจะไม่หยุด BIOS จากการพยายามบูตจากดิสก์ - แต่มีแนวโน้มที่จะทำให้คอมพิวเตอร์หยุดทำงานในขณะที่พยายามเรียกใช้รหัสที่ไม่ถูกต้อง

ปรับปรุง:นอกจากนี้บทความนี้แนะนำว่าการทำให้ดิสก์ดู "ไม่สามารถบู๊ตได้" สำหรับ BIOS คุณควรแก้ไขลายเซ็น MBR จริง ๆ และภาค (ใช้ตัวแก้ไขดิสก์ใด ๆ ) ฉันไม่แน่ใจว่ามันจะส่งผลกระทบต่อระบบปฏิบัติการอย่างไรเมื่อเห็นตารางพาร์ติชั่นบนดิสก์ แต่ ... แต่อย่างน้อยคุณก็สามารถแก้ไขไบต์เหล่านั้นได้เสมอ ...


0

อีกวิธีที่ง่ายกว่า

ในกรณีของฉันฉันมี Debian linux แต่ต้องการใช้ Mandriva จะทำงานให้คนอื่นด้วย

ปิดพีซีของคุณแล้วถอดดิสก์ที่บู๊ตที่คุณไม่ต้องการบูท (ที่มีด้วง)

เพียงใส่ใน usb ที่สามารถบู๊ตได้ซึ่งทำจาก mandriva iso หรือตัวแปรอื่น ๆ ที่คุณต้องการติดตั้งมีเครื่องมือสำหรับการทำ usb sticks ที่สามารถบู๊ตได้จากไฟล์ iso ใช้ google (หรือคุณสามารถติดตั้ง burn จาก cd rom)

ตอนนี้ตัวติดตั้ง linux ส่วนใหญ่ให้คุณเลือกว่าจะทำอย่างไรลองเล่น / ใช้สำหรับการประเมินผลหรือพกพา linux หรือเรียกใช้การตั้งค่าเพื่อติดตั้ง ณ จุดนี้เรารอ (เลื่อนเคอร์เซอร์ขึ้นลงดังนั้นหน้าจอจะรอ แต่อย่ากด Enter หรือคลิกด้วยเมาส์)

เพียงเตือน ณ จุดนี้ USB / หรือ / CDRom ของคุณเริ่มทำงานแล้ว ตอนนี้ถึงเวลาที่จะปลั๊กอินกลับฮาร์ดดิสก์ที่เราลบชั่วคราวรอสักครู่ (ไบออสบางอย่างต้องรอสักครู่เล็ก ๆ ก็เพียงพอแล้ว)

ดำเนินการตั้งค่าต่อไปเนื่องจากตัวติดตั้งส่วนใหญ่มีเครื่องมือพาร์ติชันที่คุณสามารถทำสิ่งที่คุณต้องการ เป็นทางออกที่ง่ายฉันได้กำจัดการตั้งค่าลินุกซ์เก่า ๆ เพียงแค่เริ่มต้น


0

คำถามเก่า แต่เมื่อมันเกิดขึ้นกับฉันเมื่อวานนี้ฉันแก้ไขมันแบบนี้: ฉันปิดเครื่องคอมพิวเตอร์แล้วทำการตัดการเชื่อมต่อฮาร์ดไดรฟ์ที่ถูกปรักปรำทางกายภาพเริ่มคอมพิวเตอร์อีกครั้งจากนั้น

~ $ sudo update-grub

ทำสิ่งนี้ฉันปิดคอมพิวเตอร์เชื่อมต่อฮาร์ดไดรฟ์และพาร์ติชัน Windows 7 เก่าของฉันซึ่งไม่มีอยู่อีกต่อไปตั้งแต่ 2 ปีที่ผ่านมาไม่ปรากฏขึ้น - ในที่สุด

ฉันเข้าใจว่านี่เป็นทางออกสู่พื้นดิน แต่ใช้งานได้ วันหนึ่งฉันจะล้างฮาร์ดไดรฟ์นั้นโดยสิ้นเชิงและร่องรอยที่เหลืออยู่ของด้วงจะหายไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.