อัปเดต: ฉันได้ตรวจสอบแล้วว่าคำอธิบายด้านล่างใช้ได้กับ Ubuntu 16.04 ด้วย ผู้ใช้รายอื่นรายงานว่าทำงานในวันที่ 17.10 และ 18.04.1
หมายเหตุ: HOWTO นี้จะไม่ให้ LVM แก่คุณ หากคุณต้องการ LVM ด้วยให้ลองติดตั้งเดสก์ท็อป Ubuntu 18.04 พร้อม RAID 1 และ LVM บนเครื่องที่มี UEFI BIOSแทน
หลังจากพยายามมาหลายวันฉันก็มีระบบที่ใช้งานได้! โดยสังเขปโซลูชันประกอบด้วยขั้นตอนต่อไปนี้:
- บูตโดยใช้ Ubuntu Live CD / USB
- แบ่งพาร์ติชัน SSD ตามต้องการ
- ติดตั้งแพ็คเกจที่ขาดหายไป (mdadm และ grub-efi)
- สร้างพาร์ติชัน RAID
- เรียกใช้ตัวติดตั้ง Ubiquity (แต่อย่าบูตเข้าสู่ระบบใหม่)
- แพตช์ระบบที่ติดตั้งไว้ (initramfs) เพื่อเปิดใช้งานการบู๊ตจาก RAIDed root
- เติมพาร์ติชั่น EFI ของ SSD ตัวแรกที่มี GRUB และติดตั้งลงในบูทบูตของ EFI
- โคลนพาร์ติชัน EFI กับ SSD อื่นและติดตั้งลงในเชนการบูต
- ทำ! ระบบของคุณจะมี RAID 1 ซ้ำซ้อน โปรดทราบว่าไม่จำเป็นต้องทำอะไรเป็นพิเศษหลังจากนั้นเช่นการอัปเดตเคอร์เนลเนื่องจากพาร์ติชัน UEFI ไม่ถูกแตะต้อง
ส่วนประกอบสำคัญของขั้นตอนที่ 6 ของการแก้ปัญหาคือความล่าช้าในลำดับการบู๊ตซึ่งมิฉะนั้นฉันก็จะทิ้งฉันไปที่พรอมต์ GRUB (โดยไม่ต้องใช้แป้นพิมพ์!) หาก SSDs ใดตัวหนึ่งหายไป
HOWTO โดยละเอียด
1. บูต
บูตโดยใช้ EFI จากก้าน USB วิธีการที่แตกต่างกันไปตามระบบของคุณ เลือกลองอูบุนตูไม่ต้องติดตั้ง
เริ่มโปรแกรมจำลองเทอร์มินัลเช่นxterm
เพื่อเรียกใช้คำสั่งด้านล่าง
1.1 เข้าสู่ระบบจากคอมพิวเตอร์เครื่องอื่น
ในขณะที่ลองทำสิ่งนี้ฉันมักจะพบว่าการลงชื่อเข้าใช้จากคอมพิวเตอร์เครื่องอื่นซึ่งมีการกำหนดค่าไว้แล้วนั้นง่ายกว่า คำสั่งตัดและวางแบบง่าย ๆ นี้เป็นต้นหากคุณต้องการทำสิ่งเดียวกันคุณสามารถเข้าสู่ระบบผ่าน ssh โดยทำดังต่อไปนี้:
บนคอมพิวเตอร์ที่จะกำหนดค่าติดตั้งเซิร์ฟเวอร์ openssh:
sudo apt-get install openssh-server
เปลี่ยนรหัสผ่าน. รหัสผ่านเริ่มต้นสำหรับผู้ใช้ubuntu
ว่างเปล่า คุณอาจเลือกรหัสผ่านที่มีความแรงปานกลาง มันจะถูกลืมทันทีที่คุณรีบูทคอมพิวเตอร์เครื่องใหม่
passwd
ตอนนี้คุณสามารถเข้าสู่เซสชัน ubuntu live จากคอมพิวเตอร์เครื่องอื่น คำแนะนำด้านล่างสำหรับ linux:
ssh -l ubuntu <your-new-computer>
หากคุณได้รับคำเตือนเกี่ยวกับการโจมตีคนที่ต้องสงสัยว่าเป็นคนกลางคุณต้องล้างปุ่ม ssh ที่ใช้เพื่อระบุคอมพิวเตอร์เครื่องใหม่ นี่เป็นเพราะopenssh-server
สร้างคีย์เซิร์ฟเวอร์ใหม่เมื่อใดก็ตามที่มีการติดตั้ง โดยทั่วไปคำสั่งที่ใช้จะถูกพิมพ์และควรมีลักษณะเช่นนี้
ssh-keygen -f <path-to-.ssh/known_hosts> -R <your-new-computer>
หลังจากรันคำสั่งนั้นคุณควรจะสามารถเข้าสู่เซสชัน ubuntu live ได้
2. พาร์ติชั่นดิสก์
ล้างพาร์ติชันเก่าและบล็อกการบูต คำเตือน! นี่จะทำลายข้อมูลบนดิสก์ของคุณ!
sudo sgdisk -z /dev/sda
sudo sgdisk -z /dev/sdb
สร้างพาร์ติชั่นใหม่บนไดรฟ์ที่เล็กที่สุดของคุณ: 100M สำหรับ ESP, 32G สำหรับ RAID SWAP, สำหรับ RAID root ถ้าไดรฟ์ sda ของคุณมีขนาดเล็กที่สุดให้ทำตามส่วน 2.1 มิฉะนั้นจะเป็นส่วน 2.2
2.1 สร้างตารางพาร์ติชัน (/ dev / sda มีขนาดเล็กกว่า)
ทำตามขั้นตอนต่อไปนี้:
sudo sgdisk -n 1:0:+100M -t 1:ef00 -c 1:"EFI System" /dev/sda
sudo sgdisk -n 2:0:+32G -t 2:fd00 -c 2:"Linux RAID" /dev/sda
sudo sgdisk -n 3:0:0 -t 3:fd00 -c 3:"Linux RAID" /dev/sda
คัดลอกตารางพาร์ติชันไปยังดิสก์อื่นและสร้าง UUID ที่ไม่ซ้ำกัน (จริง ๆ แล้วจะสร้าง UUIDs ใหม่สำหรับ sda)
sudo sgdisk /dev/sda -R /dev/sdb -G
2.2 สร้างตารางพาร์ติชัน (/ dev / sdb มีขนาดเล็ก)
ทำตามขั้นตอนต่อไปนี้:
sudo sgdisk -n 1:0:+100M -t 1:ef00 -c 1:"EFI System" /dev/sdb
sudo sgdisk -n 2:0:+32G -t 2:fd00 -c 2:"Linux RAID" /dev/sdb
sudo sgdisk -n 3:0:0 -t 3:fd00 -c 3:"Linux RAID" /dev/sdb
คัดลอกตารางพาร์ติชันไปยังดิสก์อื่นและสร้าง UUID ที่ไม่ซ้ำกัน (จริง ๆ แล้วจะสร้าง UUIDs สำหรับ sdb)
sudo sgdisk /dev/sdb -R /dev/sda -G
2.3 สร้างระบบไฟล์ FAT32 ใน / dev / sda
สร้างระบบไฟล์ FAT32 สำหรับพาร์ติชัน EFI
sudo mkfs.fat -F 32 /dev/sda1
mkdir /tmp/sda1
sudo mount /dev/sda1 /tmp/sda1
sudo mkdir /tmp/sda1/EFI
sudo umount /dev/sda1
3. ติดตั้งแพ็คเกจที่ขาดหายไป
อูบุนตูไลฟ์ซีดีมาโดยไม่มีแพ็คเกจหลักสองชุด Grub-efi และ mdadm ติดตั้งพวกเขา (ฉันไม่แน่ใจ 100% ว่าต้องใช้ grub-efi ที่นี่ แต่เพื่อรักษาความสมมาตรในการติดตั้งที่จะมาถึงให้นำมันเข้ามาด้วย)
sudo apt-get update
sudo apt-get -y install grub-efi-amd64 # (or grub-efi-amd64-signed)
sudo apt-get -y install mdadm
คุณอาจต้องgrub-efi-amd64-signed
ใช้แทนgrub-efi-amd64
ถ้าคุณเปิดใช้งานการบูตอย่างปลอดภัย (ดูความคิดเห็นโดย Alecz)
4. สร้างพาร์ติชัน RAID
สร้างอุปกรณ์ RAID ในโหมดที่ลดระดับลง อุปกรณ์จะเสร็จสมบูรณ์ในภายหลัง การสร้าง RAID1 แบบเต็มบางครั้งทำให้ฉันมีปัญหาในระหว่างการubiquity
ติดตั้งด้านล่างไม่แน่ใจว่าทำไม (mount / unmount? format?)
sudo mdadm --create /dev/md0 --bitmap=internal --level=1 --raid-disks=2 /dev/sda2 missing
sudo mdadm --create /dev/md1 --bitmap=internal --level=1 --raid-disks=2 /dev/sda3 missing
ตรวจสอบสถานะ RAID
cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda3[0]
216269952 blocks super 1.2 [2/1] [U_]
bitmap: 0/2 pages [0KB], 65536KB chunk
md0 : active raid1 sda2[0]
33537920 blocks super 1.2 [2/1] [U_]
bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: <none>
แบ่งพาร์ติชันอุปกรณ์ md
sudo sgdisk -z /dev/md0
sudo sgdisk -z /dev/md1
sudo sgdisk -N 1 -t 1:8200 -c 1:"Linux swap" /dev/md0
sudo sgdisk -N 1 -t 1:8300 -c 1:"Linux filesystem" /dev/md1
5. เรียกใช้โปรแกรมติดตั้ง
รันโปรแกรมติดตั้งแพร่หลายไม่รวมบูตที่จะล้มเหลวอยู่แล้ว ( หมายเหตุ : หากคุณลงชื่อเข้าใช้ผ่าน ssh คุณอาจต้องการใช้งานคอมพิวเตอร์เครื่องใหม่แทน)
sudo ubiquity -b
เลือกอย่างอื่นเป็นประเภทการติดตั้งและปรับเปลี่ยนmd1p1
ชนิดext4
, รูปแบบ: /
ใช่และจุดติด md0p1
พาร์ทิชันจะถูกเลือกโดยอัตโนมัติขณะที่แลกเปลี่ยน
รับกาแฟสักถ้วยในขณะที่การติดตั้งเสร็จสิ้น
สำคัญ:หลังจากการติดตั้งเสร็จสิ้นเลือกการทดสอบต่อไปเนื่องจากระบบยังไม่พร้อมบูต
ทำให้อุปกรณ์ RAID สมบูรณ์
แนบพาร์ติชัน sdb ที่รออยู่กับ RAID
sudo mdadm --add /dev/md0 /dev/sdb2
sudo mdadm --add /dev/md1 /dev/sdb3
ตรวจสอบว่าอุปกรณ์ RAID ทั้งหมดนั้นใช้งานได้ (และเลือกที่จะซิงค์)
cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb3[1] sda3[0]
216269952 blocks super 1.2 [2/1] [U_]
[>....................] recovery = 0.2% (465536/216269952) finish=17.9min speed=200000K/sec
bitmap: 2/2 pages [8KB], 65536KB chunk
md0 : active raid1 sdb2[1] sda2[0]
33537920 blocks super 1.2 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: <none>
กระบวนการด้านล่างอาจดำเนินต่อไปในระหว่างการซิงค์รวมถึงการรีบูต
6. กำหนดค่าระบบที่ติดตั้ง
ตั้งค่าเพื่อเปิดใช้งาน chroot ในระบบการติดตั้ง
sudo -s
mount /dev/md1p1 /mnt
mount -o bind /dev /mnt/dev
mount -o bind /dev/pts /mnt/dev/pts
mount -o bind /sys /mnt/sys
mount -o bind /proc /mnt/proc
cat /etc/resolv.conf >> /mnt/etc/resolv.conf
chroot /mnt
กำหนดค่าและติดตั้งแพ็คเกจ
apt-get install -y grub-efi-amd64 # (or grub-efi-amd64-signed; same as in step 3)
apt-get install -y mdadm
หากอุปกรณ์ md ของคุณยังคงซิงค์อยู่คุณอาจเห็นคำเตือนเป็นครั้งคราวเช่น:
/usr/sbin/grub-probe: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
นี่เป็นเรื่องปกติและสามารถละเว้นได้ (ดูคำตอบที่ด้านล่างของ
คำถามนี้ )
nano /etc/grub.d/10_linux
# change quick_boot and quiet_boot to 0
การปิดใช้งานquick_boot
จะหลีกเลี่ยงการเขียน Diskfilter ไม่ได้รับการสนับสนุนบั๊ก การปิดใช้งานquiet_boot
เป็นไปตามความชอบส่วนตัวเท่านั้น
แก้ไข /etc/mdadm/mdadm.conf เพื่อลบการอ้างอิงฉลากใด ๆ เช่นการเปลี่ยนแปลง
ARRAY /dev/md/0 metadata=1.2 name=ubuntu:0 UUID=f0e36215:7232c9e1:2800002e:e80a5599
ARRAY /dev/md/1 metadata=1.2 name=ubuntu:1 UUID=4b42f85c:46b93d8e:f7ed9920:42ea4623
ไปยัง
ARRAY /dev/md/0 UUID=f0e36215:7232c9e1:2800002e:e80a5599
ARRAY /dev/md/1 UUID=4b42f85c:46b93d8e:f7ed9920:42ea4623
ขั้นตอนนี้อาจไม่จำเป็น แต่ฉันเคยเห็นบางหน้าแนะนำว่ารูปแบบการตั้งชื่ออาจไม่เสถียร (name = ubuntu: 0/1) และสิ่งนี้อาจหยุดอุปกรณ์ RAID ที่สมบูรณ์แบบจากการประกอบระหว่างการบูต
แก้ไขบรรทัดใน/etc/default/grub
เพื่ออ่าน
#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
อีกครั้งขั้นตอนนี้อาจไม่จำเป็น แต่ฉันชอบที่จะบูตด้วยตาของฉันเปิด ...
6.1 เพิ่มสลีปสคริปต์
(จะได้รับการแนะนำโดยชุมชนที่ขั้นตอนนี้อาจจะไม่จำเป็นและสามารถแทนที่ใช้GRUB_CMDLINE_LINUX="rootdelay=30"
ใน/etc/default/grub
. สำหรับเหตุผลที่อธิบายที่ด้านล่างของ HOWTO นี้ผมขอแนะนำให้ติดกับสคริปต์การนอนหลับถึงแม้ว่ามันจะไม่สวยงามเท่ากว่าการใช้ rootdelay. ดังนั้น เราดำเนินการตามโปรแกรมปกติของเรา ... )
สร้างสคริปต์ที่จะรอให้อุปกรณ์ RAID ทำการตัดสิน หากไม่มีความล่าช้านี้การติดตั้งรูทอาจล้มเหลวเนื่องจากชุดประกอบ RAID ไม่เสร็จในเวลาที่กำหนด ฉันพบสิ่งนี้ด้วยวิธีที่ยากลำบาก - ปัญหาไม่ปรากฏขึ้นจนกว่าฉันจะยกเลิกการเชื่อมต่อ SSD ตัวใดตัวหนึ่งเพื่อจำลองความล้มเหลวของดิสก์! อาจต้องปรับเปลี่ยนเวลาขึ้นอยู่กับฮาร์ดแวร์ที่มีเช่นดิสก์ USB ภายนอกที่ช้า ฯลฯ
ใส่รหัสต่อไปนี้ลงใน/usr/share/initramfs-tools/scripts/local-premount/sleepAwhile
:
#!/bin/sh
echo
echo "sleeping for 30 seconds while udevd and mdadm settle down"
sleep 5
echo "sleeping for 25 seconds while udevd and mdadm settle down"
sleep 5
echo "sleeping for 20 seconds while udevd and mdadm settle down"
sleep 5
echo "sleeping for 15 seconds while udevd and mdadm settle down"
sleep 5
echo "sleeping for 10 seconds while udevd and mdadm settle down"
sleep 5
echo "sleeping for 5 seconds while udevd and mdadm settle down"
sleep 5
echo "done sleeping"
ทำให้สคริปต์เรียกใช้งานได้และติดตั้ง
chmod a+x /usr/share/initramfs-tools/scripts/local-premount/sleepAwhile
update-grub
update-initramfs -u
7. เปิดใช้งานการบูตจาก SSD ตัวแรก
ตอนนี้ระบบเกือบจะพร้อมแล้วเท่านั้นที่จะต้องติดตั้งพารามิเตอร์การบู๊ต UEFI เท่านั้น
mount /dev/sda1 /boot/efi
grub-install --boot-directory=/boot --bootloader-id=Ubuntu --target=x86_64-efi --efi-directory=/boot/efi --recheck
update-grub
umount /dev/sda1
การดำเนินการนี้จะติดตั้งบูตโหลดเดอร์ใน/boot/efi/EFI/Ubuntu
(aka EFI/Ubuntu
บน/dev/sda1
) และติดตั้งก่อนในเชนการบูต UEFI บนคอมพิวเตอร์
8. เปิดใช้งานการบูตจาก SSD ตัวที่สอง
เราเกือบเสร็จแล้ว ณ จุดนี้เราควรจะสามารถรีบูตsda
ไดรฟ์ นอกจากนี้mdadm
ควรสามารถจัดการกับความล้มเหลวของไดรฟ์sda
หรือ sdb
อย่างไรก็ตาม EFI จะไม่บุกเข้าไปดังนั้นเราจึงจำเป็นที่จะโคลน
dd if=/dev/sda1 of=/dev/sdb1
นอกจากการติดตั้งบูตในไดรฟ์ที่สองนี้จะทำให้ UUID ของระบบ FAT32 ไฟล์บนsdb1
พาร์ติชัน (ตามการรายงานblkid
) การแข่งขันของและsda1
/etc/fstab
(อย่างไรก็ตามโปรดทราบว่า UUIDs สำหรับ/dev/sda1
และ/dev/sdb1
พาร์ติชันจะยังคงแตกต่างกัน - เปรียบเทียบls -la /dev/disk/by-partuuid | grep sd[ab]1
กับblkid /dev/sd[ab]1
หลังการติดตั้งเพื่อตรวจสอบด้วยตัวคุณเอง)
ในที่สุดเราจะต้องใส่sdb1
พาร์ติชันลงในลำดับการบู๊ต (หมายเหตุ: ขั้นตอนนี้อาจไม่จำเป็นขึ้นอยู่กับ BIOS ของคุณฉันได้รับรายงานว่า BIOS บางอันสร้างรายการ ESP ที่ถูกต้องโดยอัตโนมัติ)
efibootmgr -c -g -d /dev/sdb -p 1 -L "Ubuntu #2" -l '\EFI\ubuntu\grubx64.efi'
ผมไม่ได้ทดสอบ แต่มันอาจจะมีความจำเป็นต้องมีป้ายชื่อที่ไม่ซ้ำกัน (-L) ระหว่าง ESP บนและsda
sdb
สิ่งนี้จะสร้างผลงานพิมพ์ของลำดับการบู๊ตปัจจุบันเช่น
Timeout: 0 seconds
BootOrder: 0009,0008,0000,0001,0002,000B,0003,0004,0005,0006,0007
Boot0000 Windows Boot Manager
Boot0001 DTO UEFI USB Floppy/CD
Boot0002 DTO UEFI USB Hard Drive
Boot0003* DTO UEFI ATAPI CD-ROM Drive
Boot0004 CD/DVD Drive
Boot0005 DTO Legacy USB Floppy/CD
Boot0006* Hard Drive
Boot0007* IBA GE Slot 00C8 v1550
Boot0008* Ubuntu
Boot000B KingstonDT 101 II PMAP
Boot0009* Ubuntu #2
โปรดทราบว่า Ubuntu # 2 (sdb) และ Ubuntu (sda) เป็นลำดับแรกในการบู๊ต
Reboot
ตอนนี้เราพร้อมที่จะรีบูตแล้ว
exit # from chroot
exit # from sudo -s
sudo reboot
ระบบควรรีบูตใน Ubuntu (คุณอาจต้องลบสื่อติดตั้ง Ubuntu Live ก่อน)
หลังจากบูตคุณอาจเรียกใช้
sudo update-grub
เพื่อแนบ Windows บูตโหลดเดอร์เข้ากับเชนการบูตด้วง
เครื่องเสมือน gotchas
หากคุณต้องการลองใช้เครื่องเสมือนก่อนมีข้อ จำกัด บางประการ: เห็นได้ชัดว่า NVRAM ที่เก็บข้อมูล UEFI จะถูกจดจำระหว่างการรีบูต แต่ไม่ใช่ระหว่างรอบการรีสตาร์ท ในกรณีดังกล่าวคุณอาจสิ้นสุดที่คอนโซล UEFI Shell คำสั่งต่อไปนี้ควรบูตคุณเข้าสู่เครื่องจาก/dev/sda1
(ใช้FS1:
สำหรับ/dev/sdb1
):
FS0:
\EFI\ubuntu\grubx64.efi
ทางออกแรกในคำตอบสูงสุดของการบูต UEFI ในกล่องเสมือน - Ubuntu 12.04อาจเป็นประโยชน์
การจำลองความล้มเหลวของดิสก์
ความล้มเหลวของอุปกรณ์ส่วนประกอบ RAID mdadm
ทั้งสามารถจำลองการใช้ อย่างไรก็ตามเพื่อตรวจสอบว่าสิ่งที่บูตจะอยู่รอดดิสก์ล้มเหลวฉันต้องปิดเครื่องคอมพิวเตอร์และตัดการเชื่อมต่อพลังงานจากดิสก์ ถ้าคุณทำเช่นนั้นเป็นครั้งแรกให้แน่ใจว่าอุปกรณ์ md จะ sync'ed
cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdb3[2] sda3[0]
216269952 blocks super 1.2 [2/2] [UU]
bitmap: 2/2 pages [8KB], 65536KB chunk
md0 : active raid1 sda2[0] sdb2[2]
33537920 blocks super 1.2 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: <none>
ในคำแนะนำด้านล่าง sdX เป็นอุปกรณ์ที่ล้มเหลว (X = a หรือ b) และ sdY เป็นอุปกรณ์ที่ใช้ได้
ถอดไดรฟ์
ปิดเครื่องคอมพิวเตอร์ ถอดไดรฟ์ เริ่มต้นใหม่. ตอนนี้อูบุนตูควรบูตด้วยไดรฟ์ RAID ในโหมดที่ลดระดับ (เฉลิมฉลอง! นี่คือสิ่งที่คุณพยายามจะทำ!;)
cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda3[0]
216269952 blocks super 1.2 [2/1] [U_]
bitmap: 2/2 pages [8KB], 65536KB chunk
md0 : active raid1 sda2[0]
33537920 blocks super 1.2 [2/1] [U_]
bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: <none>
กู้คืนจากดิสก์ที่ล้มเหลว
นี่เป็นกระบวนการที่ต้องทำตามหากคุณต้องการเปลี่ยนดิสก์ที่ผิดพลาด หากคุณต้องการเลียนแบบการเปลี่ยนคุณสามารถบูตเข้าสู่เซสชัน Ubuntu Live และใช้งานได้
dd if=/dev/zero of=/dev/sdX
เพื่อล้างดิสก์ให้สะอาดก่อนที่จะรีบูตระบบจริง หากคุณเพิ่งทดสอบการบูท / RAID ที่ซ้ำซ้อนในส่วนด้านบนคุณสามารถข้ามขั้นตอนนี้ได้ อย่างไรก็ตามคุณต้องดำเนินการอย่างน้อย 2 และ 4 ด้านล่างเพื่อกู้คืนการบูท / RAID แบบเต็มสำหรับระบบของคุณ
การกู้คืนระบบการบูต RAID + หลังจากการเปลี่ยนดิสก์ต้องใช้ขั้นตอนต่อไปนี้:
- แบ่งพาร์ติชันไดรฟ์ใหม่
- เพิ่มพาร์ติชันให้กับอุปกรณ์ md
- โคลนพาร์ติชันสำหรับเริ่มระบบ
- เพิ่มระเบียน EFI สำหรับโคลน
1. แบ่งพาร์ติชันไดรฟ์ใหม่
คัดลอกตารางพาร์ติชันจากไดรฟ์ที่มีสุขภาพดี:
sudo sgdisk /dev/sdY -R /dev/sdX
สุ่ม UUIDs บนไดรฟ์ใหม่อีกครั้ง
sudo sgdisk /dev/sdX -G
2. เพิ่มไปยังอุปกรณ์ md
sudo mdadm --add /dev/md0 /dev/sdX2
sudo mdadm --add /dev/md1 /dev/sdX3
3. โคลนพาร์ติชั่นสำหรับบูต
โคลน ESP จากไดรฟ์เพื่อสุขภาพ (ระวังอาจทำการถ่ายโอนข้อมูลไปยัง ESP ทั้งสองก่อนเพื่อเปิดใช้งานการกู้คืนถ้าคุณทำพลาดจริงๆ)
sudo dd if=/dev/sdY1 of=/dev/sdX1
4. ใส่ดิสก์ที่ได้รับการฟื้นฟูใหม่ลงในลำดับการบู๊ต
เพิ่มระเบียน EFI สำหรับโคลน แก้ไขเลเบล -L ตามต้องการ
sudo efibootmgr -c -g -d /dev/sdX -p 1 -L "Ubuntu #2" -l '\EFI\ubuntu\grubx64.efi'
ตอนนี้การรีบูตระบบควรทำให้มันกลับมาเป็นปกติ (อุปกรณ์ RAID อาจยังซิงค์อยู่)!
ทำไมสคริปต์การนอนหลับ?
มันได้รับการแนะนำโดยชุมชนที่เพิ่มสคริปต์การนอนหลับอาจจะไม่จำเป็นและจะถูกแทนที่โดยใช้GRUB_CMDLINE_LINUX="rootdelay=30"
ในการตาม/etc/default/grub
sudo update-grub
คำแนะนำนี้สะอาดกว่าแน่นอนและทำงานในสถานการณ์ความล้มเหลวของดิสก์ / แทนที่ อย่างไรก็ตามมีข้อแม้ ...
ฉันยกเลิกการเชื่อมต่อ SSD ตัวที่สองและพบว่ามีrootdelay=30
ฯลฯ แทนที่สลีปสคริปต์:
1) ระบบทำการบู๊ตในโหมดที่เสื่อมโทรมโดยไม่มีไดรฟ์ "ล้มเหลว"
2) ในการบูทที่ไม่มีการสลายตัว (มีไดรฟ์ทั้งคู่อยู่) เวลาบูตจะลดลง การหน่วงเวลาสามารถรับรู้ได้เฉพาะเมื่อไดรฟ์ที่สองหายไป
1) และ 2) ฟังดูดีจนกระทั่งฉันเพิ่มไดรฟ์ที่สองอีกครั้ง ตอนบูตอาร์เรย์ RAID ไม่สามารถรวบรวมและทิ้งฉันไว้ที่initramfs
พรอมต์โดยไม่ทราบว่าต้องทำอะไร มันอาจจะเป็นไปได้ที่จะกอบกู้สถานการณ์โดย a) การบูตไปยังแท่ง USB Ubuntu Live, b) การติดตั้งmdadm
และ c) ประกอบอาร์เรย์ขึ้นใหม่ด้วยตนเอง แต่ ... ฉันทำบางสิ่งบางอย่างยุ่งเหยิง แต่เมื่อฉันอีกครั้งวิ่งทดสอบนี้มีสคริปต์การนอนหลับ (ใช่ฉันได้เริ่มต้น HOWTO จากด้านบนเป็นครั้งที่ n ... ), ระบบไม่บูต อาร์เรย์อยู่ในโหมดที่เสื่อมโทรมและฉันสามารถเพิ่ม/dev/sdb[23]
พาร์ติชันใหม่ได้เองโดยไม่ต้องใช้ USB เสริม ฉันไม่รู้ว่าทำไมสคริปต์สลีปทำงานในขณะที่สคริปต์rootdelay
ไม่ทำงาน บางทีอาจmdadm
จะสับสนโดยอุปกรณ์ส่วนประกอบสองตัวที่ไม่ซิงค์กันเล็กน้อย แต่ฉันคิดว่าmdadm
ถูกออกแบบมาเพื่อจัดการกับมัน อย่างไรก็ตามเนื่องจากสคริปต์การนอนหลับทำงานได้ฉันก็ยังติดอยู่
มันอาจจะเป็นที่ถกเถียงกันอยู่ว่าการถอดอุปกรณ์ส่วนประกอบ RAID ที่แข็งแรงสมบูรณ์การบู๊ต RAID กลับไปที่โหมดที่เสื่อมโทรมจากนั้นการเพิ่มอุปกรณ์คอมโพเนนต์อีกครั้งเป็นสถานการณ์ที่ไม่สมจริง: สถานการณ์จริงคืออุปกรณ์หนึ่งล้มเหลวและถูกแทนที่ด้วยอุปกรณ์ใหม่ ปล่อยให้โอกาสน้อยลงที่mdadm
จะสับสน ฉันเห็นด้วยกับข้อโต้แย้งนั้น อย่างไรก็ตามฉันไม่ทราบวิธีทดสอบว่าระบบยอมรับความล้มเหลวของฮาร์ดแวร์ได้อย่างไรยกเว้นการปิดใช้งานฮาร์ดแวร์บางตัว! และหลังจากการทดสอบฉันต้องการกลับไปใช้ระบบการทำงานที่ซ้ำซ้อน (ดีฉันสามารถต่อ SSD ตัวที่สองของฉันกับเครื่องอื่นและปัดก่อนที่จะเพิ่มอีกครั้ง แต่นั่นไม่เป็นไปได้)
โดยสรุป: สำหรับความรู้ของฉันrootdelay
โซลูชันนั้นสะอาดเร็วกว่าสลีปสคริปต์สำหรับบูทที่ไม่มีการสลายตัวและควรใช้งานได้จริงสำหรับความล้มเหลวของไดรฟ์ / การเปลี่ยนสถานการณ์จริง อย่างไรก็ตามฉันไม่ทราบวิธีที่เป็นไปได้ในการทดสอบ ดังนั้นในขณะนี้ฉันจะยึดติดกับสคริปต์การนอนหลับที่น่าเกลียด