วิธีตรวจสอบว่าไดรฟ์ใดที่ grub2 ติดตั้ง MBR จริงหรือไม่


17

ฉันใช้ระบบ Debian / Squeeze (ที่มีประวัติย้อนกลับไปอย่างน้อย Woody) ซึ่งได้รับการอัพเกรดเป็น grub2 ซึ่งเป็นส่วนหนึ่งของการอัพเกรด Squeeze ทั้งหมดทำงานได้ดี แต่ฉันกำลังยุ่งกับการกำหนดค่าดิสก์

ขณะนี้เครื่องมีไดรฟ์ 80GB 2 ตัวที่มี RAID1-ed /, / home และ / boot partition (มีอีกหนึ่งคู่ของไดรฟ์ที่มี RAID1-ed "/ data" และ swaps สองเท่าในกรณีที่ใคร ๆ สงสัยว่า swap อยู่ที่ไหน แต่ฉันไม่ได้แตะต้องเลย)

ฉันได้เพิ่ม SSD ขนาด 130GB 2 ตัวแบ่งพาร์ติชันให้มีขนาดใหญ่เท่ากับพาร์ติชั่นบนไดรฟ์ 80GB และตั้งใจจะเปลี่ยนเป็นไดรฟ์ SSD ใหม่ด้วยการเพิ่ม RAID1 เพื่อรวมไว้รอซิงค์จากนั้นจึงลบเก่า ไดรฟ์จากอาร์เรย์ดังนั้นจึงเหลือเพียง SSD (จากนั้นก็เพิ่มระบบไฟล์) แต่ mdadm / ext3 wrangling ไม่ใช่คำถามนี้เกี่ยวกับ ...

นั่นจะทำให้ฉันมีไดรฟ์ 80GB (IDE) ที่ล้าสมัย 2 ตัวที่ฉันต้องการลบออกจากเครื่อง ความกังวลของฉันคือการลบพวกเขาจะต้องใช้ MBR ที่สำคัญกับพวกเขา ฉันจะมั่นใจได้อย่างไรว่าเครื่องยังคงสามารถบู๊ตได้?

โดยเฉพาะอย่างยิ่ง:

  • เมื่อฉันอัพเกรด Squeeze ฉันจำได้ว่ามีตัวเลือกบางอย่างเกี่ยวกับไดรฟ์ที่ควรติดตั้ง grub2 ไว้ (ฉันไปด้วยค่าเริ่มต้นซึ่งเป็นไดรฟ์ทั้งหมด) SSD นั้นไม่ได้อยู่ในเครื่องในขณะนั้น ฉันจะเรียกใช้สิ่งนี้อีกครั้งเพื่อรับด้วงเพื่อติดตั้งบน SSD MBRs ได้อย่างไร (ฉันเดาว่ามันเป็น dpkg- ตั้งค่าคอนฟิกใหม่ของแพ็คเกจ)

  • ฉันจะค้นหาไดรฟ์ตัวใดที่ grub2 คิดว่าติดตั้งไว้ในเครื่องได้อย่างไร ความเศร้าโศกที่ดีมีอยู่เกือบ 200 ไฟล์ภายใต้ / boot / grub / ทุกวันนี้! มองที่ไหนดี นอกจากนี้ดูเหมือนแปลกเล็กน้อยที่ /boot/grub/device.map.auto แสดงรายการไดรฟ์ 3 ตัวในปัจจุบันเท่านั้น (2 จาก 80GBs แต่มีเพียงหนึ่งคู่ของไดรฟ์อื่นและไม่มี SSD) ฉันจะรับข้อมูลล่าสุดได้อย่างไร ( อัปเดต:นั่นคือปลาเฮอริ่งแดง; device.map.auto น่าจะเป็นของที่ระลึกเมื่อหลายปีก่อน device.map ดูสมเหตุสมผลในการอัพเดทโดย grub-mkdevicemap คิดว่าความหวาดระแวงของฉันในบริเวณนี้มาจาก BIOS ของ mobo เก่าซึ่งจะ จัดลำดับการสั่งซื้ออุปกรณ์ใหม่ที่เห็นโดย GRUB ในราชประสงค์)

ผลลัพธ์:ทุกอย่างเป็นไปด้วยดีและตอนนี้ฉันมีไดรฟ์ IDE 80GB ตัวเก่าสองตัวออกมาจากกล่องและระบบบูทที่รวดเร็วและเร็วกว่า RAID1-ed SSD ที่ปรับขนาดพาร์ติชั่นใหม่ทั้งหมด "ชิ้นส่วนจิ๊กซอว์ Grub ที่หายไป" อื่น ๆ ที่ฉันกำลังมองหาคือการdpkg-reconfigure grub-pcแจ้งให้ดิสก์ที่ใช้รักษา MBR จริงๆแล้วคำตอบของแอรอนทำให้ฉันมั่นใจว่านี่ใช้งานได้ตามที่คาดไว้ดังนั้นจึงยอมรับคำตอบนั้น

คำตอบ:


17

MBR คือ 512 ไบต์ดังนั้นวิธีที่รวดเร็วในการดูว่า GRUB อยู่ที่นั่นหรือไม่ ...

dd if=/dev/sda bs=512 count=1 | xxd

นั่นทำให้ MBR ทิ้งฉันเห็น "GRUB" ในของฉันที่ไบต์ 0x17F = 383

dd if=/dev/sda bs=1 count=4 skip=383

