Raspberry Pi 上に、Unix系OSをインストールして、低消費電力サーバーとして運用しようと考える時、システム管理者として心配なのが、SDメモリ、またはUSBメモリの摩耗によるダウン。
具体的には、ログファイルなどを常時書き込み内容が書き換わる /var や、仮想メモリであるスワップスペース。そして、私が愛用するFreeBSDの場合、/usr/ports や /usr/local といったディレクトリー上のファイルは頻繁に内容が書き換わります。
こういった空間を一枚のSDメモリ上に全部持たせると、一部のファイルシステムが短期間でエラーを起こし、頻繁にOS再インストールが必要になるのでは?と使う前から心配になります。
現在入手できる安価なフラッシュメモリは、ほぼ TLCフラッシュメモリが使われていますが、昔の2GB SDメモリや4GB CFカードなんかはMLCタイプのものがあります。例えば、Raspberry Pi4 4GBメモリモデルだと、2GBもスワップを取れば十分でしょう。/var なんかも 4GB CF カード上にファイルシステムを作ればいいのでは?
そう考えて、4スロットタイプ(CF/Memory Stick/SDカード/xDカード) カードリーダーに手持ちのMLCと思われる、CF、SD、MS を入れて、これを RPI4にマウントしようと接続。
SDメモリからブートして、OS起動後にカードリーダー内のフラッシュメモリをファイルシステムとしてマウントできるように fstab を編集して RPI4 の電源を入れると、、、、、、なぜか SDスロットのSDメモリよりも先にカードリーダーのスロットが先に認識されてしまい、(カードリーダーにはOSがないので)起動に失敗。
4スロットカードリーダーを外せば起動するんですが。。。。
RPI4だけの問題かと思って、RPI2 で同じ接続をしてみたものの、RPI2でも同様の現象で起動しない!
Raspberry Pi 全体の仕様に関係するようです。OSがFreeBSD(13.1)のため?
PCベースのプラットフォームと異なり、Raspberry Pi はブートデバイス選択や、起動中のリセットが出来ないので途中でハングアップされると電源を落とすしかなくなるのが気分の悪いところです。電源をブチっと切るのはフラッシュメモリにとって最悪ですからねぇ。
さて、このあと、どうしたものか。
ここまでのテストは、FreeBSD 13.1 を使用しました。
では、オリジナルのDebian Linux だとどうでしょう?
SDをDebian に替えて試したところ、、、、、、カードリーダを接続していてもOSが起動しました。
FreeBSDの問題であると判明。
続いて、手持ちの別のSDカード専用リーダー(Buffalo BSCR27U3)をつないでみると、あらら、今度はFreeBSD13.1 が立ち上がっちゃったよ。ひょっとして、カードリーダとの相性問題?
問題のカードリーダーは、Buffalo MCR-C12/U2。これのファームウェアか何かの問題?もう一台の古い4スロットカードリーダー、グリーンハウス GH-CRSQ10-U2 をつないでみると、これまたFreeBSD 13.1 が起動しない。古い4スロットカードリーダーのファームウェアが現在のOSを考慮していないと考えるか、FreeBSDが古いカードリーダーを考慮していないと考えるべきなのか。状況を考えると、後者のように思えますが、現状では、4スロットカードリーダーを kernelが読み込まれた直後に手動でUSBポートに差し込むかしかなさそう。これだと、再起動に対応できないのですけどね。どうしても使いたい場合は仕方ない。