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インターフェースがあればなおさら良い.

Kernel 4.5.0でSSDの遅さ改善か

Kernelの4.2〜4.5あたりで,SSDのサポートについてずいぶん改良が行われているそうです.

一部のSSDはTRIM機能をONにすることで,修復不能なデータ破壊をする危険性があるそうです.そこら辺の取り組みがなされたようです.

Kernel 4.1.xから4.2にしたところ,SSDのアクセスが目だって遅くなったので,ちょうど4.1.xがlong termになったこともあって4.1.xにしばらくとどまっていました.

しかし,SSDサポートが改良される前の4.1.xにとどまるのは不安もあります.そこで,4.4.xにしていました.4.2のときの遅さはそのままでした.

4.5にしてみたところ,改善はしたようです.4.1.xの頃のSSD的な速さはまだ感じられていません.

4.5にすぐしなかったのは,nVidiaのドライバー,NVIDIA-Linux-x86-364.12にすると,Xが起動しなかったためです.NVIDIA-Linux-x86-361.xxシリーズは4.5に対応してないだろうと勝手に思い込んでいました.

しかし,4.4.6の下でのSSDの遅さは異常です.そこで,ダメ元と思って,NVIDIA-Linux-x86-361.xxの最新版,NVIDIA-Linux-x86-361.42を試したところ,Kernel 4.5.0でOKでした.

Windows 10にはしませんです

そういえば,この土日にはかなりの時間をかけて,Windows 8.1の無線用PCをWindows 10にupgradeする取り組みをしていたのでした.

最初のつまづきは,VMWare Toolsでした.そうそう,Windows 8.1の無線用PCは,実体のないVMWare Fusionで動く仮想マシンなのです.

VMWare Fusionで動く仮想のWindows 8.1を10にするには,Known Problemとしてupgradeのボタンを押しても,このPCはアップグレードできません,と出るのです.それについては,upgrade用のDVDイメージをダウンロードしてそのDVDを実行することで,問題なくupgrade手続きに入ることができます.

ところがどっこい,この手順でupgradeすると,解像度がSVGAに固定され,使い物になりません.

これもネット検索すれば解るのですが,VMWare Toolsを1回uninstallしてインストールし直すと解消するとのことです.

またしても,ところがどっこい,VMWare Toolsはuninstallできません.ネットで調べると,VMWareでも症状は把握しているけど原因不明・簡単な解決策なしで,レジストリーをどうのこうのせよとあります.

レジストリーをいじるくらいならと,保存してあったWindows 8.1のイメージをコピーし直してやりなおしです.52GBのイメージをコピーするのに40分くらいかかります^^;

で,今度は,Windows 8.1の状態でVMWare Toolsをuninstallしてから,Windows 10へのupgradeを開始します.Windows 10になってからVMWare Toolsをインストールすることで,解像度の問題は解決しました.

他にもトラブルがあり,結局6回くらいコピーをしました.SSDに300GB書き込んだわけで,書き込み寿命が1PBとすると,0.03%くらい寿命を縮めたということになりますが,まあたいしたことはないですね.

他のトラブルは,VMWare Fusionの設定で,仮想マシンをWindows 8.1から10に設定し直すタイミングを間違えて,起動不能になったのが1回です.

残りは,libusbに関わることです.これがWindows 10にしないと結論づけた問題でもあるのですが,QS1RをCW Skimmer, Skimmer Serverで使用するために不可欠な,libusb0とlibusbKがWindows 10では使えないのです(あくまで個人の感想です)

Windows 10にupgradeしてからインストールし直したり,Windows 8.1の時にuninstallし,10にしてからインストールして見たりと,40分かけてディスクイメージをコピーバックしては,いろいろ試してみたわけです.

残念!

ネット検索してもこのあたりの情報はほとんど見つからないです.

なお,実体のあるWindows 7機もあるのですが,こちらにもときどきQS1Rをつなぐので,Windows 10へのupgradeは見送ることにしました.

これはSSDとしては異常な遅さなんですが,こうした巨大ファイルの連続コピー以外は問題ないので,いじらないことにします.
その後,Windows 7 32bit機(仮想マシンでなく実体のあるマシン)をWindows 10にしたところ,CW Skimmer, Skimmer Serverとも,QS1Rに接続して使用できました.

新しいMac mini

IMG_1976

これで,6台目のMac miniとなります^^; あぁ^^;;

4代目のSSDをいきなり入れました.CPUのダウングレード(Core i7 2.7GHz 4core → Core i5 2.6GHz 2core)と言うことになり,体感速度も落ちました^^;

代目(台目)購入時期仕様(概要)メモ
12006年2月最後のPowerPC機後半生は家族用
22006年11月1.83GHz Core Duo 1GB
32011年7月Core i7 2core後にSSD 500GBとした.後半生は家族用.なお,2代目からの5年間は,MacOSX86でしのぐ
42012年11月Core i7 4core 2.7GHz (Ivy Bridge)後にSSD 960GBとして,快速に.2015年になり,突然のフリーズ,画面の乱れなどが頻発する.
52015年6月Core i5 2core 1.5GHz 4GB家族用に使用していた3代目が致命的な故障となったので,最初から家族用として購入.遅くてしょうがないので,3代目のSSDを入れたら快速に.
62015年12月Core i5 2 core 2.6GHz 16GB4代目の後継.最初から4代目のSSDを入れるが,CPUのスペックダウンを感じる.

使い物になった新 Mac mini

Mac mini Late 2014 MGEM2LL/AをSSDに換装してみた。」というページと,そこからリンクのある,「Mac Mini Late 2014 Hard Drive Replacement」を参考に,工具を買って,中を開けて,前のMac miniで使っていたSSDと入れ替えました.

Mac mini Late 2014 MGEM2LL/AをSSDに換装してみた。」に書いてあるように十分実用的な速度になりました.体感速度的には,何十倍と言っても大げさではありません.

ありがたい情報を提供してくださっている両サイトに感謝.

IMG_1213  IMG_1226IMG_1227

ここから先は,先を急ぐあまり,写真を撮り忘れました^^;