ラズパイ のコマンド・バックアップと復元の翻訳

![](https://i.creativecommons.org/l/by-sa/4.0/80x15.png)
この記事は『[ラズパイ の簡単バックアップ・復元アプリ「SD Card Copier」の翻訳](https://qiita.com/KEINOS/items/62b2abb9cc4f2d142cbb)』 @ Qiita で「いいね」×10 以上で翻訳すると約束した、[RaspberryPi の「バックアップ」に関する公式ドキュメント](https://www.raspberrypi.org/downloads/raspbian/)の翻訳です。

ヘッドレス[^headless]のラズパイで Jessie Lite や Stretch Lite などの**「[SD Card Copier](https://qiita.com/drafts/62b2abb9cc4f2d142cbb)」が使えない場合の参考**にしてください。

また、初めてトライされる方のために、なるべく注釈を入れるようにしましたが、TL;DR で取りいそぎ「SD カードをまるごとバックアップしたい」方は[こちら](#sd%E3%82%AB%E3%83%BC%E3%83%89%E3%81%AE%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E4%BD%9C%E6%88%90)→「[# SDカードのイメージ作成](#sd%E3%82%AB%E3%83%BC%E3%83%89%E3%81%AE%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E4%BD%9C%E6%88%90)」

なお、この記事は[原文と同じ CC BY-SA 4.0 国際ライセンス](https://www.raspberrypi.org/documentation/)です。

- 【原文】 「[Backups](https://www.raspberrypi.org/documentation/linux/filesystem/backup.md)」| Raspberry Pi Documentation | RaspberryPi.org

[^headless]: 【ヘッドレスとは】<br>普段はモニターやキーボードなどをつなげずにパソコン本体のみを動かす状態のこと。または、その状態を前提として構成された OS のこと。<br>「ヘッドレス」と言っても「ノータリン」の事では無く、サーバー用途などパフォーマンスやスペースを優先した目立たないが縁の下の力持ち的な使い方の１つ。[SSH](https://ja.wikipedia.org/wiki/Secure_Shell) などのコマンド経由や [VNC](https://ja.wikipedia.org/wiki/Virtual_Network_Computing) 経由でリモートで操作することが多い場合、ヘッドレス・モードで OS を起動させておくことでモニタなどの外部デバイスは不要になるためスペースを確保することができる。また、Linux や UNIX などでは OS のインストールの時点で [X Window](https://ja.wikipedia.org/wiki/X_Window_System) といった [GUI](https://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%82%AB%E3%83%AB%E3%83%A6%E3%83%BC%E3%82%B6%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9) 系のアプリケーション、プログラムや各種ライブラリなどが入っていない OS のインストール・イメージを提供していることも多い。それらのヘッドレス OS は GUI にリソースを割かないぶん全体的な容量や動作の軽量化が期待できる。ラズパイの場合は、[OS のダウンロード・ページ](https://www.raspberrypi.org/downloads/raspbian/)にある「`Raspbian Stretch Lite`」などの `Lite` が付くものがヘッドレス向けの OS イメージである（後述の「イメージとは」も参照）。その際、GPU 演算を必要としないサービス用途の場合は、[GPU のメモリを CPU に割り当てる](https://qiita.com/KEINOS/items/43394e4bd3c8fcfb5ee8#%E5%AE%8C%E5%85%A8%E3%83%98%E3%83%83%E3%83%89%E3%83%AC%E3%82%B9%E5%90%91%E3%81%91%E3%81%AE%E8%BF%BD%E5%8A%A0%E8%A8%AD%E5%AE%9A)ことで、より安定性を増すことができる。

▼以下翻訳

## バックアップ

重要なファイルは定期的にバックアップしておくことを強くお勧めします。一般的にバックアップはユーザー・ファイルに限りません。構成ファイル、データベース、インストールされているソフトウェア、設定ファイル、さらにはシステム全体のスナップショット[^snap]さえも含まれます。

ここでは、いくつかのバックアップ技術を通して、あなたのラズパイのためのバックアップ方法を案内します。

[^snap]: 【スナップショットとは】<br>現在の状態をバックアップしたもの。イメージと類義であるが、イメージがそれだけで完結する（全体が復元できる）のに対し、スナップショットの場合、全体を復元するには補完ファイルが別途必要とされるものが多い。これは、スナップショットが「必要な部分だけバックアップする」ことで、１回の容量を少なくし手軽にバックアップすることを目的としているためである。詳しくは下記「イメージとは」を参照。

### ホームフォルダ

ホームフォルダをバックアップしておく賢明な方法は、`tar` コマンド[^tar]を使用してフォルダのアーカイブ[^archive]を作成することでスナップショット[^snap]を作成し、そのコピーをホーム PC またはクラウドストレージ[^cloudstorage]などに保存することです。これを行うには、以下のコマンドを入力します。

[^tar]: 【`tar`コマンドとは】<br>アーカイブの１種（下記「アーカイブとは」も参照）。複数のファイルやフォルダ（ディレクトリ）を１つのファイルにまとめるコマンドおよびそのファイル形式。拡張子も `.tar` である。UNIX コマンドでも古いものの１つ。`tar` 自体は基本的にアーカイブするだけで圧縮はかけないが、`tar` アーカイブ後に圧縮することが多い。また、圧縮形式をファイルの拡張子に接尾辞として加えていく習慣がある。例えば `tar` アーカイブ後 `gzip` で圧縮した場合は `myfiles.tar.gz` とする、などである。解凍（展開）は、`myfiles.tar.gz` などの場合、`gz` の解凍は `gzip` で解凍し、`tar` で再展開する、といった２段階の作業が必要である。オプションで同時指定もできるので、解凍と同時に展開するのが一般的である。`tar` は、「[タール](https://ja.wikipedia.org/wiki/%E4%B9%BE%E7%95%99%E6%B6%B2)」が触れるものを飲み込んで塊になるイメージから [`tarball`](https://en.wikipedia.org/wiki/Tarball_(oil)) とも呼ばれる。これは、記憶メディアがテープだった時代に断片化したデータをデフラグする際に、テープを流してピックアップしながら１つにまとめていたことから由来する。「[tar](https://ja.wikipedia.org/wiki/Tar)」@ Wikipedia

[^archive]: 【アーカイブとは】<br>複数のファイルを１つにまとめること。圧縮の意味ではない。「なんとかアーカイブス」などのように、バラバラだったものを保管目的のために一箇所に**整頓**する行為を言い、そこから使えるように**整理**したものを「ライブラリ」と言う。

[^cloudstorage]: 【クラウドストレージとは】<br>インターネット上のデータ保存領域（ストレージ）のこと。[Google ドライブ](https://ja.wikipedia.org/wiki/Google_%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96)、[Microsoft OneDrive](https://ja.wikipedia.org/wiki/Microsoft_OneDrive) などがある。LAN（ローカル・ネットワーク）上のストレージの場合は、ネットワークストレージと呼ばれ、[NAS](https://ja.wikipedia.org/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A2%E3%82%BF%E3%83%83%E3%83%81%E3%83%88%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8) などの製品がある。「[オンラインストレージ](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8)」@ Wikipedia

```bash:ユーザ・ホームのアーカイブ
cd /home/
sudo tar czf pi_home.tar.gz pi
```

これは `/home` に `pi_home.tar.gz` と呼ばれる `tar` アーカイブを作成します。このファイルを USB メモリにコピーするか、ネットワーク上の別のマシンに転送してください。

（上記は、`sudo` コマンドを使い `tar` コマンドを管理者権限で実行しています。[`czf` オプション](https://www.google.com/search?q=site:qiita.com+tar+%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3&tbs=qdr:y)で「アーカイブ ＋ `gzip` で圧縮後、指定したファイルで出力」を指定し、`pi`（`/home/pi`）のディレクトリをアーカイブ＆圧縮して `pi_home.tar.gz` として出力しています。）

### MySQL

Raspberry Pi 上で MySQL[^mysql] データベースを実行している場合は、それらもバックアップしておくことをお勧めします。単一のデータベースをバックアップするには、`mysqldump` コマンドを使用します。

[^mysql]: 【MySQLとは】<br>データベース（DB）を管理するシステムで、老舗の１つ。オープンソースである。[RDBMS](https://ja.wikipedia.org/wiki/%E9%96%A2%E4%BF%82%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E7%AE%A1%E7%90%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0) と呼ばれる、内部で DB と DB のカラム（表と表の列）の ID による紐付けによってデータを管理するタイプである。一般的にデータの操作には `mysql` 専用のコマンドと [SQL](https://ja.wikipedia.org/wiki/SQL) という DB の汎用言語を使う。「[MySQL](https://ja.wikipedia.org/wiki/MySQL)」@ Wikipedia

```bash:MySQLの特定DB（recipes）のダンプ
mysqldump recipes > recipes.sql
```

上記は、`mysqldump` コマンドでデータベース（DB）名が `recipes` の DB を `recipes.sql` ファイルにダンプ[^dump]してバックアップしています。

[^dump]: 【ダンプとは】<br>一括出力のこと。ダンプカーがドサっと積荷を下ろすイメージから。[某プロレスラー](https://ja.wikipedia.org/wiki/%E3%83%80%E3%83%B3%E3%83%97%E6%9D%BE%E6%9C%AC)のように怖いものではなく、単純だが力強いバックアップの味方である。

この時 `mysqldump` コマンドにユーザー名とパスワードが指定されていないことに注目ください。ホームフォルダにある MySQL の設定ファイル `~/.my.cnf` に、MySQL の資格情報（アカウント情報）の記載がない場合は、コマンドにフラグ（オプション）を付けてユーザー名とパスワードを指定します。

```bash:MySQLの特定DB（recipes）のダンプ（ユーザとパスワード指定付き）
mysqldump -u<root> -p<pass> recipes > recipes.sql
```

ダンプ・ファイルから MySQL データベースを復元するには、ダンプ・ファイルを `mysql` コマンドにパイプ[^pipe]で渡し、DB に再ダンプします。必要に応じて MySQL の資格情報（アカウント情報）とデータベース名を入力します。この時、データベースがあらかじめ存在している必要があるので、最初に作成してください。

[^pipe]: 【パイプとは】<br>コマンドの出力を別のコマンドの入力に渡すための仕組み。コマンドとコマンドのつなぎに `|`（パイプ）を使うことで渡せる。「[パイプ (コンピュータ)](https://ja.wikipedia.org/wiki/%E3%83%91%E3%82%A4%E3%83%97_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF))」@ Wikipedia

```shell-session:MySQLのDB復元例
# DB recipes の作成
mysql -Bse "create database recipes"
# DB の中身をダンプ
cat recipes.sql | mysql recipes
```

`cat` コマンド[^cat]以外の方法として、`pv` コマンド[^pv]で進捗をメーターで確認しながらダンプ・ファイルを MySQL に処理させることもできます。ただし、これはデフォルトではインストールされないので、`sudo apt-get install pv` でインストールしてください。このコマンドは、ファイルが大きい場合に便利です。

[^cat]: 【`cat`コマンドとは】<br>Catenate コマンド。ファイルの中身を標準出力に書き出すコマンド。ファイルを連結させたり、表示したりするのに使う。ちなみに筆者は最初「勝てねーって」（`catenate`）と覚えたが、後から意味がわからなかったので「中身を見る」という意味で `cat` を「カタログ表示みたいなコマンド」として覚えている。「[cat（UNIX）](https://ja.wikipedia.org/wiki/Cat_(UNIX))」@ Wikipedia
[^pv]: 【`pv`コマンドとは】Pipe Viewer コマンド。パイプを通るデータを可視化するコマンドで、進捗確認などに使われる。[「`pv`」タグの Qiita 記事一覧](https://qiita.com/tags/pv) @ Qiita

```bash:pvコマンド経由でDBを復元
# DB recipes の作成
mysql -Bse "create database recipes"
# DB の中身をダンプ
pv recipes.sql | mysql recipes
```

### SDカードのイメージ作成

SD カードのイメージ[^image]全体のコピーを保存しておくと便利な場合があります。SD カードを紛失したり破損したりした場合でも SD カードを復元できるからです。これを行うには、新しいカードにイメージを書き込むのと同じ方法を使用しますが、その逆の手順です。

[^image]: 【イメージとは】<br>OS やドライブなどのアーカイブ。全体をバックアップした１つのファイルのこと。その瞬間のドライブの状態を写真のように撮る（１つのファイルに取る）イメージ。類語に「スナップ」があるが、ほぼ同じ意味で、一般的に差分のみを保存することで手軽に撮れるイメージのことを「スナップ」と言う。macOS の TimeMachine などは、初回をイメージ保存し、以降はスナップ（差分を）保存する。イメージのフォーマット（形式）には、国際標準（ISO）で定義されている [ISO イメージ](https://ja.wikipedia.org/wiki/ISO%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8)が有名である。

#### Linuxの場合

```bash:ディスク・イメージの作成（/dev/sdb→raspbian.img）
sudo dd bs=4M if=/dev/sdb of=raspbian.img
```

これは、あなたのコンピュータ上にイメージを作成します。（管理者権限で `dd` コマンドを実行し、`/dev/sdb` のディレクトリを 4M バイトのブロックサイズ毎に読み取り、１つのイメージとして `raspbian.img` に出力します。`if` `of` の違いに注意）

これにより、他のSDカードに書き込めるようになるため、全く同じ内容と設定を保つことができます。別の SD カードに復元または複製するには `dd` コマンド[^dd]を逆の手順で使用します。

[^dd]: 【`dd`コマンドとは】<br>Dataset Definition コマンド。ハードディスクや SD などのドライブ上のデータを再定義するコマンド。バイトもしくはブロック単位で直接ドライブから読み書きすることができ、主にデータのコピーや変換に使われる。UNIX のコマンドでも古いコマンドの１つ。オプションの `if` と `of` は打ち間違えやすいため、１つ間違えるとディスクを消すことになり「`Disk Destroyer`」とも呼ばれる取り扱い注意なコマンドの１つ。（体験談）「[dd (UNIX)](https://ja.wikipedia.org/wiki/Dd_(UNIX))」@ Wikipedia

```bash:ディスク・イメージの復元（raspbian.img→/dev/sdb）
sudo dd bs=4M if=raspbian.img of=/dev/sdb
```

これらのファイルは非常に大きくなる可能性があるため、圧縮されることがよくあります。圧縮するには、`dd` コマンドの出力を `gzip` コマンドにパイプで渡して、元のサイズよりかなり小さい圧縮ファイルにすることができます。

```bash:圧縮ディスク・イメージの作成（/dev/sdb→raspbian.img.gz）
sudo dd bs=4M if=/dev/sdb | gzip > raspbian.img.gz
```

復元するには、`gunzip` コマンドの出力を `dd` コマンドにパイプで渡します。

```bash:圧縮ディスク・イメージの復元（raspbian.img.gz→/dev/sdb）
gunzip --stdout raspbian.img.gz | sudo dd bs=4M of=/dev/sdb
```

- <sub><sup>上記は、`raspbian.img.gz` を `gunzip` で解凍したものを標準出力からパイプに渡し、`dd` コマンドで `/dev/sdb` に 4Mバイトのブロック単位で書き込んでいます。</sup></sub>

Mac 上でバックアップ行う場合、使用するコマンドはほぼ同じですが、上記の例の `4M` を `4m` と小文字に置き換えてください。

SD カードのイメージ・インストールに関する詳細は下記を参照してください。

- [Installing operating system images](https://www.raspberrypi.org/documentation/installation/installing-images/README.md) @ RaspberryPi.org

### オートメーション（自動化）

Bash[^bash] スクリプトを作成して、これらの各プロセスを自動的に実行したり、`cron`[^cron] を使用して定期的に実行したりすることもできます。

[^bash]: 【`bash`とは】<br>コマンドラインで使われる言語の１つで、UNIX/Linux のシェルとしても機能する。<br><br>【シェル（`Shell`、殻）とは】<br>OS の基幹プログラム集である「[カーネル](https://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB)」を操作するためのインターフェースのこと。<br><br>【カーネルとは】<br>何かに覆われており直接は触れない・見えないが何かの本質となるもので、日本語だと「核」「（牡蠣などの）身」「（食べれる類いの）種」などを意味する。トウモロコシのコーン（`corn`）などもカーネルの語源である `Kernnel` の `Kern` に由来する。<br><br>カーネルは一般的に直接ユーザが触ることはできないため、カーネルを触るためのプログラムをシェル（殻）と呼ぶことが多い。例えば、macOS の Finder や Windows の Explorer はディレクトリ操作の GUI のシェルである。GUI に対し CUI であるターミナルやコマンドプロンプトなどから、ディレクトリ操作に限らずカーネルの各種操作をする（各種コマンドを呼び出す）ためのシェルが `bash` となる。`bash` 以外にも `ash` `zsh` `POSIX` `bourne` などの多数のシェルが存在する。また、一連の動きの流れを書き留めたものを「スクリプト」（台本）と呼ぶが、`bash` 上で動作するものを「`bash` スクリプト」と呼ぶ。Windows で言うバッチファイルのようなものである。ちなみに[バスケットのシューズ](https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%B9%E3%82%B1%E3%83%83%E3%83%88%E3%82%B7%E3%83%A5%E3%83%BC%E3%82%BA)のバッシュとは関係がない。「[Bash](https://ja.wikipedia.org/wiki/Bash)」@ Wikipedia

[^cron]: 【`cron`とは】<br>苦労しないための定例処理コマンド。つまり、タイマー実行させるためのプログラムである。`git` などの `clone` と似て非なるものなので注意。語源はギリシャ語の「時間」を意味する「`χρόνος`」（`chronos`）から来ている。<br>Bash に限らず、作成したスクリプトを定期的に実行するのに使われる。この実行のタイミングは `crontab` と呼ばれるファイルを編集して指定する。多くの OS は `crontab` コマンドでファイルを開くことができるが、直接編集も可能である。このファイルの内容を `crond` と呼ばれる常駐アプリ（デーモン）が監視を行い、指定された日時が来ると、同じように指定されたスクリプトを実行する。「[crontab](https://ja.wikipedia.org/wiki/Crontab)」@ Wikipedia