เซิร์ฟเวอร์ Ubuntu, ตารางพาร์ติชัน gpt, mdadm, grub boot ล้มเหลว


9

รายละเอียดระบบการทำงานพื้นฐาน:

ฉันใช้ซีดีเซิร์ฟเวอร์ Ubuntu 12.04 เพื่อติดตั้งเซิร์ฟเวอร์

ฉันมี 4 ดิสก์ ในดิสก์ทั้งหมดที่ฉันทำต่อไปนี้คล้ายกับhowto นี้ :

  • สร้างพาร์ทิชัน swap 2GB
  • สร้างพาร์ติชั่น 256 GB / boot
  • สร้างพาร์ติชั่น 64 GB RAID10 (สำหรับรูท)
  • สร้างพาร์ติชั่น RAID10 ขนาดใหญ่เพื่อใช้พื้นที่ที่เหลือ

ฉันจัดรูปแบบการบู๊ตเป็น ext3 ฉันตั้งค่า RAID10 บนรูทและพาร์ติชั่นใหญ่ ฉันจัดรูปแบบรูทหนึ่ง ext4 ฉันสร้างโลจิคัลวอลุ่มบนตัวใหญ่และจัดรูปแบบเป็น ext4

ระบบผลลัพธ์นั้นทำงานได้ดีและบู๊ตได้ดี

รายละเอียดปัญหา:

จากนั้นฉันตัดสินใจทำเอกสารขั้นตอนความล้มเหลว เป็นขั้นตอนแรกฉันตัดสินใจว่าจะติดตั้งด้วงใหม่

# grub-install /dev/sda
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
# grub-install /dev/sdb
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..

ดังนั้นดูเหมือนว่าจะล้มเหลว แต่ก็ดูเหมือนว่าจะให้ขึ้นและไม่ได้ทำการเปลี่ยนแปลง ดังนั้นฉันรีบูต การบูตล้มเหลว มันเพิ่งแฮงค์ด้วยหน้าจอสีดำที่มีเคอร์เซอร์กะพริบประมาณ 4 บรรทัด ถ้าฉันบูท "Shift" ค้างไว้ฉันจะได้คำว่า "GRUB" ทางด้านซ้ายของเคอร์เซอร์ แต่ไม่มีพรอมต์ตอบโต้

ณ จุดนี้ฉันใช้boot-repair-diskเพื่อสร้างรายงานนี้: http://paste.ubuntu.com/966531/

