この記事は『ラズパイ の簡単バックアップ・復元アプリ「SD Card Copier」の翻訳』 @ Qiita で「いいね」×10 以上で翻訳すると約束した、RaspberryPi の「バックアップ」に関する公式ドキュメントの翻訳です。
ヘッドレス1のラズパイで Jessie Lite や Stretch Lite などの**「SD Card Copier」が使えない場合の参考**にしてください。
また、初めてトライされる方のために、なるべく注釈を入れるようにしましたが、TL;DR で取りいそぎ「SD カードをまるごとバックアップしたい」方はこちら→「# SDカードのイメージ作成」
なお、この記事は原文と同じ CC BY-SA 4.0 国際ライセンスです。
- 【原文】 「Backups」| Raspberry Pi Documentation | RaspberryPi.org
▼以下翻訳
バックアップ
重要なファイルは定期的にバックアップしておくことを強くお勧めします。一般的にバックアップはユーザー・ファイルに限りません。構成ファイル、データベース、インストールされているソフトウェア、設定ファイル、さらにはシステム全体のスナップショット2さえも含まれます。
ここでは、いくつかのバックアップ技術を通して、あなたのラズパイのためのバックアップ方法を案内します。
ホームフォルダ
ホームフォルダをバックアップしておく賢明な方法は、tar
コマンド3を使用してフォルダのアーカイブ4を作成することでスナップショット2を作成し、そのコピーをホーム PC またはクラウドストレージ5などに保存することです。これを行うには、以下のコマンドを入力します。
cd /home/
sudo tar czf pi_home.tar.gz pi
これは /home
に pi_home.tar.gz
と呼ばれる tar
アーカイブを作成します。このファイルを USB メモリにコピーするか、ネットワーク上の別のマシンに転送してください。
(上記は、sudo
コマンドを使い tar
コマンドを管理者権限で実行しています。czf
オプションで「アーカイブ + gzip
で圧縮後、指定したファイルで出力」を指定し、pi
(/home/pi
)のディレクトリをアーカイブ&圧縮して pi_home.tar.gz
として出力しています。)
MySQL
Raspberry Pi 上で MySQL6 データベースを実行している場合は、それらもバックアップしておくことをお勧めします。単一のデータベースをバックアップするには、mysqldump
コマンドを使用します。
mysqldump recipes > recipes.sql
上記は、mysqldump
コマンドでデータベース(DB)名が recipes
の DB を recipes.sql
ファイルにダンプ7してバックアップしています。
この時 mysqldump
コマンドにユーザー名とパスワードが指定されていないことに注目ください。ホームフォルダにある MySQL の設定ファイル ~/.my.cnf
に、MySQL の資格情報(アカウント情報)の記載がない場合は、コマンドにフラグ(オプション)を付けてユーザー名とパスワードを指定します。
mysqldump -u<root> -p<pass> recipes > recipes.sql
ダンプ・ファイルから MySQL データベースを復元するには、ダンプ・ファイルを mysql
コマンドにパイプ8で渡し、DB に再ダンプします。必要に応じて MySQL の資格情報(アカウント情報)とデータベース名を入力します。この時、データベースがあらかじめ存在している必要があるので、最初に作成してください。
# DB recipes の作成
mysql -Bse "create database recipes"
# DB の中身をダンプ
cat recipes.sql | mysql recipes
cat
コマンド9以外の方法として、pv
コマンド10で進捗をメーターで確認しながらダンプ・ファイルを MySQL に処理させることもできます。ただし、これはデフォルトではインストールされないので、sudo apt-get install pv
でインストールしてください。このコマンドは、ファイルが大きい場合に便利です。
# DB recipes の作成
mysql -Bse "create database recipes"
# DB の中身をダンプ
pv recipes.sql | mysql recipes
SDカードのイメージ作成
SD カードのイメージ11全体のコピーを保存しておくと便利な場合があります。SD カードを紛失したり破損したりした場合でも SD カードを復元できるからです。これを行うには、新しいカードにイメージを書き込むのと同じ方法を使用しますが、その逆の手順です。
Linuxの場合
sudo dd bs=4M if=/dev/sdb of=raspbian.img
これは、あなたのコンピュータ上にイメージを作成します。(管理者権限で dd
コマンドを実行し、/dev/sdb
のディレクトリを 4M バイトのブロックサイズ毎に読み取り、1つのイメージとして raspbian.img
に出力します。if
of
の違いに注意)
これにより、他のSDカードに書き込めるようになるため、全く同じ内容と設定を保つことができます。別の SD カードに復元または複製するには dd
コマンド12を逆の手順で使用します。
sudo dd bs=4M if=raspbian.img of=/dev/sdb
これらのファイルは非常に大きくなる可能性があるため、圧縮されることがよくあります。圧縮するには、dd
コマンドの出力を gzip
コマンドにパイプで渡して、元のサイズよりかなり小さい圧縮ファイルにすることができます。
sudo dd bs=4M if=/dev/sdb | gzip > raspbian.img.gz
復元するには、gunzip
コマンドの出力を dd
コマンドにパイプで渡します。
gunzip --stdout raspbian.img.gz | sudo dd bs=4M of=/dev/sdb
- 上記は、
raspbian.img.gz
をgunzip
で解凍したものを標準出力からパイプに渡し、dd
コマンドで/dev/sdb
に 4Mバイトのブロック単位で書き込んでいます。
Mac 上でバックアップ行う場合、使用するコマンドはほぼ同じですが、上記の例の 4M
を 4m
と小文字に置き換えてください。
SD カードのイメージ・インストールに関する詳細は下記を参照してください。
- Installing operating system images @ RaspberryPi.org
オートメーション(自動化)
Bash13 スクリプトを作成して、これらの各プロセスを自動的に実行したり、cron
14 を使用して定期的に実行したりすることもできます。
-
【ヘッドレスとは】
普段はモニターやキーボードなどをつなげずにパソコン本体のみを動かす状態のこと。または、その状態を前提として構成された OS のこと。
「ヘッドレス」と言っても「ノータリン」の事では無く、サーバー用途などパフォーマンスやスペースを優先した目立たないが縁の下の力持ち的な使い方の1つ。SSH などのコマンド経由や VNC 経由でリモートで操作することが多い場合、ヘッドレス・モードで OS を起動させておくことでモニタなどの外部デバイスは不要になるためスペースを確保することができる。また、Linux や UNIX などでは OS のインストールの時点で X Window といった GUI 系のアプリケーション、プログラムや各種ライブラリなどが入っていない OS のインストール・イメージを提供していることも多い。それらのヘッドレス OS は GUI にリソースを割かないぶん全体的な容量や動作の軽量化が期待できる。ラズパイの場合は、OS のダウンロード・ページにある「Raspbian Stretch Lite
」などのLite
が付くものがヘッドレス向けの OS イメージである(後述の「イメージとは」も参照)。その際、GPU 演算を必要としないサービス用途の場合は、GPU のメモリを CPU に割り当てることで、より安定性を増すことができる。 ↩ -
【スナップショットとは】
現在の状態をバックアップしたもの。イメージと類義であるが、イメージがそれだけで完結する(全体が復元できる)のに対し、スナップショットの場合、全体を復元するには補完ファイルが別途必要とされるものが多い。これは、スナップショットが「必要な部分だけバックアップする」ことで、1回の容量を少なくし手軽にバックアップすることを目的としているためである。詳しくは下記「イメージとは」を参照。 ↩ ↩2 -
【
tar
コマンドとは】
アーカイブの1種(下記「アーカイブとは」も参照)。複数のファイルやフォルダ(ディレクトリ)を1つのファイルにまとめるコマンドおよびそのファイル形式。拡張子も.tar
である。UNIX コマンドでも古いものの1つ。tar
自体は基本的にアーカイブするだけで圧縮はかけないが、tar
アーカイブ後に圧縮することが多い。また、圧縮形式をファイルの拡張子に接尾辞として加えていく習慣がある。例えばtar
アーカイブ後gzip
で圧縮した場合はmyfiles.tar.gz
とする、などである。解凍(展開)は、myfiles.tar.gz
などの場合、gz
の解凍はgzip
で解凍し、tar
で再展開する、といった2段階の作業が必要である。オプションで同時指定もできるので、解凍と同時に展開するのが一般的である。tar
は、「タール」が触れるものを飲み込んで塊になるイメージからtarball
とも呼ばれる。これは、記憶メディアがテープだった時代に断片化したデータをデフラグする際に、テープを流してピックアップしながら1つにまとめていたことから由来する。「tar」@ Wikipedia ↩ -
【アーカイブとは】
複数のファイルを1つにまとめること。圧縮の意味ではない。「なんとかアーカイブス」などのように、バラバラだったものを保管目的のために一箇所に整頓する行為を言い、そこから使えるように整理したものを「ライブラリ」と言う。 ↩ -
【クラウドストレージとは】
インターネット上のデータ保存領域(ストレージ)のこと。Google ドライブ、Microsoft OneDrive などがある。LAN(ローカル・ネットワーク)上のストレージの場合は、ネットワークストレージと呼ばれ、NAS などの製品がある。「オンラインストレージ」@ Wikipedia ↩ -
【MySQLとは】
データベース(DB)を管理するシステムで、老舗の1つ。オープンソースである。RDBMS と呼ばれる、内部で DB と DB のカラム(表と表の列)の ID による紐付けによってデータを管理するタイプである。一般的にデータの操作にはmysql
専用のコマンドと SQL という DB の汎用言語を使う。「MySQL」@ Wikipedia ↩ -
【ダンプとは】
一括出力のこと。ダンプカーがドサっと積荷を下ろすイメージから。某プロレスラーのように怖いものではなく、単純だが力強いバックアップの味方である。 ↩ -
【パイプとは】
コマンドの出力を別のコマンドの入力に渡すための仕組み。コマンドとコマンドのつなぎに|
(パイプ)を使うことで渡せる。「パイプ (コンピュータ)」@ Wikipedia ↩ -
【
cat
コマンドとは】
Catenate コマンド。ファイルの中身を標準出力に書き出すコマンド。ファイルを連結させたり、表示したりするのに使う。ちなみに筆者は最初「勝てねーって」(catenate
)と覚えたが、後から意味がわからなかったので「中身を見る」という意味でcat
を「カタログ表示みたいなコマンド」として覚えている。「cat(UNIX)」@ Wikipedia ↩ -
【
pv
コマンドとは】Pipe Viewer コマンド。パイプを通るデータを可視化するコマンドで、進捗確認などに使われる。「pv
」タグの Qiita 記事一覧 @ Qiita ↩ -
【イメージとは】
OS やドライブなどのアーカイブ。全体をバックアップした1つのファイルのこと。その瞬間のドライブの状態を写真のように撮る(1つのファイルに取る)イメージ。類語に「スナップ」があるが、ほぼ同じ意味で、一般的に差分のみを保存することで手軽に撮れるイメージのことを「スナップ」と言う。macOS の TimeMachine などは、初回をイメージ保存し、以降はスナップ(差分を)保存する。イメージのフォーマット(形式)には、国際標準(ISO)で定義されている ISO イメージが有名である。 ↩ -
【
dd
コマンドとは】
Dataset Definition コマンド。ハードディスクや SD などのドライブ上のデータを再定義するコマンド。バイトもしくはブロック単位で直接ドライブから読み書きすることができ、主にデータのコピーや変換に使われる。UNIX のコマンドでも古いコマンドの1つ。オプションのif
とof
は打ち間違えやすいため、1つ間違えるとディスクを消すことになり「Disk Destroyer
」とも呼ばれる取り扱い注意なコマンドの1つ。(体験談)「dd (UNIX)」@ Wikipedia ↩ -
【
bash
とは】
コマンドラインで使われる言語の1つで、UNIX/Linux のシェルとしても機能する。
【シェル(Shell
、殻)とは】
OS の基幹プログラム集である「カーネル」を操作するためのインターフェースのこと。
【カーネルとは】
何かに覆われており直接は触れない・見えないが何かの本質となるもので、日本語だと「核」「(牡蠣などの)身」「(食べれる類いの)種」などを意味する。トウモロコシのコーン(corn
)などもカーネルの語源であるKernnel
のKern
に由来する。
カーネルは一般的に直接ユーザが触ることはできないため、カーネルを触るためのプログラムをシェル(殻)と呼ぶことが多い。例えば、macOS の Finder や Windows の Explorer はディレクトリ操作の GUI のシェルである。GUI に対し CUI であるターミナルやコマンドプロンプトなどから、ディレクトリ操作に限らずカーネルの各種操作をする(各種コマンドを呼び出す)ためのシェルがbash
となる。bash
以外にもash
zsh
POSIX
bourne
などの多数のシェルが存在する。また、一連の動きの流れを書き留めたものを「スクリプト」(台本)と呼ぶが、bash
上で動作するものを「bash
スクリプト」と呼ぶ。Windows で言うバッチファイルのようなものである。ちなみにバスケットのシューズのバッシュとは関係がない。「Bash」@ Wikipedia ↩ -
【
cron
とは】
苦労しないための定例処理コマンド。つまり、タイマー実行させるためのプログラムである。git
などのclone
と似て非なるものなので注意。語源はギリシャ語の「時間」を意味する「χρόνος
」(chronos
)から来ている。
Bash に限らず、作成したスクリプトを定期的に実行するのに使われる。この実行のタイミングはcrontab
と呼ばれるファイルを編集して指定する。多くの OS はcrontab
コマンドでファイルを開くことができるが、直接編集も可能である。このファイルの内容をcrond
と呼ばれる常駐アプリ(デーモン)が監視を行い、指定された日時が来ると、同じように指定されたスクリプトを実行する。「crontab」@ Wikipedia ↩