Raspberry Pi 3のルートドライブをSSD(USB)に

ご注意

この記事は,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ドライブをルートドライブにしたいという,本題に入ります.手順はいくつかありますが,おおざっぱに言うと,

  1. ルートドライブにしたいUSBドライブを用意して,パーティションを切る
  2. SDカードのext4パーティションをUSBドライブにコピーする
  3. コピーしたUSBドライブの/etc/fstabを修正する
  4. 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修正
2018/4/24の見解としては,Raspberry Pi 3 Model B+にすれば,十分とまではいかないまでも,かなりサーバーとして使えると思います.
外部電源式がいいです.もし,外部電源が使えないケースの場合は,外部電源式の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インターフェースがあればなおさら良い.

システム切り替え完了(Slackware 14.2へその8)

オオカミ少年と呼ばれる前に,断行しました^^;

Slackware64 Version 14.2で稼働しています.

WordPressは,事前の確認も済んでいたので,ちゃんと動きました.

今回,悩んだのはbindでした.他にも,imapdで若干の手直しが必要でした.

まだ,Netatalk, Sambaの設定はしていません.これらは,追々進めようと思います.その後,DX spider, KVM/QEMUと,道は長いです^^;;

7月24日(日)の切り替えは延期(Slackware 14.2へその7)

残念ながら,まだ旧システムです^^;

システムの切り替え後のトラブルシュートや,時間をおかずに設定・確認しなければならないサービス類の対応をする「気力」が出なかったので,切り替えをしませんでした.

一つ思いついた,imapdのIPv6対応化だけしておきました.

トラブルは事前に分からないからこそトラブルな訳ですが,起動後すぐに設定しなければいけないと想定しているのはメールの出入り(sendmailとimapd周り)です.

あとは,ほどなく確認しなければいけないのは,cron関係,非公開のWiki類の整備,Netatalk, Sambaの確認くらいかな.NFSはもう使ってないし.

以下,もう完全に自分のメモですが,事前に設定すべきものとして,IPv4, IPv6のIPフィルタがありました.あとは,どうでも良いもの,として,smartd, logwatch, なんかありますね.

他は,Zope, Retrospectのクライアントかな.Zopeに関しては,もう動かないかも知れません.

そして,落ち着いたところで,KVM/QEMU.

こうやって数え上げていくと,なかなか重荷で,それを跳ね返す気力はいつ出るかな^^;

ノウハウなどのクラウド的なメモとして使ってます.

7月24日(日)切り替えします(Slackware 14.2へその6)

一発で成功! といく自信はありませんが,明日7/24(日)に,準備中のSlackware 64bit 14.2に一度切り替えしてみます.

いちおう,このBLOGについては,移行できそうです.

メール関係とかは,まだ何とも解りません^^;

あんまりひどかったらもとに戻して作戦練り直します.

mariaDBはバイナリーコピーでOK (Slackware 14.2へその5)

現在のx86 32bitサーバー(GW3)のmariaDBを止めて,rsyncで立ち上げ中のx86 64bitマシン(GW4)へコピーしたら,あっさり動きました.

動くのが確認できれば,動いて当たり前な気もしますが,architectureも違いますし,バージョンによるインコンパチもありますので,一安心というところです.

これまで確認したところでは,SASLはだめでした.

OpenLDAPのデータもrsyncでコピーしましたが,動作は確認していません.

次は,Webサーバー関係の移転・立ち上げです.難関はWordPressですね.

その後メール関係を整備できれば,ひとまず完成でしょう.

どのようにガチャッと切り替えるか,という最大の課題が残ってますが^^;

追記(2016/09/05)

Slackware64 14.2で稼働中のmariaDBのデータ(/var//lib/mysql以下)をrsyncによってSlackwareARM 14.2にコピーしても,パスワード認証を含めて,問題なくそのまま使えました.