Raspberry PiのSDカードを丸ごとコピー
最近複数のRaspberry Piを使うことが多くなりました。ただ、いちいち1からセットアップしていたら非常に時間がかかってしまうので、1回セットアップをしたらそのSDカードを丸ごとコピーしてやるのが簡単かなと思い、ハードコピー試してみました。イメージファイルを保存しておくだけでも、環境含めたバックアップになるので便利です。
Raspberry Piのセットアップから始める人は、以下記事を参照ください。
Raspberry Pi 3SDカード。8GB以上を買うのがベター
SDカードリーダー
ネットで調べたところ、Macだと主に以下の2つの方法があるようです。
- ddコマンドを使った方法
- ディスクユーティリティを使った方法
自分は何故かディスクユーティリティを使用した方法はエラーがでてうまくいかなかったので、ddコマンド使った方法のみ記載いたします。
ddコマンドを使ったハードコピー
ディスクのフォーマット
まずはディスクをフォーマットしましょう。好きな方法でよいですが、確実なのはSD Formatterを使う方法です。以下のサイトからダウンロードしたSD Formatterを使ってSDカードをフォーマットをしましょう。ドライブを選択するだけの簡単設計。
ディスクのデバイスファイルを確認
MacでコピーしたいSDカードを挿入後にdfコマンド実行してSDカードのデバイスファイルを確認。よくわからなければ、挿入前と挿入後でdfコマンド実行して比較しましょう。
$ df -h
挿入後に増えているデバイスファイルがSDカードのデバイスファイルです。例えば /dev/disk2
とか/dev/disk3
とか。
イメージ読み出し
以下は/dev/disk2
がSDドライブの場合の例。以下のコマンドでSDカードの中身をRPi.img
というイメージファイルに読み出します。
$ sudo dd if=/dev/disk2 of=~/RPi.img
途中経過が気になる方はCtrl+T
で進捗を表示できます。読み込み終わったら以下コマンド実行してディスクを取り出せる状態にしてから、SDをPCから抜きましょう。
$ diskutil eject /dev/disk2
イメージ書き込み
読み込み完了したら、書き込みしたいSDカードを挿入して、以下のコマンドで一旦アンマウント
$ diskutil umountDisk /dev/disk2
以下のコマンドで書き込み。disk2
をrdisk2
にするのがポイント。理由は…よくわからないです、すみません。なんでも、アンバッファモードになって速度が速くなるみたいです。bs=1mは一度に書き込む容量を表していて1m(1MB)くらいにしないとこれまた速度が遅くなります。途中経過が気になる方はCtrl+T
で進捗を表示できます。
$ sudo dd if=~/RPi.img of=/dev/rdisk2 bs=1m
しばらく(数分)待つと完了のメッセージが出るので、書き込み完了。書き込み完了したら。あとは以下のコマンドでアンマウントしてからSDカードを取り出しましょう。
$ diskutil eject /dev/disk2
以上で書き込みは完了です。
書き込みだけであれば、Raspberry Pi Imagerというソフトが良いと思います。以下記事参照ください。
容量の少ないSDカードから容量の大きいSDカードにコピーする方法
例えば8GBのSDカードを、16GBのSDカードにハードコピーすると残りの8GBはそのままでは使えず、パーティションを初期化してマウントしてやる必要があります。Raspi-config
のExpand Filesystem
でパーティション拡大できる場合もあるのですが、できない場合もあって(NOOBS経由でインストールするとパーティション複雑になるのでダメかも)。パーティションを自分で修正していやる必要があります。
fdiskコマンドでもよいのですが、gpartedを使うとGUIでパーティション変更できるのでオススメです。Raspberry Piに以下のコマンドでインストールできます。
$ sudo apt-get update $ sudo apt-get install gparted
gpartedの注意事項として、ターミナルから起動しようとするとGtk-WARNING **: cannot open display:
というエラーが発生するので、下図のようにRaspbianのメニューの 設定 -> GParted から起動して下さい。
起動したら、パスワードを入力して下さい。
後はgpartedをインストールしたRaspberry Piに、パーティションを操作したい対象のSDカードをUSBカードリーダ経由で接続します。gpartedを入れたRaspberry Pi自身のパーティションはいじれないので注意して下さい。具体的な接続図は以下となります。
起動画面です。最初は、デバイスとしてRaspberry Pi自身のSDカードが選択されています
SDカードリーダのSDカードを以下のように選択します
/dev/sda2
を右クリックします。ここでSDカードがRaspberry Piで自動でマウントされていたらアンマウントします、アンマウントされたらリサイズを選択します
リサイズするサイズを調整します。サイズに空き容量が少なすぎるとresize2fs: New size smaller than minimum.
というエラーが出てリサイズに失敗しますので、容量に1割から2割程度空き容量をもたせるようにしましょう。
編集から保留中の全ての操作を適用するでパーテーションのリサイズが実行されます。
リサイズ完了したら、ディスク取り外しの処理を行って下さい。
gpartedはfdiskではできない、パーティションを結合して、大きなパーティションをつくるといったこともできて非常に便利なアプリです。
バックアップするイメージのサイズを小さくする
調子にのって32GBのSDカードを使うと、バックアップしたいときそのままだと32GBの容量が必要になり凄い勢いでPCの空きディスク容量を圧迫します。そんなときはイメージのサイズを小さくすると良いです。
まずは上記で紹介したgpartedで対象のSDカードのパーティションをリサイズして小さくします。例えば使用するパーティション全体のサイズが5GB
になるように調整しましょう。
後は、リサイズしたSDをMacに接続して、ターミナルで以下のコマンドを実行します。
$ sudo dd if=/dev/disk2 of=RPi.img bs=1m count=6000
ここでcount=6000
は先頭から6000MB(6GB)
をイメージファイルとして読み出すということを意味しています。今回は、パーティションのサイズを5GB
としたので、それより大きい6GB
にしています。必ずパーティション全体のサイズより大きい値を設定しましょう。これで小さいサイズのイメージで保存することができました。
このイメージをSDに書き出した後、残りの空き容量も使いたくなった場合はgparted
で再度リサイズするか、Raspi-config
のExpand Filesystem
を実行することで空容量を使えるようになります。
最新のRaspbianではGUIのRaspi-config
からExpand Filesystem
が無くなってしまったので、ターミナルで以下コマンド実行してCUIのRaspi-config
でExpand Filesystem
を実行しましょう。
$ sudo raspi-config
Raspbian標準の「SD Card Copier」で手軽にコピー
Raspbianには「SD Card Copier」というバックアップツールが標準で付属しているので、単純にSDのコピーが欲しいだけなら、それを使うのが簡単です。
まず、同じメーカ、容量のSDカードを用意するか、コピー元より大容量のSDカードを用意しましょう(当たり前ですが、コピー元より小さい容量のSDカードですとコピーできません)。
以下のようにRapsberry PiにSDカードリーダとSDカードを接続して、Raspberry Piを起動しましょう。
以下のように「メニュー -> アクセサリ -> SD Card Copier」から SD Card Copierを起動します。
念のため、ターミナル開いて dfコマンドでコピー先のディスクを確認します。/dev/sdb1 がSDカードのようですね。
$ df -h ファイルシス サイズ 使用 残り 使用% マウント位置 /dev/root 29G 10G 18G 37% / devtmpfs 434M 0 434M 0% /dev tmpfs 438M 0 438M 0% /dev/shm tmpfs 438M 12M 427M 3% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 438M 0 438M 0% /sys/fs/cgroup /dev/mmcblk0p1 43M 22M 21M 51% /boot tmpfs 88M 0 88M 0% /run/user/1000 /dev/sdb1 30G 2.5M 30G 1% /media/pi/BOOT
あとは、以下のように、コピー元とコピー先を選択して、「Start」をクリックしてコピーします。
より詳細は、以下記事参照下さい
http://www.daipanman.com/entry/2017/08/29/211945
関連記事
変更履歴
2018/06/10 SD Card Copierに関して追記
2017/08/29 SD Card Copierに関して追記
2017/02/17 Etcherに関して追記
2016/11/22 読み込み後のdisk ejectコマンド追記
2015/09/22 容量の少ないSDカードから容量の大きいSDカードにコピーする方法を追記