LoginSignup
7
4

More than 1 year has passed since last update.

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

Last updated at Posted at 2019-02-05


この記事は『ラズパイ の簡単バックアップ・復元アプリ「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

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

(上記は、sudo コマンドを使い tar コマンドを管理者権限で実行しています。czf オプションで「アーカイブ + gzip で圧縮後、指定したファイルで出力」を指定し、pi/home/pi)のディレクトリをアーカイブ&圧縮して pi_home.tar.gz として出力しています。)

MySQL

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

MySQLの特定DB(recipes)のダンプ
mysqldump recipes > recipes.sql

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

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

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

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

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

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

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

SDカードのイメージ作成

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

Linuxの場合

ディスク・イメージの作成(/dev/sdb→raspbian.img)
sudo dd bs=4M if=/dev/sdb of=raspbian.img

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

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

ディスク・イメージの復元(raspbian.img→/dev/sdb)
sudo dd bs=4M if=raspbian.img of=/dev/sdb

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

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

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

圧縮ディスク・イメージの復元(raspbian.img.gz→/dev/sdb)
gunzip --stdout raspbian.img.gz | sudo dd bs=4M of=/dev/sdb
  • 上記は、raspbian.img.gzgunzip で解凍したものを標準出力からパイプに渡し、dd コマンドで /dev/sdb に 4Mバイトのブロック単位で書き込んでいます。

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

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

オートメーション(自動化)

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


  1. 【ヘッドレスとは】
    普段はモニターやキーボードなどをつなげずにパソコン本体のみを動かす状態のこと。または、その状態を前提として構成された OS のこと。
    「ヘッドレス」と言っても「ノータリン」の事では無く、サーバー用途などパフォーマンスやスペースを優先した目立たないが縁の下の力持ち的な使い方の1つ。SSH などのコマンド経由や VNC 経由でリモートで操作することが多い場合、ヘッドレス・モードで OS を起動させておくことでモニタなどの外部デバイスは不要になるためスペースを確保することができる。また、Linux や UNIX などでは OS のインストールの時点で X Window といった GUI 系のアプリケーション、プログラムや各種ライブラリなどが入っていない OS のインストール・イメージを提供していることも多い。それらのヘッドレス OS は GUI にリソースを割かないぶん全体的な容量や動作の軽量化が期待できる。ラズパイの場合は、OS のダウンロード・ページにある「Raspbian Stretch Lite」などの Lite が付くものがヘッドレス向けの OS イメージである(後述の「イメージとは」も参照)。その際、GPU 演算を必要としないサービス用途の場合は、GPU のメモリを CPU に割り当てることで、より安定性を増すことができる。 

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

  3. 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 

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

  5. 【クラウドストレージとは】
    インターネット上のデータ保存領域(ストレージ)のこと。Google ドライブMicrosoft OneDrive などがある。LAN(ローカル・ネットワーク)上のストレージの場合は、ネットワークストレージと呼ばれ、NAS などの製品がある。「オンラインストレージ」@ Wikipedia 

  6. 【MySQLとは】
    データベース(DB)を管理するシステムで、老舗の1つ。オープンソースである。RDBMS と呼ばれる、内部で DB と DB のカラム(表と表の列)の ID による紐付けによってデータを管理するタイプである。一般的にデータの操作には mysql 専用のコマンドと SQL という DB の汎用言語を使う。「MySQL」@ Wikipedia 

  7. 【ダンプとは】
    一括出力のこと。ダンプカーがドサっと積荷を下ろすイメージから。某プロレスラーのように怖いものではなく、単純だが力強いバックアップの味方である。 

  8. 【パイプとは】
    コマンドの出力を別のコマンドの入力に渡すための仕組み。コマンドとコマンドのつなぎに |(パイプ)を使うことで渡せる。「パイプ (コンピュータ)」@ Wikipedia 

  9. catコマンドとは】
    Catenate コマンド。ファイルの中身を標準出力に書き出すコマンド。ファイルを連結させたり、表示したりするのに使う。ちなみに筆者は最初「勝てねーって」(catenate)と覚えたが、後から意味がわからなかったので「中身を見る」という意味で cat を「カタログ表示みたいなコマンド」として覚えている。「cat(UNIX)」@ Wikipedia 

  10. pvコマンドとは】Pipe Viewer コマンド。パイプを通るデータを可視化するコマンドで、進捗確認などに使われる。pv」タグの Qiita 記事一覧 @ Qiita 

  11. 【イメージとは】
    OS やドライブなどのアーカイブ。全体をバックアップした1つのファイルのこと。その瞬間のドライブの状態を写真のように撮る(1つのファイルに取る)イメージ。類語に「スナップ」があるが、ほぼ同じ意味で、一般的に差分のみを保存することで手軽に撮れるイメージのことを「スナップ」と言う。macOS の TimeMachine などは、初回をイメージ保存し、以降はスナップ(差分を)保存する。イメージのフォーマット(形式)には、国際標準(ISO)で定義されている ISO イメージが有名である。 

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

  13. bashとは】
    コマンドラインで使われる言語の1つで、UNIX/Linux のシェルとしても機能する。

    【シェル(Shell、殻)とは】
    OS の基幹プログラム集である「カーネル」を操作するためのインターフェースのこと。

    【カーネルとは】
    何かに覆われており直接は触れない・見えないが何かの本質となるもので、日本語だと「核」「(牡蠣などの)身」「(食べれる類いの)種」などを意味する。トウモロコシのコーン(corn)などもカーネルの語源である KernnelKern に由来する。

    カーネルは一般的に直接ユーザが触ることはできないため、カーネルを触るためのプログラムをシェル(殻)と呼ぶことが多い。例えば、macOS の Finder や Windows の Explorer はディレクトリ操作の GUI のシェルである。GUI に対し CUI であるターミナルやコマンドプロンプトなどから、ディレクトリ操作に限らずカーネルの各種操作をする(各種コマンドを呼び出す)ためのシェルが bash となる。bash 以外にも ash zsh POSIX bourne などの多数のシェルが存在する。また、一連の動きの流れを書き留めたものを「スクリプト」(台本)と呼ぶが、bash 上で動作するものを「bash スクリプト」と呼ぶ。Windows で言うバッチファイルのようなものである。ちなみにバスケットのシューズのバッシュとは関係がない。「Bash」@ Wikipedia 

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

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4