はじめに
個人的に気に入っているLinuxディストリビュージョンであるArch LinuxをMDADMを用いた
Software RAID環境にUEFIブートでインストールしたので、そのメモを書いておきます。
ハードウェア構成
Machine : NEC Mate MK32M/B-H
CPU : Intel Core i5 4570
M/B : Intel B85 Express Chipset
MEM : 20GB
Storage : WD Red WD10JFCX 1TB 2.5inch x2
インストールの準備
光学ドライブは取り外してHDDエンクロージャを載せているので、USBメモリを利用してインストールします。
今回は部屋に落ちてたソニーの16GB USB3.0 USBメモリを使いました。
今回はddでブータブルUSBを作成するので、Linux環境で操作を行います。
まずはArchのisoをダウンロードします。
日本サーバーだとUTかJAISTからもらってきます。
詳しくは公式をどうぞ
wget %isoのアドレス%
ダウンロードが完了したら、dd
で焼きこみます。
dd bs=4M if=%isoファイル% of=/dev/sdb && sync
注意:Windowsで焼きこむと何故かUEFIでブートしなかったりとろくなことになりません。
VMWareなどを用いてLinux環境でddすることをおすすめします。
UEFIの設定
次にUEFI側の設定を行います。この工程はマシンによって異なる為一概に説明できないのですが、とりあえず
- BIOSブートではなくUEFIブートを優先(もしくはBIOSブートをオフ)
- Secure Bootをオフ
- Compatibility Support Mode(CSM)をオフ
- USBからのブートを優先
くらいやっておけば大丈夫だと思います。ここはマザーボードやBIOSによって
異なる為いろいろと試してみてください。
インストーラのブートと各種確認
先ほど焼きこんだUSBメモリを挿し、USBからブートします。起動したら以下のコマンドでEFIモードでのぶーとを確認します。
ls /sys/firmware/ | grep efi
何も表示されなかった場合、EFIモードではなくBIOSモードでブートしています。
設定を見直し、EFIモードでブートしてください。
EFIモードでのブートが確認できたら、次の手順へ進みます。
ソフトウェアRAIDの構築(mdadm)
mdadmを用いて、ソフトウェアRAID(RAID1)を構築します。今回、RAIDに用いるHDDはそれぞれ
sda
とsdb
として認識されている物とします。
とりあえず、sda
にパーティション構造を作成していきます。
UEFIブートを用いるので、まずはEFIパーティションを作成します。
Archでは様々なパーティション作成方法が用意されているので、公式Wikiなどを見ながら
512MBのEFIパーティションを作成してください。HEXフラグはEF02
です。
なお、今回私は全てのマウントポイントを/
に設定する為、以下の様な構造となりました。
メモリ容量的にもSWAPは必要ない気がするので、SWAPパーティションはなしです。
デバイスノード | 容量 | マウントポイント |
---|---|---|
sda1 | 512MB | /boot |
sda2 | (MAX-100MB) | / |
次に、このパーティション構成をsdb
にコピーします。
容量や仕様の違うHDDを組み合わせて使う場合はこの方法は使えないので
その場合は手動でパーティショニングを行ってください。
sgdisk --backup=table /dev/sda
sgdisk --load-backup=table /dev/sdb
次にmdadm
を用いてRAID1を構成します。台数などにもよるので各自対応してください。
ここら辺は普段mdadmを使っていれば特に問題ないかと思います。
mdadm --create /dev/md0 --metadata 1.0 --raid-devices=2 --level=1 /dev/sd[ab]1
mdadm --create /dev/md1 --raid-devices=2 --level=1 /dev/sd[ab]2
構成が完了すれば、/dev/md0
および/dev/md1
が確認できます。
Arch Linuxのインストール
まずはパーティションのフォーマットを行います。
- EFIパーティション
mkfs.fat -F32 /dev/md0
- メインパーティション(今回はXFSを使います)
mkfs.xfs /dev/md1
フォーマットが完了したら、マウントを行います。
md0
を/boot
にマウントするために、md1
を/mnt
にマウントした後に
mkdir
にてboot
ディレクトリを作成しています。
mount /dev/md1 /mnt
mkdir /mnt/boot
mount /dev/md0 /mnt/boot
あとは通常通りpacstrap
にてArch Linuxを/mnt
にインストールしていきます。
pacstrap -i /mnt base base-devel
インストールが完了したら、mdadm
によるRAIDの情報をインストール先に書き込みます。
mdadm --detail --scan >> /mnt/etc/mdadm.conf
genfstab -U -p /mnt >> /mnt/etc/fstab
設定とUEFIブートローダの構築
通常通りarch-chroot
を使って/mnt
へインストールされたシステムに入ります。
arch-chroot /mnt /bin/bash
この後、ビギナーズガイド - ArchWikiに従ってロケール、タイムゾーン、HWClockなどの設定を行ってください。ここまでは通常のインストールと共通です。
設定が完了したら、UEFIブートローダの構築を行います。
今回はsystemd-boot(旧gummiboot)を用います。
mkdir -P /boot/EFI/systemd
mkdir -p /boot/EFI/Boot
cd /usr/lib/systemd/boot/efi
cp systemd-bootx64.efi /boot/EFI/systemd/
cp systemd-bootx64.efi /boot/EFI/Boot/bootx64.efi
efibootmgr -c -d /dev/sda -p 1 -L Arch\ Linux\ 1 -l \\EFI\\systemd\\systemd-bootx64.efi
efibootmgr -c -d /dev/sdb -p 1 -L Arch\ Linux\ 2 -l \\EFI\\systemd\\systemd-bootx64.efi
終わったら、efibootmgr
コマンドでブートプライオリティを確認し、必要があれば修正します。
efibootmgr
efibootmgr -o %HEX値%,%HEX値%,...
次に、systemd-boot
のブートエントリを作成します。
mkdir -p /boot/loader/entries
nano /boot/loader/entries/arch1.conf
中身はこんな感じで
title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=/dev/md1 rw
最後にmdadm_udev
をHOOKSに追加してmkinitcpio
を再構成します。
nano /etc/mkinitcpio.conf
~省略~
HOOKS="base udev autodetect modconf block mdadm_udev filesystems keyboard fsck"
~省略~
mkinitcpio -p linux
後は再起動すれば、普通にブートしてくれるかと思います。お疲れ様でした。
参考
[SOLVED] gummiboot + mdadm RAID 1? / Installation / Arch Linux Forums