Ubuntuの起動時にデバイスを組み立てる方法はmd
?ここに実際に/etc/mdadm/mdadm.conf
関連要素がありますか?
私のmdadm.conf
システムは正常ですが、回復CD環境で確認してみました。実行したら、mdadm -A --scan
必要に応じてデバイス名を見つけて割り当てます。これには、アレイアセンブリのすべての自動化を排除することがmdadm.conf
含まれます。AUTO -all
私がしなければならmd
ないのは、起動時にデバイスを自動的に組み立てることがmdadm.conf
できます。 ?super-minor
name
<hostname>:<super-minor>
mdadm.conf
次の問題が発生しました。md
RAID1を使用する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/devicemap
GRUB2にプリロードするモジュールに、、、およびを追加します。part_gpt
raid
mdraid09
ext2
私のルートボリュームはまだ回復環境にあるので、すべてをマウントして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-minor
on md0
(メタデータ0.9を使用)とname
onmd1
とoffmd2
も動作することを確認しましたmdadm --detail ...
。その他には、/etc/default/grub
実行update-grub
およびgrub-install --no-floppy /dev/sda
on も調整しましたgrub-install --no-floppy /dev/sdb
。
initramfs
ただし、その後の起動時にルートファイルシステムをマウントできないため、常に回復シェルに入ります。確認の結果、/proc/mdstat
デバイスmd
が組み立てられて動作していないことが原因であるようです。他の2つ(メタデータバージョン1.2)ドライブは、125..127の範囲のデバイス番号を受け取ります。
メモ:GRUB2は起動ディスクに表示されます。少なくとも正しく挿入されました。問題は、rootfs
初期ルートファイルシステムから正しいルートファイルシステムに変換することです。
ベストアンサー1
基本起動プロセス
幼虫
- GrubはMBRからディスク、MD、ファイルシステムなどのコードを読み込みます。
- Grubは/ bootパーティションを見つけ、そのパーティションから残りの部分を読み込みます。構成と構成がロードする必要があるすべてのモジュールが含まれています。
- Grubは通常、カーネルとinitramfsをメモリにロードし、カーネルを実行するように指示する設定の指示に従います。
Grubは、実際にファイルシステムを読み取れない場合に代替モードを使用します。これは、すべてのコードをブートレコードに含めるのに十分なスペースがないため、またはファイルシステムまたはその下のレイヤーを知らないためです。この場合、GRUBはセクタのリストを含み、ここからコードを読みます。これはたくさん非常に強力ではないので、避けるのが最善です。カーネルとinitramfsも実行できます(わかりません)。
コア
その後、カーネルは制御権を持ち、多くの基本的なハードウェア初期化を実行します。このステップはかなり高速です。次にカーネルは initramfs を tmpfs に解凍し、対応する/init
tmpfs を探します。それから実行されます(通常の意味では、現在のカーネルは完全に実行中です)/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.conf
。update-initramfs -u
- 開始メッセージを表示します。エラーがある可能性があります。 「quiet」と「splash」を削除して実際に確認するには、カーネル行に「verbose」を追加してください。
- 使用するストレージによっては、rootdelayパラメータを設定する必要があります。
- シェルプロンプトにダンプするとコマンドはあまりありませんが、mdadmがあります。問題が何であるかをご覧ください。問題が解決したら、起動を続行できます。