私の自宅では3台ほどRaspberry Piが稼働しています。3B+が1台、4Bが2台です。今までは用途的に問題なかったのですが、最近になって3B+の処理速度の低さが気になるようになってきました。
というわけでスペックアップをしようということでそんなにパワーの必要でない4Bと入れ替えをしようとなったわけです。
そして、遅さの一端がmicroSDを用いていることにあるのではないかということで、ストレージの拡張も兼ねてmicroSDの環境からSSD環境への移行をすることにしました。
しかし、3B+から4Bへの移行となるとデバイスも違うし、そもそもできるかわからないmicroSDからSSDへの環境移行というやらなければいけないことがいくつか出てきました。
1から環境を作り直せばいいのでは思うかもしれませんが、シンプルに面倒なのと、移行時の互換性の観点から中身を丸々移動させたいわけです。実は移行させたいのは今皆さんがアクセスしているこのWEBサイトを動かしているWEBサーバーのことだったりします。
なので、順番に物事を進めていこうということで、今回は話を2回に分けることにします。ということでmicroSDカードからSSDへの環境の移行を行ってみることにしました。
調べて簡単そうならよかったのですが、GUI環境ではSD Card Copierなるものがあるらしく、それを使えば簡単にできるそうなのですが、私の環境はCLI環境。その手段は使えないということで別の方法を今回掲載します。
もちろん3B+から4Bへ移行ができないのであれば本末転倒なのですが、今回は検証も兼ねて、3B+を使ってmicroSDカードからSSDへの移行をやってみることにしました。
また、私は「Raspberry Pi OS(Raspbian)」の環境ですが、原理的にどのOSでもUSBブートとmicroSDカードからのブートの両方に対応していればできる方法のはずです。
では始めます。
目次
移行のイメージ
移行とは言ってもWEBサーバーとなると、簡単に中身を持っていって終わりというわけにはいきません。
わかりやすい例だと、WEB用の画像データをコピーしてもどこにそれがあるのかや、どのページで表示するかがわからなければいけません。
簡単に言えば環境丸々移すのが私の思い描く移行ですね。
WEBサーバーとしての設定や階層に至るまで全てが一緒であってほしいわけです。これを1から組みなおせば間違えるかもしれませんし、何より面倒です。
動作する中身をそのまま持っていきたいのです。
CLIではどうすれば…
GUI(Raspbian Desktop)ではSD Card Copierなるものがあるそうで、簡単に設定してSSDにその内容を使えるようにコピーしてくれるツールが内臓されています。
ですが、WEBサーバーにGUIは不要なので、私の環境はCLIです。というかほとんどのサーバーはそうだと思います。結構ラズパイでもCLIで運用しているという人が多いとは思います。
CLIにはそう簡単に使えるようなツールは無いようで、個人の作成したツールを使うというのがインターネットでは多く紹介されています。
しかし。私の用途はWEBサーバの移行です。セキュリティや安定性を非常に重視する運用です。サーバーというのはそういうものですね。
なので、CLI環境で使っているユーザーに限ってできれば不要なツールは入れたくないということが多く、私もその一人なので別の方法がないか模索することにします。
microSDカードの内容を丸々コピーしたい
私がしたいのはmicroSDカードの内容を丸々コピーしたいイメージではあるのです。
言葉にすると難しいのですが、DVDの中身をisoファイルで保存してそれを焼けば同じ内容のDVDが完成という流れのようにしたいのです。
これに近しいことができるのがLinuxマシンには大抵搭載されている「dd」コマンド。これは領域などを指定して、それをイメージファイルとして丸々保存することができるコマンドです。一部の領域とあるようにパーティションであったり、ディレクトリ丸々だったり色々なことができます。
色々なことができる故に、結構面倒かつ危険で、コマンドを間違えれば一部パーティションが消し飛んだり、違う場所に書き込んだりt使い方を間違えると危険なコマンドなので、できればddコマンドを使うという案は避けたいところです。
何とかisoのようなmicroSDカード全体のイメージファイルを作成できないかを考えたいところですが、その前に一つの疑問が浮かびます。
丸々コピーして本当に動きそうなのか
本当にmicroSDカードをSSDに丸々コピーで動くのだろうかという疑問が浮かびます。ここで言うコピーはイメージファイルを焼くみたいな上述の話です。
これは気にすることがないだろうと計画している段階から気づいていました。
というのも、基本的にRaspberry Pi OS(Raspbian)のインストールには同一のイメージファイルを使っており、それをツールでmicroSDかSSDに書き込んでいるのですから、起動方法に違いがあることの方が稀だからですね。いちいち起動時にチェックしてSSDならファイルを作り直すみたいなことはしないはずですからね。
つまり、microSDカードにインストールした内容と、SSDにインストールした内容で差はないはず、microSDカードのイメージファイルをSSDに焼けば動くはずということを思っていました。
なので、おろらく問題なく動くはずだろうと踏んで検証をすることにしました。
簡単な力技で解決できそう
さて、なんとかしてmicroSDカードのイメージファイルを作りたいということを考えるわけです。
ここで先ほど出た「dd」コマンドの話みたいになるのですが、仮にRaspberry Pi上で何か操作をしてイメージファイルを作るとして、その際の動作に問題が本当にないかや、そのイメージファイルはどこに保存するのかという問題が起きます。
なんせmicroSDカード丸々のコピーですから、32GBなり64GBなりのファイルサイズになるはずで、それを保存する場所はどうなるか、もし保存するにしてもネットワーク経由だと3B+では遅いと問題があります。
もし保存先があったにしても、全領域を読み出すわけですから、もしかしたら途中でシステムが落ちてしまったりなど予期しない不具合が起きる可能性も否定できません。可能性は低くてもその可能性はつぶしておきたいものです。
ということで私はmicroSDカードを取り出してWindowsなどの安定した環境でmicroSDカードのイメージファイルを作成すれば良いのではという発想になりました。そんなことWIndowsでできるのかというと、できます。
Windows用の少し古いソフトで「DD for Windows」というソフトがあります。Linuxの「dd」コマンドをWindowsで使えるようにみたいなコンセプトのソフトですね。シリコンリナックスという会社が作成してくれたソフトです。公式サイトはこちらです。
https://www.si-linux.co.jp/techinfo/index.php?DD%20for%20Windows
これを使うとストレージのイメージファイルを作成及び書き込みすることが可能です。
見ての通り使い方も読み込み・書き込み・照合だけなので非常に使いやすい感じです。
ただのmicroSDカードのイメージファイルを作ってSSDに焼くだけというまさに強引な手法で解決が図れるわけです。
あとは、この「DD for Windows」を使って実際に問題なく動作するか確認します。
私の環境
初めにRaspberry Pi関係の環境を示します。Raspberry Pi3 model B+ですが、4Bでも問題なく同様の手順で移行ができます。原理的に同じですからね。
項目 | 名称 |
本体 | Raspberry Pi3 model B+ |
microSDカード | SanDisk HIGH ENDURANCE 32GB |
SSD | ADATA SU650 120GB |
ケーブル | AINEX CVT-08 |
補足 | USBブート対応ファームウェア |
こんな感じです。SSDはADATAの120GBのものを選びましたが、安くても問題なく今のところは動作しています。Aamzonレビューを見たらすぐ壊れたとか書いてあるので不安にはなりますが、Raspberry Piに使うものなら値段は少しでも安い方がと思って選びました。ちなみに上の方で出てきたKIOXIA EXCELIA SSDは別のラズパイで使っています。
USBとSATAの変換ケーブルは怪しい中華製なら安いのですが、ケーブル類は品質の観点からここは名の知れたメーカーで安いやつということでAINEXのCVT-08を選びました。
次はWindows側の環境を書いておきます。別に細かいスペックは不要だと思うので一応何かあったときのために影響ありそうな範囲だけ書いておきます。
項目 | 名前 |
CPU | Ryzen 9 3900X |
メモリ | DDR4 64GB |
OS | Windows 10 Pro build: 19043.1288 |
ストレージ | システム:SSD データ用:HDD 2TB (ここにイメージファイル保存) |
カードリーダー | BUFFALO BSCR27U3RD |
Ryzen環境にWindows 10環境です。メモリは64GBなので枯渇するということはないので基本的に問題なく作業はできるPCです。
カードリーダーはUSB3.0対応の中で安価な物を使っています。これを買うまでダイソーなどで売っているUSB2.0接続の遅いカードリーダーを使っていました。これに変えてからは安定して早いので持っていないのなら安いので買っておきましょう。特に今回は容量が大きいので速度の差はだいぶ時間に差が出ます。
私は上述のような環境で検証しました。
実際にデータが移行できるか試す
まずは移行したいRaspberry Piの電源を切りmicroSDカードを取り出します。
次にDD for Windowsを管理者権限で立ち上げます。右クリックして「管理者として実行」で大丈夫です。
次に起動したら以下のような画面になると思うので操作を行います。
まずディスク選択でイメージファイル作成したいmicroSDカードを選択します。表示されない場合は中央左にある「危険を承知で保護を外す」をチェックした後に「ディスク選択」をすれば表示されるはずです。
次に、ファイル選択で好きな場所、ファイル名を指定します。標準ではDDWin用のフォーマットなので、私は個人的にですが、タブで「全てのファイル」にして「~~.img」という形式で保存しています。
さて、ディスク選択を行い、ファイル選択も行ったら上にある読み込みボタンを押して完了するまで待ちます。容量が大きいと時間がかかるので気長に待ちましょう。
読み込みが終わったら、一度ソフトを落として、書き込みたいSSDを接続します。そして、「ディスクの選択」でSSDを選びます。なければ同様に「危険を承知で保護を外す」にチェックを入れましょう。
さて、ディスクを選択したら、次に書き込むファイルを選択します。これは先ほど読み込みで指定したものと同じファイルを選びます。
ディスクの選択と書き込むファイルを選択したら「書込」を押します。書き込みにも時間がかかるので気長に待ちます。
書き込みが終わったらSSDを取り外して、Raspberry PiとSSDを接続します。このときmicroSDは抜いた状態です。microSDを入れているとそちらのOSを優先的に読みだされます。
この状態で電源を入れれば無事起動しました。
また、WEbサーバーなので色々動作確認をしましたが、動作にも問題はありませんでした。
これだけでデータの移行が完璧に行えました。
まとめ
DD for Windowsを使うことで、SD Card Copierを使用せず簡単にデータの移行ができました。
動作も問題なく、CLI環境でのお手軽移行が実現しました。私の求めていたスタイルが実現して嬉しい限りです。
また、副次的な効果として、このイメージファイルは少し容量はかさみますが、完全な状態でのバックアップが可能ということも今回の検証でわかったので有効活用していこうと思います。
SSDの容量がmicroSDカードに比べて大きいので、割り当てられていない領域がありますが、これは後で拡張しても良し、どうせウェアレベリングで使われるので元のmicroSDカードの容量オーバーしないならそのままでも問題ありません。
以上です。お読みいただきありがとうございました。