หมายเหตุในรายงานข้างต้นระบุว่า bootloader ไม่ได้ชี้ไปที่เซกเตอร์ที่ถูกต้องสำหรับ core.img (sda คือ cd เสมือนจริง; sdb เป็นดิสก์สำหรับบูต; sdc เป็นมิเรอร์ของ sdb แต่การบูตไม่ได้ถูกทำมิเรอร์พาร์ติชันที่ไม่เกี่ยวข้องแยกต่างหากจะอยู่ที่นั่นและฟอร์แมตเป็น ext3; sdd และ sde มีที่ว่างสำหรับบูต

จากนั้นฉันบูตจากซีดีเซิร์ฟเวอร์ Ubuntu เริ่มระบบช่วยเหลือและออกคำสั่งต่อไปนี้ซึ่งเสร็จสมบูรณ์โดยไม่มีข้อผิดพลาด (โดยที่ sda คือซีดีเสมือนจริงและ b, c, d, e เป็นดิสก์ซึ่งเป็น, b, c , d ในคำสั่ง grub ก่อนหน้า):

# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

ณ จุดนี้ฉันใช้boot-repair-diskเพื่อสร้างรายงานนี้: http://paste.ubuntu.com/966561/

โปรดทราบว่าในรายงานข้างต้นปัญหาเกี่ยวกับ core.img หายไป ดูเหมือนว่าจะชี้ไปยังภาคที่ถูกต้อง

ตอนนี้ถ้าฉันพยายามบูทฉันจะได้รับพรอมต์ด้วง หากฉันรัน "set" ฉันจะเห็นรูทนั้นพบและตั้งค่า ถ้าฉันรัน "ls /" ฉันเห็นไดเรกทอรีรูทของฉันจากโวลุ่มการจู่โจมรวมถึงไฟล์เคอร์เนล vmlinuz หากฉันพิมพ์ "ls / vmlinuz" จะแจ้งว่า "ข้อผิดพลาด: ไม่พบไฟล์" มันบอกว่าข้อผิดพลาดเดียวกันถ้าฉันใช้คำสั่ง "linux" เพื่อพยายามโหลดเคอร์เนล ไฟล์ vmlinuz ไม่ปรากฏถ้าฉันใช้ "ls -l /"

รายละเอียดมากเกินไปในกรณีที่คุณต้องการติดตาม:

ฉันสังเกตเห็นว่ายังไม่มี / boot/grub/grub.cfg ดังนั้นฉันจึงวิ่ง

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

แต่ปัญหายังคงอยู่

หากฉันใช้เครื่องมือ "gptsync" จะไม่มีการเปลี่ยนแปลงในพฤติกรรมนี้

boot-repair-disk จะไม่ซ่อมแซมระบบเพราะต้องการให้ฉันบูตด้วยไบออสที่เปิดใช้งาน EFI ฉันมองดูสิ่งนี้สั้น ๆ แต่ฉันไม่รู้ว่ามันทำงานอย่างไร ฉันพบเปลือก UEFI ในตัวเลือกการบูตของฉัน แต่ฉันไม่รู้อะไรเลยและไม่เห็นวิธีเปลี่ยนการเริ่มต้นจากที่นั่น (เช่นการบูตซีดีจากเปลือก EFI นั้น)

ฉันได้อ่านหน้านี้แล้ว แต่ Ubuntu ไม่ได้มาพร้อมกับคำสั่ง "grub" ดังนั้นฉันจึงไม่สามารถติดตามได้อย่างแน่นอน ฉันสามารถติดตั้งคำสั่งนั้นได้ แต่ฉันอยากรู้มากกว่านี้ว่าตัวติดตั้ง Ubuntu จัดการติดตั้งได้อย่างไรแทนที่จะมีการตั้งค่าแบบอื่น มันใช้ blocklist ไหม?

นี่คือผลลัพธ์ของการแยกส่วนขณะบู๊ตบนboot-repair-disk (โดยที่นี่ sdb เป็นฮาร์ดดิสก์ตัวแรก sda เมื่อบูตจากดิสก์และ "boot" เปลี่ยนเป็น "bios_grub" ในลิงก์วางที่ 2):

Model: ATA Hitachi HUA72303 (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name   Flags
1      17.4kB  2000MB  2000MB  linux-swap(v1)  swap1
2      2000MB  2256MB  256MB   ext3            boot1  boot (this says bios_grub in 2nd link)
3      2256MB  66.3GB  64.0GB                  root1  raid
4      66.3GB  3001GB  2934GB                  data1  raid

นี่คือเครื่องเสมือนซุปเปอร์เก่าที่ไม่เกี่ยวข้องสำหรับการเปรียบเทียบ (สำหรับทุกคนที่ไม่คุ้นเคยกับboot-repair-disk ): http://paste.ubuntu.com/966799/

นี่คือการวางล่าสุดจากระบบปัญหาหลังจากรัน grub-mkconfig ด้านบนและตั้งค่า "bios_grub" กลับไปที่ "boot" http://paste.ubuntu.com/966808/

เปรียบเทียบทั้งสองนี้ดูน่าสนใจ:

sdb2: __________________________________________________________________________

File system:       
Boot sector type:  Grub2's core.img
Boot sector info: 
Mounting failed:   mount: unknown filesystem type ''

md/bcserver8:0: ________________________________________________________________

File system:       ext4
Boot sector type:  -
Boot sector info: 
Operating System:  Ubuntu 12.04 LTS
Boot files:        /boot/grub/grub.cfg /etc/fstab /boot/grub/core.img

ดูเหมือนว่าการจู่โจมจะมีไฟล์สำหรับบู๊ตและ sdb2 ไม่ได้ฟอร์แมต (แม้จะมีสิ่งนี้ระบบบูตก่อนที่จะเรียกใช้ด้วง) จากซีดีช่วยเหลือ "mount -t ext3 / dev / sdb2 / boot" ล้มเหลว แต่มันก็สมเหตุสมผลว่าสิ่งนี้จะทำให้เกิดความสับสนเนื่องจากด้วงใช้พาร์ติชัน 2 อย่างชัดเจน (2 ในคำสั่งแบบแยกส่วนที่เปิด bios_grub ไว้)

ดังนั้นฉันจึงทำสิ่งนี้:

# mkfs.ext3 -L boot1 /dev/sdb2
# mv boot boot_on_root
# mkdir boot
# mount /dev/sdb2 boot
# rsync -avHP boot_on_root/ boot/
# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

รีบูทจากนั้นฉันก็มีหน้าจอสีดำอีกครั้งไม่มีข้อความแจ้ง http://paste.ubuntu.com/966848/

ดังนั้น ณ จุดนี้ฉันเดาว่าเมื่อตั้งค่า bios_grub แล้ว grub จะไม่ติดตั้งไปยัง MBR และไม่ใช่ไปยังระบบไฟล์ ext3 บน ext3 แต่ในพาร์ติชันเองราวกับว่ามันเป็น EFI ... ซึ่งจะเห็นได้ชัดว่ายุ่งเหยิง ตั้งค่าระบบไฟล์ ext3 ที่นั่น Aand จากการอ่านสั้น ๆ เกี่ยวกับ EFI ดูเหมือนว่า EFI จะถือว่าพาร์ติชั่นแรกคือบูท แต่ในกรณีของฉันอันที่แรกคือ swap และก็ควรเป็น FAT แทนที่จะเป็นอะไรที่ไม่สามารถถอด ... ความรู้สึกฉันยังคงหายไปอย่างสมบูรณ์โดยไม่ต้องมีเงื่อนงำ [แก้ไข: ตอนนี้ฉันมีเงื่อนงำ ... ข้ามไปเล็กน้อยสำหรับการปรับปรุง]

และตอนนี้เมื่อฉันคลิกซ่อมแซมในboot-repair-diskมันจะถามอย่างอื่น ครั้งสุดท้ายที่ข้อผิดพลาดถูกซ่อนอยู่ใต้หน้าต่างและฉันต้องลากส่วนที่เหลือออกเพื่อดู เวลานี้หน้าต่างหลักหายไปและหน้าต่างใหม่แจ้งว่า:

GPT detected.       You may want to retry after creating a
BIOS-Boot partition (>1Mo, flag). Do you want to continue?

ดังนั้นฉันคลิกใช่และมันบอกว่ามันได้รับการซ่อมแซมเรียบร้อยแล้วและสร้างวางอื่น: http://paste.ubuntu.com/966862/

แต่ฉันยังมีหน้าจอสีดำพร้อมเคอร์เซอร์กะพริบ

ทฤษฏีของฉันคือการบูตถูกเขียนทับโดยสิ่งที่ไม่ใช่ไขมันไม่ใช่ EFI ซึ่งเป็นรหัสด้วงที่น่าจะอยู่ในเซ็กเมนต์ 0-63 มาก่อน ฉันโชคดีที่มีคำสั่งที่ชัดเจนมากในหน้านี้ซึ่งอาจทำให้ฉันเข้าใจว่ามันหมายถึงอะไร และหลังจากนั้นฉันก็พบว่าเจเรมีโพสต์คำตอบซึ่งหากเป็นจริงยืนยันว่านี่เป็นแนวคิดหลักที่ขาดหายไป http://blog.psych0tik.net/2011/08/grub-embedding-blocklists-and-bios_grub-partitions/

คำถาม:

เกิดอะไรขึ้น? ทำไมด้วงไม่สามารถบู๊ตได้? ทำไมถึงพูดว่า "ไม่พบไฟล์"

ทำไมด้วงไม่ต้องการติดตั้งโดยไม่มีการตั้งค่านี้ฉันได้ตั้งค่าด้วยการแยกส่วน (ซึ่งตัวติดตั้ง Ubuntu ไม่ได้ตั้งไว้) ฉันคิดว่าสิ่งที่ฉันต้องใช้ในการติดตั้งคือการแยก / บูตที่ไม่ได้อยู่ใน LVM หรือซอฟต์แวร์ RAID เนื่องจากรากของฉันอยู่ใน RAID และตารางพาร์ติชันคือ GPT

ตัวติดตั้ง Ubuntu CD ติดตั้งอย่างไรโดยไม่มีปัญหานี้และไม่มีการตั้งค่า bios_grub

ฉันจะพิจารณาใช้ EFI ด้วย หากนี่เป็นความคิดที่ดีและมีวิธีมาตรฐานในการตั้งค่าฉันมักจะเรียนรู้สิ่งใหม่ ๆ อยู่เสมอ

คำตอบที่เร็วที่สุดที่จะทำให้ฉันมีความสุขแม้จะไม่ได้ตอบคำถามทั้งหมดของฉันก็จะเป็นชุดคำสั่งที่ฉันสามารถเรียกใช้จากแผ่นซีดีกู้คืนเพื่อแก้ไข bootloader ในลักษณะเดียวกับที่แผ่นซีดีติดตั้งทำได้ มันจะดีเป็นพิเศษถ้าฉันสามารถเรียกใช้พวกเขาด้วยระบบบูตแทนซีดี


คุณสามารถเพิ่มผลงานพิมพ์จากแยกได้หรือไม่?
Jeremy

คุณสามารถเห็นได้ว่าในลิงก์ 2 วางที่บรรทัด 993 แต่ตามคำขอฉันจะต่อท้ายคำถามของฉัน
ปีเตอร์

คำตอบ:


8

วิธีแก้ไขคือใช้พาร์ติชัน bios_grub ซึ่งไม่เหมือนกับพาร์ทิชัน / boot

โดยค่าเริ่มต้นพาร์ติชัน bios_grub คือ 1MiB และจะต้องมีการตั้งค่าสถานะ bios_grub Mine เป็นพาร์ติชั่นแรกในดิสก์ของฉัน หากพาร์ติชั่น 2 ของคุณเป็นจริง / บูทตามที่แนะนำให้แยกส่วนนั่นจะไม่ถูกต้องและคุณควรสร้างพาร์ติชัน 1MiB อีกอัน

ด้วย GPT และ GRUB2 ระบบไฟล์ขั้นต่ำมีสามพาร์ติชัน: bios_grub, root, swap (ไม่แน่ใจว่าจำเป็นต้องสลับอย่างสมบูรณ์)

ทำไมด้วงไม่สามารถบู๊ตได้หลังจากเรียกใช้ "ด้วงติดตั้ง"?

ไม่ทราบ ... คุณคิดว่ามันจะไม่แก้ไขอะไรเลยหากมีข้อความระบุว่าไม่สามารถฝังได้ดังนั้นจึงใช้งานไม่ได้

ทำไมถึงพูดว่า "ไม่พบไฟล์"

/ vmlinuz เป็น symlink ที่ใช้พาร์ติชันสำหรับเริ่มระบบและพาร์ติชันสำหรับเริ่มระบบเสียหาย รหัส bios_grub ถูกเขียนที่ด้านบนของโครงสร้าง ext3 นี่อาจหมายถึงว่า / boot ไม่ได้ถูกเมาท์และไฟล์ grub ที่เห็นมีอยู่จริงในระบบรูทซึ่งไม่มีเคอร์เนล

ทำไมด้วงไม่ต้องการติดตั้งหากไม่มีการตั้งค่านี้ฉันได้ตั้งค่าด้วยการแยกส่วน

ตารางพาร์ติชัน GPT ไม่มีที่ว่างสำหรับ bootloader ซึ่งแตกต่างจาก MBR ดังนั้นต้องสร้างพาร์ติชันเฉพาะเพื่อเก็บรหัสบูต ก่อนรัน "grub-install" ให้ระบุพาร์ติชันนี้ด้วยคำสั่ง:

    parted /dev/sda set 1 bios_grub on

ฉันคิดว่าสิ่งที่ฉันต้องการคือการแยก / บูต ตัวติดตั้ง Ubuntu CD ติดตั้งโดยไม่มีการตั้งค่า bios_grub อย่างไร

ความต้องการนี้ดูเหมือนจะเป็นสิ่งที่จำเป็นสำหรับตัวติดตั้ง Ubuntu แต่มันสร้างระบบที่ไม่ได้มาตรฐานซึ่งเสียได้ง่าย

เมื่อ GRUB แจ้งว่า "ฉลากพาร์ติชั่น GPT นี้ไม่มีBIOS Boot Partition " นั่นหมายถึงพาร์ติชัน bios_grub ไม่ใช่ / boot


ขอบคุณ. นี่เป็นสิ่งที่ใกล้กับสิ่งที่ฉันกำลังทำอยู่มาก ดูของฉัน "ฉันยังคงหลงทางโดยไม่มีเงื่อนงำ" ส่วนด้านบน ทฤษฏีของฉันคือการบูตถูกเขียนทับโดยสิ่งที่ไม่ใช่ไขมันไม่ใช่ EFI ซึ่งเป็นรหัสด้วงที่น่าจะอยู่ในเซ็กเมนต์ 0-63 มาก่อน ฉันกำลังทำการทดลองและจากนั้นจะแจ้งให้คุณทราบว่ามันเป็นอย่างไร
ปีเตอร์

คุณใช้ Ubuntu หรือไม่ มีวิธีที่ตัวติดตั้ง Ubuntu สามารถติดตั้งอย่างถูกต้องโดยใช้พาร์ติชัน bios_grub หรือไม่
ปีเตอร์

@ ปีเตอร์ฉันใช้ Ubuntu และถ้าคุณทำพาร์ติชั่นแนะนำให้ติดตั้งควรติดตั้งอย่างถูกต้อง ฉันรู้ว่ามันทำให้ฉันด้วยโปรแกรมติดตั้ง 11.10
Jeremy

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