Bagaimana cara md
perangkat berkumpul saat boot di Ubuntu? Benarkah /etc/mdadm/mdadm.conf
faktor yang relevan di sini?
Saya mdadm.conf
adalah suara dan saya memeriksa bahwa sementara aku berada di lingkungan CD rescue. Saat menjalankannya mdadm -A --scan
menemukan dan menetapkan nama perangkat yang diinginkan. The mdadm.conf
berisi AUTO -all
untuk mengambil semua otomatisme dari merakit array.
Apa yang perlu saya lakukan adalah untuk dapat merakit md
perangkat secara otomatis sebagaimana dijelaskan pada mdadm.conf
saat boot atau ketika merakitnya menghargai super-minor
nilai untuk array 0,9 dan name
(tampaknya <hostname>:<super-minor>
) untuk array 1.2 dan melakukan hal yang benar tanpa mdadm.conf
. Potongan puzzle apa yang saya lewatkan?
Saya memiliki masalah berikut. Ada dua md
perangkat dengan RAID1 ( md0
dan md1
) dan satu dengan RAID6 ( md2
). Saya merujuk mereka dengan nama perangkat yang diinginkan . md0
memiliki meta-data versi 0.9, dua lainnya memiliki versi 1.2. md0
peta ke /
dan dua lainnya tidak relevan untuk booting .
Boot drive dipartisi dengan GPT. Ada lem "BIOS Boot Partition" ( sda1
) di atasnya. grub-install --no-floppy /dev/sda
melaporkan kesuksesan.
md0 == sda3 + sdb3
md1 == sda2 + sdb2
md2 == sdc + sdd + sde + sdf + sdg + sdh
sda1
dansdb1
merupakan "BIOS Boot Partition" masing-masing
GRUB2 senang dengan /boot/grub/devicemap
saya memberikannya dan saya menambahkan part_gpt
, raid
, mdraid09
dan ext2
untuk modul untuk preload di GRUB2.
Karena saya masih memiliki volume root di lingkungan penyelamatan, saya cukup memasang semuanya dan kemudian chroot
memasukkannya:
mkdir /target
mount /dev/md0 /target
mount -o bind /dev /target/dev
mount -o bind /dev/pts /target/dev/pts
mount -o bind /sys /target/sys
mount -o bind /proc /target/proc
chroot /target /bin/bash
Dari sana saya mereset super-minor
on md0
(dengan meta-data 0.9) dan name
on md1
dan md2
. Saya juga memverifikasi bahwa itu berfungsi menggunakan mdadm --detail ...
. Selain itu saya menyesuaikan /etc/default/grub
, menjalankan update-grub
dan juga grub-install --no-floppy /dev/sda
dan grub-install --no-floppy /dev/sdb
.
Setelah itu, ketika boot, saya selalu jatuh ke initramfs
shell penyelamatan, karena sistem file root tidak dapat dipasang. Alasannya, setelah memeriksa /proc/mdstat
tampaknya md
perangkat yang bersangkutan bahkan tidak dapat dirakit dan dijalankan. Belum lagi dua drive lainnya (meta-data versi 1.2) menerima nomor perangkat di suatu tempat dalam kisaran 125..127.
Catatan: GRUB2 muncul dari disk boot. Jadi setidaknya sudah tertanam dengan benar. Masalahnya adalah transisi dari awal rootfs
ke sistem file root yang tepat.
/dev/mdX
untuk alasan ini. Gunakan/dev/md/NAME
sebagai gantinya. Itu tidak akan pernah berubah./etc/fstab
. Pengaturan tidak bergantung pada nama, saya masih ingin mereka menjadi seperti itu;)Not to mention that the other two (meta-data version 1.2) drives receive a device number somewhere in the 125..127 range
. Saya tidak cukup tahu tentang bagaimana ubuntu mengumpulkan volume serangan untuk menjawab masalah yang lebih besar.Jawaban:
Proses Boot Dasar
Grub
Ada mode fallback, ketika Grub tidak bisa benar-benar membaca sistem file — baik karena tidak ada cukup ruang untuk menanamkan semua kode itu dalam catatan boot, atau karena tidak mengetahui sistem file atau lapisan di bawahnya. Dalam hal ini, GRUB menyematkan daftar sektor, dan membaca kode dari mereka. Ini jauh kurang kuat, dan sebaiknya dihindari. Bahkan mungkin dapat melakukan kernel dan initramf seperti itu (tidak yakin).
Inti
Kernel kemudian mengambil kendali, dan melakukan banyak init hardware dasar. Tahap ini cukup cepat. Selanjutnya, kernel membongkar initramfs ke tmpfs, dan mencari a
/init
di tmpfs. Kemudian dieksekusi (dalam arti normal, kernel sedang berjalan pada saat ini)/init
. Omong-omong, ini adalah skrip shell lama yang sederhana.Initramfs
Anda dapat mengekstrak initramfs dengan tangan dengan melakukan sesuatu seperti
mkdir /tmp/foo; cd /tmp/foo; zcat /boot/initrd.img-3.8-trunk-amd64 | cpio -idmv
.Initramfs bertanggung jawab untuk memuat semua driver, memulai udev, dan menemukan sistem file root. Ini adalah langkah yang gagal bagi Anda — ia tidak dapat menemukan sistem file root, jadi ia menyelamatkan.
Setelah initramfs selesai, ia memiliki sistem file root yang terpasang, dan menyerahkan kontrol ke / sbin / init.
Boot sistem
Pada titik ini, init Anda mengambil alih — saya pikir Ubuntu saat ini menggunakan pemula.
Apa yang rusak
Saya tidak sepenuhnya yakin apa yang rusak (sebagian, saya akui, karena saya jauh lebih akrab dengan cara kerjanya di Debian daripada Ubuntu, meskipun serupa), tetapi saya punya beberapa saran:
mdadm.conf
. Anda mungkin hanya perlu menjalankannyaupdate-initramfs -u
untuk memperbaikinya.sumber
Oke, saya tahu bahwa saya hanya kehilangan satu potong. The
initrd
gambar tidak diperbarui setelah mengutak-atikmdadm.conf
.Jadi apa yang saya lakukan?
Saya boot ke Ubuntu Server menginstal sistem penyelamatan CD. Memilih untuk mengeksekusi shell dari lingkungan installer dan tidak menggunakan sistem file root. Kemudian (komentar diawali dengan
#
):Ini terdengar rumit, tetapi dapat dilakukan juga dengan
bash
satu-liner (meskipun panjang):Ini menggunakan saat ini nama-nama
md
perangkat dan UUIDs mereka dan menciptakandevicemap
untuk teliti GRUB2 ini. Jadi dengan anggapan hal di atas dilakukan dengan benar, Anda harus sudah memiliki nama perangkat yang benar.Lebih lanjut tentang:
Pastikan itu mengandung:
jika Anda telah mengonfigurasi
/
atau/boot
partisi Anda menjadi meta-data versi 1.2, gunakanmdraid1x
sebagai gantinyamdraid09
.Lebih lanjut:
Langkah di atas adalah tautan yang hilang . Ini rupanya memastikan bahwa mulai
mdadm.conf
berlaku saat boot.Setelah itu tinggalkan
chroot
dan reboot.sumber