※ただし /boot はmicroSDの中
- 前回
前回の内容をベースに、4TBのHDDをGPT形式に変更、4TBをフルに使おう、パーティションを分けてマウントとか面倒くさいし全部1つのパーティションにしちゃえ。という頭の悪い感じの構築。
実際のところ、Raspberry Piのサーバー用途の場合、データ領域とプログラム領域は分けた方がいいのかしら。そもそも物理ディスクを分けるべき、という気もします。
基本的に細部は前回の通りなので、違う部分だけ書いています。丁寧にやる場合は前回の記事も参照してください。
Rapberry Pi OSを2TB以上のRAIDから起動
準備
microSDカードを本体から取り出し、Raspberry Pi Imagerを使ってOSイメージを焼き直します。
ユーザーpi のパスワード設定を忘れずに。
初期設定
sudo passwd root
sudo apt-get update && apt-get upgrade
sudo apt-get dist-upgrade
この辺りは、前回と同様に実行。raspi-config は、Imager でやっている場合、どう考えても冗長な気がするので今回は割愛。
前回作成したRAIDの削除
最初から行う場合は、多分不要。最初この手順を踏まずにフォーマット、RAIDの構築をしようとしたら、/dev/sda1がbusy だとエラーが出てしまいました。
sudo apt-get mdadm
sudo fdisk -l
sudo mdadm --misc --stop /dev/md0
fdisk で残っているRAID情報を確認して、mdadm –stopでとめます。
gdisk でHDD形式の変更とパーティションの作成
今回は、GNU fdisk, gdiskコマンドを使ってHDDをGPT形式に変更、パーティションをフルサイズに変更します。
sudo gdisk /dev/sda
ほぼ fdisk と同じようなプロンプトなので(何故かヘルプの文字が変わったりしてますが)、あまり迷わずに使えると思います。
まずは、
d #既存のパーティションを削除
o #MBRをGPT形式に変更する(警告メッセージが出るので、y)
w #適用して終了する
新規のパーティション作成も一緒にしても大丈夫なのかもしれませんが、一回形式変更でエラーなどが出ないことを確認したかったので、別々に行いました。
続いて、もう1度gdiskを起動して、
n #新規パーティションを作成
w #適用
としてパーティションを作成します。nのパーティションの作成では、fdiskのときより色々聞かれますが、今回はパーティションサイズも特別変えないので全てデフォルトのまま。
もし複数パーティションを作成したい場合には最大サイズのみをいじるといいと思います。
これを、/dev/sda, /dev/sdb 両方に行います。
RAID の作成
sudo mdadm --create --verbose /dev/md0 --level=1 --raid-device=2 /dev/sda1 /dev/sdb1
このときに、/dev/sda1がbusy であるというようなエラーメッセージが出て、Continue creating array? と質問されない場合は、恐らく前回実施した RAIDが認識されているので、fdiskでRAIDのボリューム名を確認、mdadm –misc –stop で停止させてから再作成を行います。
raidを停止させても、上記のようにmdadm に警告されますが、この警告のなくし方が分からないので無視しました……。多分問題ないと思います。
RAIDボリュームの登録
sudo mdadm --detail --scan
sudo nano /etc/mdadm/mdadm.conf
mdadm.conf に mdadm –detail –scan の内容を追記します。このとき、前回設定されたRAID の情報が自動的に記述されている場合があります。
上図では上の行が自動で書かれていた内容なので、 # でコメントアウトしました(なんで /dev/md/0と/が入っているのかが分からないですが……)。
RAIDのフォーマットから、/のコピーまで
ここまで来ると、ほぼ前回と一緒です。
sudo mkfs.ext4 /dev/md0
sudo dd if=/dev/mmcblk0p2 of=/dev/md0 bs=32M conv=noerror,sync status=progress
sudo e2fsck -f -y /dev/md0
sudo resize2fs -p /dev/md0
コピーについては、ブロック単位でコピーしなくてもrsyncなどでも動くみたいです。その場合、続くチェックやリサイズも不要になって楽で早いのですが、1度成功しているパターンを守りました。
ここまでで、きちんとRAIDが構築されているか確認するために、Raspberry Pi OSをリブートします。
sudo shutdown -h now
sudo fdisk -l
shutdown しているのは、利用しているHDDの電源が連動して切れるので動作の目安になるからで、rebootコマンドでもいいと思います
rebootしたら、fdiskコマンドで、RAIDが動作しているか確認します。問題なければ、以降の手順に進みます。
initramfs イメージの作成
ここも前回と同様です。
sudo nano /etc/initramfs-tools/modules
追記
raid1
md_mod
ext4
このinitramfsにMBR形式ではなくGPT形式だよ、という記載がいるのかなーなんてうっすら想像していましたが、必要ないみたいです。BIOSが対応していればOSからは問題なく見えるのかな?
記述したら、
sudo update-initramfs -c -k `uname -r`
で、イメージを作成。作成されたイメージ名を控えます。
ls /boot/*.img
sudo nano /boot/config.txt
として、config.txtの末尾に調べた内容を記述します。
kernel=kernel8.img
initramfs initrd.img-5.15.61-v8+ followkernel
kernelのイメージ名はOSのバージョンが大きく変わらなければ一定だと思いますが、initrd.imgの名前は変わると思うので、毎回きちんと確認しましょう。
起動用の設定
以降は、前回と全く同じ手順になります。
sudo nano /boot/cmdline.txt
cmdlineを編集して、 / にRAIDボリュームをマウントします。
console=serial0,115200 console=tty1 root=/dev/md0 rootfstype=ext4 elevator=deadline fsck.repair=yes rootdelay=15 rootwait
PARTUUID=…を消すのを忘れないようにしましょう。
続いて、RAIDを一時的にマウントして、RAID内にあるfstabを更新してmicroSDカードが/boot, RAIDが/にマウントされるようにします。
sudo mkdir /mnt/md0
sudo mount /dev/md0 /mnt/md0
sudo nano /mnt/md0/etc/fstab
proc以外の行をコメントアウトして、
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/md0 / ext4 defaults,noatime 0 1
と記述を加えます。
後は、
sudo shutdown -h now
としてシャットダウン、再起動したら mount -v できちんとマウントされているか確認します。
sudo mount -v
/dev/md0 on / となっているので、多分ちゃんと動作しています。お疲れ様でした。
終わりに
HDDからのブートになったせいか、起動が遅く、SSHがなかなか応答せずにやきもきしましたが、なんとか今回はOS imageの焼き直しからやり直し……とはならずに動作させることが出来ました。2022年9月現在であれば、多分、再現性は高いと思います。
後怖いのが、Linuxの場合、/boot とか、 /swap とか、「普通別のパーティションだよね?」みたいなお約束があるので、予期しないでmicroSDカードへのアクセスが残っていないか? というのがちょっとよく分からない点です(mountの結果を見る限り、多分大丈夫なのですが)。
ともあれ、これでようやくファイルサーバーなど、使うための設定に移ることができます。
大分、先は長いですね……。
楽介でした。