ご注意
この記事は,2016年9月4日に書いたもので,内容は陳腐化しています.
Slackware ARM 14.xに限った話です.
また,Raspberry Pi 3 Model B, 同 Model B+で可能なSDカードなしのブートについては,一切触れていません.
序
Raspberry Pi 3(RPi3)が,各種サーバーに使えないか,という試みですが,結論的には,「使えないことはないけどUSB2接続のSSD(HDD)がボトルネックになり,それをがまんできるかどうか」と言えます .
SlackwareARMをSDカードにインストール
前提条件である,SlackwareARM 14.2をRPi3のSDカードにインストールして動かす方法は,ちゃんと手引きしてくれるサイトがあるので,順を追って実行すれば,問題なくできます.
USBドライブで動かすまでの手順
次の段階として,USBドライブをルートドライブにしたいという,本題に入ります.手順はいくつかありますが,おおざっぱに言うと,
- ルートドライブにしたいUSBドライブを用意して,パーティションを切る
- SDカードのext4パーティションをUSBドライブにコピーする
- コピーしたUSBドライブの/etc/fstabを修正する
- SDカードの/boot/cmdline.txtを修正する
でおしまいです.おまけとして,32GBのSDカードを起動だけのために使うのがもったいなければ,/boot部分(vfat)だけを小さいSDカードにコピーして,起動用に使っても良いと思います.
SSDのパーティション
私の場合は,とりあえず,手持ちの1TB SSDをUSB3のケースに入れたものを用意しました.パーティションを切ってこんなふうになっています.
fdisk -l /dev/sda
Disk /dev/sda: 953.9 GiB, 1024209543168 bytes, 2000409264 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x324275f7
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 4018175 4016128 1.9G 83 Linux
/dev/sda2 4018176 8034303 4016128 1.9G 82 Linux swap
/dev/sda3 8034304 2000409263 1992374960 950G 83 Linux
いろいろ,流儀はあるでしょうが,システムが壊れかかっているような時に/boot用のsda1とswap用のsda2を合わせると,そこにちょっとしたディストリビューションをインストールできますので,それで,システムの回復を図るために,2GBくらいずつ切ってきました.今となっては,そんな方法を取らなくてもUSBメモリーから起動するなどして,レスキューはできるので,bootとswapが使い回せるくらいの意味しかありません .
今回は,sda2をswapにして,sda3をrootドライブ(ext4)にします.mkswap, mkfsで準備します.
SDカードからSSDへのコピー
コピーの仕方も山ほどあります.大別するとRPi3でコピーする方法と,他のLinuxマシンでコピーする方法に分けられます.前者だと,/tmpや/devについて,もう一手間必要となるので,今回は,他のLinuxマシンを使用しました.
sdカードと,USBドライブの両方をマウントして,cpなり,cpio等でコピーします.筆者はこういう場合もrsyncでコピーします.
rsync -artlvd /path/to/sd/ /path/to/usb_drive/
rsyncを使い慣れた方には言うまでもありませんが,それぞれのpathの最後の”/”は必要です(後のほうのは必要ないかも^^; ).
設定変更
fstab
コピーした先の/etc/fstabの最初の3行を,
/dev/sda2 swap swap defaults 0 0
/dev/sda3 / ext4 defaults 1 1
/dev/mmcblk0p1 /boot vfat fmask=177,dmask=077 1 0
としました(それぞれの行が複数行として表示される場合がありますが,それぞれ一行ずつです).
cmdline.txt
次は,ブートのおまじないの変更です.sdカードのブートパーティション(vfat)にあるcmdline.txtを,次のようにします(ここも,複数行として表示される場合がありますが,改行なしの1行です).
dwc_otg.lpm_enable=0 console=tty1 nofont root=/dev/sda3 rootfstype=ext4 rootwait ro
変更したところは,root=/dev/sda3のところのみです.これで,sdカードとUSBドライブをRPi3に接続して起動すれば,USBドライブがルートになって起動します.
起動したあと
このあと,mariaDB(MySQLの互換サーバー),Apache, PHP, WordPressについて,それぞれデータを稼働中のSlackware64 (x86_64)のマシンから,まるまるコピーしただけで,どれも問題なく(あっけないくらい^^; )起動しました(ただし,コピーの際には,それぞれのデーモンを止めた方が無難と思います).また, Netatalk 3.1.9については,ソースからbuildしてインストールしてこちらも問題なく動きました.
印象
唯一の問題は,クライアントからのリクエストに対するレスポンスの悪さ(データの送信の遅さ)です.SDカードをルートにするよりは断然速いものの,USB2.0のスピードがボトルネックになります.もし,RPi3のUSBが3.0だったとしたら,十分使用に耐えるサーバーに仕上がったと思います.それだけに,とても残念です.
加筆・修正多数
2022年6月23日(木)に追記.
2017/08/29修正
外部電源式がいいです.もし,外部電源が使えないケースの場合は,外部電源式のUSB-HUBを介して接続します.
2018/4/24注: その後,gdiskを使って,gptにしてパーディションを切り直しました.
2023/03/13注: その後,SWAPは実機も仮想マシンもZRAMにしているのでこの “流儀” はもはや廃れ,/bootとルートの2パーティションにしています(RPi以外ではext4の1パーティションのみ).
sda1は,スペアーというか無駄です^^;
もう一台SSDをルートにするために,RPi3でコピーを試みましたが,エラーが出てしまいコピーができませんでした.他のしっかり稼働しているLinuxマシンでコピーすることをお勧めします.
別のLinuxマシンにマウントしたままであれば,/path/to/usb_drive/etc/fstab.
その後発覚しましたが,OpenLDAPについては,バイナリーコピーではNGでした.元のサーバー上でldifを使ってテキストでexportして,Slackware ARMで,ldapaddを使って読み込ませる必要があります.
SATAインターフェースがあればなおさら良い.