Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?

Raspberry Piで最小限に切り詰めたSDカードのイメージをバックアップする手順メモ.md

Raspberry Piで構築した環境はddを使ってイメージを丸ごとバックアップしておくと すぐに環境を戻すことができるので何かと便利です。

ただ、最近のmicroSDカードは容量が大きいので、バックアップ&リストアに時間がります。

そこで、Raspian環境で不必要なパッケージを最大限削って容量を減らして、 パーティションサイズを小さくした状態でddバックアップする手順を説明します。

(1) Raspianをインストール

インストール手順はこの辺りを参照

(2) いらないパッケージを削りまくる

今回はX環境を全部消します。

あらかじめ、raspi-configコマンドを実行後、"boot option"→"Console"を選択して、Xを起動しないように設定しておきます。

次に、以下のコマンドを使ってX環境を全部消します。

$ sudo apt-get install deborphan
$ sudo apt-get autoremove --purge "libx11-.*" "lxde-.*" raspberrypi-artwork xkb-data omxplayer penguinspuzzle sgml-base xml-core "alsa-.*" "cifs-.*" "samba-.*" "fonts-.*" "desktop-*" "gnome-.*" 
$ sudo apt-get autoremove --purge $(deborphan)
$ sudo apt-get autoremove --purge
$ sudo apt-get autoclean

参考URL

(3) パッケージのアップデート

$ sudo apt-get update && sudo apt-get dist-upgrade

(4) 必要な環境をセットアップ

ユーザとかパッケージなど、バックアップしておきたい必要な環境をこの地点でセットアップしておきます。

例
    $ sudo passwd pi
    
    $ sudo apt-get install lv vim zsh screen git-core
    $ sudo apt-get install ruby ruby-dev
    $ sudo gem install mqtt
    $ sudo apt-get install wiringpi
       .
       .
       .
       .

セットアップが終わったら、シャットダウンしてmicroSDを抜きます。

(5) パーティションのリサイズ

デスクトップPCのLinux環境にmicroSDを接続して、gpartedを使って/dev/sdb2を小さくします。

$ sudo apt-get install gparted
$ sudo gparted

/dev/sdb2の空き容量を0にしてしまうとOSの動作に不具合が出るので、 数百MB程度は空き容量を残しておきましょう。

メモ:

  • デバイスファイル(ここの説明では/dev/sdb2)は環境によって異なります。
  • /dev/sdbはストレージ全体を指し、/dev/sdb{数字} はパーティションを指します

(6) サイズの計算とddを使ったイメージ丸ごとバックアップ

まずfdiskのpコマンドを使ってパーティションの情報を表示します。

$ sudo fdisk /dev/sdb
Command (m for help): p  ← コマンドpで情報表示

Disk /dev/sdb: 16.0 GB, 16021192704 bytes
64 heads, 32 sectors/track, 15279 cylinders, total 31291392 sectors
Units = sectors of 1 * 512 = 512 bytes                 ← ここに1セクタが何バイトかが表示されている。
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004441a

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            8192      131071       61440    c  W95 FAT32 (LBA)
/dev/sdb2          131072     4243455     2056192   83  Linux

Command (m for help): q  ← コマンドqでfdisk終了

fdiskはどのパーティションがどの位置にあるかをStart, Endの項目に表示します。 Start, Endで表示されている数字の単位はセクターです。 1セクターが何バイトか?というのは、fdiskのpコマンドのはじめに表示されているので、 ここをよく見ましょう。例では1セクタ=512byteと表示されています。

ここでは、/dev/sdb2の終わりが4243455と表示されているので、 (4243455+1)個のセクターをバックアップすればOK。

$ sudo dd if=/dev/sdb of=backup.dd bs=512 count=4243456
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment