UEFI BIOSを搭載したマシンがあります。 RAID 1(およびLVM)を備えたデスクトップバージョンのUbuntu 18.04をインストールして、ドライブの1つが故障してもシステムが引き続き動作するようにします。私はそれを行う方法のHOWTOを見つけていません。デスクトップインストーラーはRAIDをサポートしていません。 この質問 への答えはほとんど機能しますが、いくつかのGRUB Shell/rescue USBディスクとUEFI設定マジックが必要です。魔法の部品なしで機能する手順を知っている人はいますか?
EFIおよびRAID1 + LVMでUbuntuサーバーをインストールする方法 、 buntu 18.04でセットアップされたRAID 、および buntu 18.04デスクトップインストーラーでのRAIDサポート? および 起動時に「btrfsファイルシステムのスキャン」を削除する方法? 、linuxコマンドのみを使用して、動作するHOWTOをまとめることができました。
btrfs
起動スクリプトを削除します。Install Ubuntu Server
を選択します。Partition disks
ステップで、Manual
を選択します。Configure the Logical Volume Manager
。を選択します。Delete logical volume
を選択します。Delete volume group
を選択します。Configure software RAID
。を選択します。Delete MD device
を選択します。Delete the partition
を選択して削除します。EFI System Partition
。Physical Volume for RAID
として使用します。Configure software RAID
を選択します。Create MD device
を選択し、RAID1
、2つのアクティブディスク、0つのスペアディスクを入力して、/dev/sda2
および/dev/sdb2
デバイスを選択します。Configure the Logical Volume Manager
を選択します。/dev/md0
デバイスにボリュームグループvg
を作成します。swap
root
tmp
var
home
at 200Gswap
パーティションの場合、Use as: swap
を選択します。Use as: ext4
を選択します(それぞれ[/
、/tmp
、/var
、/home
)。Finish partitioning and write changes to disk
を選択します。どのEFIパーティションがマウントされているかを確認してください。最も可能性の高い/dev/sda1
。
マウント| grepブート
RAIDステータスを確認します。ほとんどの場合、同期しています。
猫/ proc/mdstat
ブートロードされたEFIは/dev/sda1
にインストールされているはずです。そのパーティションはRAIDシステムを介してミラーリングされないため、クローンを作成する必要があります。
Sudo dd if=/dev/sda1 of=/dev/sdb1
どちらかのドライブが停止した場合、システムは(同一の)EFIパーティションから起動する必要があるため、この手順は不要です。ただし、どちらのディスクからでも起動できるようにすることは賢明なようです。
efibootmgr -v
を実行し、ubuntu
ブートエントリのファイル名を確認します。私のインストールでは、\EFI\ubuntu\shimx64.efi
でした。Sudo efibootmgr -c -d /dev/sdb -p 1 -L "ubuntu2" -l \EFI\ubuntu\shimx64.efi
を実行します。ドライブを削除または無効にしようとする場合は、最初にRAID同期が完了するまで待つ必要があります! cat /proc/mdstat
で進行状況を監視しますが、待機中に以下の手順8を実行できます。
1台のドライブに障害が発生した場合(同期の完了後)、システムは引き続き起動します。ただし、ブートシーケンスはbtrfsファイルシステムの検索に多くの時間を費やします。不要な待機を削除するには、次を実行します
Sudo apt-get purge btrfs-progs
これにより、btrfs-progs
、btrfs-tools
、およびubuntu-server
が削除されます。最後のパッケージは単なるメタパッケージであるため、削除するパッケージがリストにない場合は問題ありません。
Sudo apt install ubuntu-desktop
を実行して、デスクトップバージョンをインストールします。その後、おそらく同期が行われ、システムが構成され、ディスク障害に耐えることができます!
パッケージgrub-efi-AMD64
が更新されると、EFIパーティション(/boot/efi
にマウント)上のファイルが変更される場合があります。その場合、更新プログラムを手動でミラーパーティションに複製する必要があります。幸いなことに、grub-efi-AMD64
が更新されようとしているという警告を更新マネージャーから受け取る必要があります。そのため、更新のたびに確認する必要はありません。
更新後に再起動していない場合は、使用します
mount | grep boot
どのEFIパーティションがマウントされているかを確認します。そのパーティション(通常は/dev/sdb1
)をクローンソースとして使用する必要があります。
マウントポイントを作成し、両方のパーティションをマウントします。
Sudo mkdir /tmp/sda1 /tmp/sdb1
Sudo mount /dev/sda1 /tmp/sda1
Sudo mount /dev/sdb1 /tmp/sdb1
各ツリーで最新のファイルのタイムスタンプを見つける
Sudo find /tmp/sda1 -type f -printf '%T+ %p\n' | sort | tail -n 1 > /tmp/newest.sda1
Sudo find /tmp/sdb1 -type f -printf '%T+ %p\n' | sort | tail -n 1 > /tmp/newest.sdb1
タイムスタンプを比較する
cat /tmp/newest.sd* | sort | tail -n 1 | Perl -ne 'm,/tmp/(sd[ab]1)/, && print "/dev/$1 is newest.\n"'
/dev/sdb1 is newest
(ほとんどの場合)または/dev/sda1 is newest
を印刷する必要があります。そのパーティションをクローンソースとして使用する必要があります。
キャッシュ/パーティションの不整合を回避するために、クローニングの前にパーティションをアンマウントします。
Sudo umount /tmp/sda1 /tmp/sdb1
/dev/sdb1
がクローンソースの場合:
Sudo dd if=/dev/sdb1 of=/dev/sda1
/dev/sda1
がクローンソースの場合:
Sudo dd if=/dev/sda1 of=/dev/sdb1
完了!
最初に仮想マシンでこれを試してみたい場合、いくつかの注意事項があります。どうやら、UEFI情報を保持するNVRAMは再起動間で記憶されますが、シャットダウンと再起動のサイクル間では記憶されません。その場合、UEFI Shellコンソールが表示される場合があります。次のコマンドを実行すると、/dev/sda1
からマシンが起動します(FS1:
には/dev/sdb1
を使用します)。
FS0:
\EFI\ubuntu\grubx64.efi
virtualboxでのUEFIブート-Ubuntu 12.04 の一番上の答えの最初の解決策も役立つかもしれません。