私はCentos 7を実行しています。元々は、次のような単一のディスクで実行されていました。
1 200M EFI System (/boot/efi)
2 500M Microsoft basic (/boot)
3 465.1G Linux LVM
LVM VG centos
- LVM LV ext4 centos-root (/)
- LVM LV swap centos-swap (swap)
これは、もともとLinuxソフトウェアRAID1アレイにインストールされるはずだったので、これは一時的な解決策でした。今日はそれを移行することにしました。これは現在、次のようになっています。
Both new disks have this partition layout:
1 200M EFI System (/boot/efi)
2 457.6G Linux RAID /dev/md0 RAID1 (for boot and LVM)
3 8G Linux RAID /dev/md1 RAID0 (so 16GB total, for swap)
/dev/md0 looks like this:
1 500M Linux filesystem (/boot)
2 457G Linux LVM (centos-root is migrated to this)
LVM now has only one LV, centos-root
/etc/mdadm.conf
は次のようになります:
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=main.centos.local:0 UUID=5b5057b4:4235ba4b:5342dfda:acf63302
devices=/dev/sda2,/dev/sdb2
ARRAY /dev/md1 level=raid0 num-devices=2 metadata=1.2 name=main.centos.local:1 UUID=f82a8c99:9b391d83:4efc9456:9e9bad98
devices=/dev/sda3,/dev/sdb3
/etc/fstab
は次のようになります:
/dev/mapper/centos-root / xfs defaults 0 0
UUID=fcb5f82f-ce6b-460b-800f-329e010bc403 /boot xfs defaults 0 0
UUID=C532-14AE /boot/efi vfat umask=0077,shortname=winnt 0 0
/dev/md1 swap swap defaults 0 0
blkid
はこれを出力します(関連エントリのみ):
/dev/sdb1: SEC_TYPE="msdos" UUID="C532-14AE" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="ed301bbd-c15c-40af-ae75-bf238d0e6270"
/dev/sda1: SEC_TYPE="msdos" UUID="C532-14AE" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="f3a76412-41a0-4e04-9b04-ad1c159133cf"
/dev/md0p1: LABEL="boot" UUID="fcb5f82f-ce6b-460b-800f-329e010bc403" TYPE="xfs" PARTLABEL="primary" PARTUUID="df8d6481-c6ce-423a-b5d5-205d355e5653"
/dev/md0p2: UUID="7LfywM-oPHy-MTEt-swlI-EVbZ-opTo-m82E6R" TYPE="LVM2_member" PARTLABEL="primary" PARTUUID="19e7f9d5-a955-4036-8338-03a748faa1f6"
/dev/mapper/centos-root: UUID="deaa9788-b487-4991-adf7-2945788fb6cd" TYPE="xfs"
他のEFIパーティションを/boot/efi_[device]
に自動的にマウントするスクリプトがあります。カーネルが更新されると、grub.cfgがこのパーティションにコピーされ、すべての同期が維持されます。
/dev/sda1
と/dev/sdb1
はスクリプトによって同期が保たれているので(私はこれを確認しました)、fstabがどちらかを/boot/efi
にマウントすることは問題になりません(これは、障害により1台のドライブが取り外された場合でも、システムは起動することが保証されています。物事を簡素化するためにLVにスワップを配置することもできましたが、RAID0は(それだけの価値がある)パフォーマンスが向上し、16 GBの追加スペースが得られます。
次のコマンドを使用して、LVを古いドライブから新しいPVに移行しました。
pvcreate /dev/md0p2
vgextend centos /dev/md0p2
pvmove /dev/sdg3
vgreduce centos /dev/sdg3
次に、dracut
を使用してinitramfsを再生成し(オリジナルをバックアップした後)、最後にgrub.cfgを再生成しました。その後、新しい/boot
および/boot/efi
パーティションをマウントし、すべてをコピーしました。
古いドライブを切断して起動した後、dracutは私のRAIDアレイ、そしてもちろん/boot
パーティションと私のLVGを見つけることができません。 mdadm --assemble
と/dev/md0
で/dev/md
を呼び出していないようです。 dracut
プロンプトからそれを行うことができます。その後、lvm_scan
がLVGを検出し、/dev/centos/root
を/dev/root
にリンクできます。システムは、プロンプトを終了すると問題が発生します。すべてが正確にあるべき場所にあるようです。
利用可能なカーネルアップデートがあったので、それをインストールしようとしましたが(initramfsとgrub.cfgファイルを再生成するときに、最初に何かを台無しにしたと仮定して)、ダイスはありませんでした。システムはまったく同じ方法でまだ失敗します。これは、どちらかのEFIパーティションから手動で起動する場合にも当てはまります(2つは同一であるためです)。
ここで何が欠けていますか? dracutで配列を組み立てるにはどうすればよいですか?
Dracutのドキュメントでは、md raid配列はすべて自動的にアセンブルされるべきであり、rd.md.uuid
パラメータは、特定のアレイのみを起動プロセスの一部としてアセンブルする場合にのみ使用してください。
実際には、配列は自動的には組み立てられず、rd.md.uuid
パラメータが設定されます(アセンブルする必要がある各配列に対して)。 rd.lvm.lv
パラメータは既に設定されており、md
を妨害するものですが、テストする時間はありません。
つまり、rd.md.uuid
への私の両方の配列のパラメータGRUB_CMDLINE_LINUX
変数の/etc/default/grub
、そしてgrub構成を再生成すると問題が解決しました。