基本起動プロセス

基本起動プロセス

Ubuntuの起動時にデバイスを組み立てる方法はmd?ここに実際に/etc/mdadm/mdadm.conf関連要素がありますか?

私のmdadm.confシステムは正常ですが、回復CD環境で確認してみました。実行したら、mdadm -A --scan必要に応じてデバイス名を見つけて割り当てます。これには、アレイアセンブリのすべての自動化を排除することがmdadm.conf含まれます。AUTO -all

私がしなければならmdないのは、起動時にデバイスを自動的に組み立てることがmdadm.confできます。 ?super-minorname<hostname>:<super-minor>mdadm.conf


次の問題が発生しました。mdRAID1を使用する2つのデバイス(md0およびmd1)とRAID6を使用する1つのデバイス()がありますmd2。私の言葉は、その人たちです。欲しいデバイス名。md0メタデータバージョンは0.9で、残りの2つのバージョンは1.2です。他の2つにmd0マッピングされますが、関連はありません。/始める

ブートドライブはGPTに分割されています。sda1その上に接着剤「BIOSブートパーティション」()があります。grub-install --no-floppy /dev/sda成功を報告します。

  • md0 == sda3 + sdb3
  • md1 == sda2 + sdb2
  • md2 == sdc + sdd + sde + sdf + sdg + sdh
  • sda1どちらもsdb1「BIOSブートパーティション」です。

GRUB2は私が提供した内容に満足し、/boot/grub/devicemapGRUB2にプリロードするモジュールに、、、およびを追加します。part_gptraidmdraid09ext2

私のルートボリュームはまだ回復環境にあるので、すべてをマウントしてchrootここに書き込みます。

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

そこでsuper-minoron md0(メタデータ0.9を使用)とnameonmd1とoffmd2も動作することを確認しましたmdadm --detail ...。その他には、/etc/default/grub実行update-grubおよびgrub-install --no-floppy /dev/sdaon も調整しましたgrub-install --no-floppy /dev/sdb

initramfsただし、その後の起動時にルートファイルシステムをマウントできないため、常に回復シェルに入ります。確認の結果、/proc/mdstatデバイスmdが組み立てられて動作していないことが原因であるようです。他の2つ(メタデータバージョン1.2)ドライブは、125..127の範囲のデバイス番号を受け取ります。

メモ:GRUB2は起動ディスクに表示されます。少なくとも正しく挿入されました。問題は、rootfs初期ルートファイルシステムから正しいルートファイルシステムに変換することです。

ベストアンサー1

基本起動プロセス

幼虫

  1. GrubはMBRからディスク、MD、ファイルシステムなどのコードを読み込みます。
  2. Grubは/ bootパーティションを見つけ、そのパーティションから残りの部分を読み込みます。構成と構成がロードする必要があるすべてのモジュールが含まれています。
  3. Grubは通常、カーネルとinitramfsをメモリにロードし、カーネルを実行するように指示する設定の指示に従います。

Grubは、実際にファイルシステムを読み取れない場合に代替モードを使用します。これは、すべてのコードをブートレコードに含めるのに十分なスペースがないため、またはファイルシステムまたはその下のレイヤーを知らないためです。この場合、GRUBはセクタのリストを含み、ここからコードを読みます。これはたくさん非常に強力ではないので、避けるのが最善です。カーネルとinitramfsも実行できます(わかりません)。

コア

その後、カーネルは制御権を持ち、多くの基本的なハードウェア初期化を実行します。このステップはかなり高速です。次にカーネルは initramfs を tmpfs に解凍し、対応する/inittmpfs を探します。それから実行されます(通常の意味では、現在のカーネルは完全に実行中です)/init。ところで、これは普通の古いシェルスクリプトです。

ファイルシステムの初期化

次の操作を実行してinitramfsを手動で抽出できますmkdir /tmp/foo; cd /tmp/foo; zcat /boot/initrd.img-3.8-trunk-amd64 | cpio -idmv

initramfsはすべてのドライバをロードし、udevを起動し、ルートファイルシステムを見つけることを担当します。このステップは失敗します。ルートファイルシステムが見つからないため終了します。

initramfsが完了したら、ルートファイルシステムをマウントし、制御権を/ sbin / initに転送します。

システム起動

この時点であなたの初期化が引き継がれます。現在、Ubuntuはupstartを使用しているようです。

何が壊れたの?

私は何が間違っているのか完全にはわかりません(似ていますが、UbuntuよりもDebianで動作する方法に慣れているため、部分的に問題であることを認めます)。しかし、いくつかの提案があります。

  • initramfsには独自のmdadm.confupdate-initramfs -u
  • 開始メッセージを表示します。エラーがある可能性があります。 「quiet」と「splash」を削除して実際に確認するには、カーネル行に「verbose」を追加してください。
  • 使用するストレージによっては、rootdelayパラメータを設定する必要があります。
  • シェルプロンプトにダンプするとコマンドはあまりありませんが、mdadmがあります。問題が何であるかをご覧ください。問題が解決したら、起動を続行できます。

おすすめ記事