เมื่อฉันทำเช่นนั้นมันจะพิมพ์ ' GRUB' ตามด้วยddผลลัพธ์

คุณสามารถห่อสิ่งนั้นใน bash forloop หรือบางสิ่งบางอย่างเพื่อข้ามไดรฟ์เพิ่มเติม หากคุณไม่ต้องการทำด้วยตนเอง


4
เพิ่มเพียงเล็กน้อย - เนื่องจากตำแหน่งของ GRUB มีแนวโน้มที่จะเปลี่ยนจากรุ่นหนึ่งเป็นรุ่นหนึ่งจึงสามารถใช้งานdd if=/dev/sda bs=1 count=512 | grep -aob GRUBได้ ซึ่งจะส่งคืนตำแหน่งของเครื่องหมายระบุตำแหน่งภายในบูตเซกเตอร์
อเลสซานโดรซานตินี

16

มีหลายขั้นตอนในกระบวนการบู๊ต (ฉันอธิบาย BIOS พีซีแบบดั้งเดิม):

  1. BIOS จะอ่านเซกเตอร์แรก (512 ไบต์) ของดิสก์สำหรับบูต
  2. รหัสในภาคแรกนี้อ่านข้อมูลและรหัสเพิ่มเติมในตำแหน่งคงที่ผ่านอินเทอร์เฟซ BIOS อินเทอร์เฟซ BIOS นี้เปิดเผยฮาร์ดดิสก์สองตัวเท่านั้น: ดิสก์ 0 เป็นตำแหน่งที่อ่านภาคแรกและดิสก์ 1 เป็นดิสก์อื่นซึ่งไม่สามารถคาดเดาได้ง่ายถ้าคุณมีมากกว่าสอง บูตเซกเตอร์ประกอบด้วยไบต์ที่ระบุว่าฮาร์ดดิสก์ข้อมูลเพิ่มเติมอยู่บน /boot/grubนี้เป็นดิสก์ที่มี
  3. โค้ดที่โหลดในระยะก่อนหน้านี้เข้าใจพาร์ติชันระบบไฟล์และความคิดระดับสูงอื่น ๆ ข้อมูลรวมถึงตำแหน่งของระบบไฟล์ (เช่นสตริงเหมือน(hd0)/boot/grub) ที่กำหนดว่าจะค้นหาgrub.cfgและโมดูลด้วงเพิ่มเติมได้อย่างไร
  4. grub.cfg ถูกดำเนินการโดยปกติจะแสดงเมนูและบูตระบบปฏิบัติการ

บูตถูกสร้างขึ้นโดยอุทธรณ์ได้ตามปกติผ่านgrub-setup grub-installบูตเซกเตอร์สิ้นสุดลงบนดิสก์ใด ๆ ที่คุณระบุ (ในไวยากรณ์ Linux) บนบรรทัดคำสั่งgrub-installหรือ คุณสามารถตรวจสอบว่าคุณมีบูตบนดิสก์โดยการเรียกใช้grub-setup file -s /dev/sdaเนื่องจากคุณกำลังเพิ่มดิสก์ใหม่และต้องการบูตจากนั้นคุณต้องเรียกใช้grub-installบนดิสก์ใหม่ การรันgrub-installหลาย ๆ ครั้งบนดิสก์เดียวกันนั้นไม่เป็นอันตราย

ส่วนที่ยากอยู่ในขั้นตอนที่ 2 ข้างต้น ถ้าเป็นไปได้ให้ใส่ Grub (เช่น/boot/grubไดเรกทอรี) บนดิสก์สำหรับบูต BIOS (หรือใกล้ถึงทิศทางนี้จากทิศทางอื่นให้บอก BIOS ของคุณเพื่อบู๊ตจากดิสก์ที่/boot/grubอยู่) นี่คือที่device.mapเข้ามาเล่น ตรวจสอบให้แน่ใจว่า(hd0)แมปกับดิสก์ที่มีอยู่/boot/grubจากนั้นเรียกใช้grub-installบนดิสก์นั้น

หากดิสก์ทั้งสองของคุณอยู่ในการกำหนดค่าซอฟต์แวร์ RAID-1 คุณจะมีบูตเซกเตอร์เหมือนกัน นี่เป็นพฤติกรรมที่พึงประสงค์: หากดิสก์หนึ่งซึ่งเป็นดิสก์สำหรับบูตของ BIOS ไม่สามารถทำการบูตจากอีกอันหนึ่งได้ (เนื่องจากมีจำนวนไบต์เดียวกันในตำแหน่งเดียวกัน) หากคุณได้ทำมิรเรอร์พาร์ติชันบางตัวเท่านั้นแล้วการติดตั้งบูตเซกเตอร์จะส่งผลกระทบกับหนึ่งในดิสก์ คุณควรจะทำงานgrub-installอีกครั้งบนดิสก์ที่สองหลังจากเปลี่ยนdevice.mapการเชื่อมโยงกับดิสก์ที่มีสำเนาที่สองของมิเรอร์(hd0)/boot/grub

ขั้นตอนที่ 3 ค่อนข้างซับซ้อน แต่มักใช้งานนอกกรอบ ที่ขั้นตอนที่ 4 Grub จะหาตำแหน่งของระบบไฟล์โดย UUID หรือค้นหาไฟล์ที่มีชื่อดังนั้นคุณไม่ต้องกังวลเกี่ยวกับวิธีต่างๆในการกำหนดดิสก์อีกต่อไป

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