Raspberry Pi でSDカードの作成とバックアップ

マイクロSDカードの値段も下げってきており値段と使い勝ってを考えると32Gがお得そうです。
今回pi3が加わり5台になりました。2台は常時稼動、1台はディスクトップとして常用しています。

まだwheezyで稼働しているpiもあるのでSDカードの作成をしてみたいと思います。
またこういった作業用に専用のSDカードを作っておくのもいいと思います。

さて今回試す環境は次のとおりです。
OSイメージ 2016-03-18-raspbian-jessie.img
作業pc Raspberry pi 3 raspbian-jessie
マイクロSDカードリーダー

SDカードの作成
OSイメージは予めダウンロード、展開しておきます。

SDカードは8GB FAT32でフォーマットしてあります。
マイクロSDをカードリーダーに取り付けてUSBに差し込みデバイス名を確認します。

$ dmesg | tail
sd 0:0:0:0: [sda] 15353856 512-byte logical blocks: (7.86 GB/7.32 GiB)
[  426.668108]  sda: sda1

if=書き込むファイル.img of=/dev/デバイス名(マイクロSD)

# dd if=2016-03-18-raspbian-jessie.img of=/dev/sda bs=1M
3847+0 レコード入力
3847+0 レコード出力
4033871872 バイト (4.0 GB) コピーされました、 648.847 秒、 6.2 MB/秒

dd実行中は進捗を表示しません。もし途中経過を知りたい場合は新たにターミナルを開いて次のコマンドを打ちます。

# killall -USR1 dd

以下のように途中経過を表示してddは続行します。

# dd if=2016-03-18-raspbian-jessie.img of=/dev/sda bs=1M
1930+0 レコード入力
1930+0 レコード出力
2023751680 バイト (2.0 GB) コピーされました、 316.49 秒、 6.4 MB/秒
3847+0 レコード入力
3847+0 レコード出力
4033871872 バイト (4.0 GB) コピーされました、 648.847 秒、 6.2 MB/秒

ddが終了するとプロンプトが戻ってくるのでマイクロSDを抜き差ししてPCManFMから確認してみましょう。
sdcard01
bootと4.0GBボリュームがマウントされてファイルが読めれば成功です。

デバイスの指定さえ間違いがなければ1行のコマンドだけですので簡単ですね。

今度は書き込み済の古いSDカードに新たにraspbian-jessieを焼き直してみます。
ddは正常終了しますがマウントしようとすると4.0GBボリュームでこんなエラーが出てしまいます。
exited with non-zero exit status 32 mount wrong fs type bad option bad superblock
dd_error

fsckを実行してみます。

# fsck -y /dev/sda

なぜこうなるのか理由はわかりませんがfsckで修復後はすべて正常に動作するようです。

それでもやはり新規インストールするので古いSDカードを使う場合はパーティションをすべて削除するかFAT32にフォーマットしてから実行しましょう。

fdiskでパーテーション削除
LXTerminalから# fdisk /dev/sdaを実行します。
fdisk01
Command (m for help): p パーテーション情報表示
/dev/sda1
/dev/sda2
Command (m for help): d
Partition number (1,2, default 2):
Command (m for help): d
Selected partition 1
Command (m for help): w 変更を書き込んで終了

GUIツールを使いたい時はGPartedをインストールします。

# apt install gparted

gparted00
右上から/dev/sdaを選択します。
/dev/mmcblk0は自マシンのSDカードなので間違わないようにします

バックアップを検討してみる
piの場合バックアップというと真っ先に浮かぶのがSDカードtoSDカードと思います。
しかし同じ8GBでも実際の容量はメーカーによって違っています。また同じメーカー同じ型番でもロットによって違っている場合もあります。
dd01

表記は同じ8GBですが# fdisk -l /dev/sdx するとそれぞれ7.4GB,7.3GBになっています。

例では後半は未使用領域で何もデータが入っていないためddではエラーになっていますが正常に起動します。

また/dev/sdxはUSBに差し込む順番で変わって来てしまうため、バックアップ元とバックアップ先の指定を間違うとバックアップ元のSDカードを空っぽにしてしまう事態も考えられます。

SDカードの引っ越しをする際には慎重にデバイス名を確認して且つバックアップ先のSDカードの容量を大きい物にします。

以上から、もし作業用マシンにSDカードの容量と時間に余裕がある場合は一旦imgファイルを作成してから新しいSDカードに書き出してやるのもいいと思います。
バックアップ元のSDカードを作業用pcの空きスペースに保存する

# dd if=/dev/sda of=raspbian2016040421.img bs=1M

SDカードに書き込むときは

# dd if=raspbian2016040420.img of=/dev/sda bs=1M

保存したimgファイルをマウントすることもできます。
ここでは例としてダウンロードして展開した2016-03-18-raspbian-jessie.imgで試してみます。
kpartxをインストール

# apt install kpartx

2016-03-18-raspbian-jessie.imgがあるディレクトリで実行します。

# kpartx -v -a 2016-03-18-raspbian-jessie.img
add map loop0p1 (254:0): 0 122880 linear /dev/loop0 8192
add map loop0p2 (254:1): 0 7747584 linear /dev/loop0 131072

/dev/mapper/以下にloop0p1 loop0p2ができます。
PCManFMを見てみましょう。
kpartx01
bootと4.0GBボリュームが出現していると思います。

kpartx02
ボリュームを選択してパスワードを打ち込んであげます。

kpartx03
マウントされました。

アンマウントするには一旦bootと4.0GBボリューム以外のフォルダを選択してマウントマークをクリックします。

さらに一覧から消すには下記のコマンドを実行します。

# kpartx -d 2016-03-18-raspbian-jessie.img
loop deleted : /dev/loop0

下は当サイトのpi3のSDカードの構成です。
gparted10
2016-03-18-raspbian-jessie.imgのカードを作成した時点でgpartedで拡張さらに/dev/mmcblk0p3(sda3)を作成して全く同じ容量にしています。
管理しやすいように個人用データはmmcblk0p3に保存するようにしています。
適当な位置にディレクトリを作ってマウントします。
本当に必要なデータはSDカード以外にバックアップを取ります。
それ以外の使い方としてはパーテーション単位でバックアップ、復元したり、また今回は試していませんが/dev/mmcblk0p2のバックアップを作って/dev/mmcblk0p3から起動することも可能と思います。

piのSDカードスロットに挿してあるSDカードは正規のシャットダウンに失敗しても滅多に壊れることはないのですがUSB端子に挿してあるカードはパーテーション情報がとんでしまうことがあります。
必要のない時はできるだけ外したほうがいいでしょう。

ディスクトップ用途では個人用データは別としてホームディレクトリのバックアップとシステムに加えた変更(設定ファイル)を記録(バックアップ)しておけばwindowずのようにおせっかいな部分が少ないので万一壊れても比較的容易に現状を復旧できると思います。