linuxのバックアップについて


前回の続きですが「USBビデオキャプチャデバイス(GV-USB2)」のLinux用ドライバを入れたい、という目的でシステムのバージョンアップを行うことにしました。

今回、バージョンアップを予定しているカーネル(5.10.0)は、今使っている安定版(4.19.0)と比べるとサポート面で難しくなるので、念の為にシステム全体のバックアップを行い、万が一のときに備えておくことにしました。

経緯:

GV-USB2ビデオキャプチャを使うためにlinux用のドライバをビルドして使おうとしたところ、エラーで使うことができませんでした。

詳細はこちらをご覧ください

https://kkoken.net/windowsusblinux/

そこで、システムカーネルをバージョンアップして、なんとかドライバが使えるようにならないか、と考えました。

そのための備えとして、今回バックアップを行うことにしました。

バックアップについて

システムをバックアップするために、必要なことをまとめてみました。

バックアップ媒体

今はHDD、SSD、フラッシュメモリやといった大容量記憶媒体をUSBなどを使い簡単に接続できるようになっています。

こういった媒体を扱うにあたっては、フォーマットが必要で、OSごとにファイル形式が異なると読みこめない場合があるので、注意が必要です。

その他、一般的に入手できるなかでは単価の安いCDやDVDはなどがあります。

バックアップ形式

バックアップ形式は大きく分けて2つあります。

ファイル単位のバックアップ

単純にファイルをコピーする形式です。古典的かつ一般的なバックアップであり、ファイルの大小や形式にとらわれることがありません。

バックアップの基礎ですので、cronなどを利用しての定期的なバックアップなど、簡単に応用できます。

主にtar、cpやrsyncなどのコマンドを使います。

イメージ単位のバックアップ

ディスクを丸ごとイメージファイルとしてバックアップすることです。これはシステム復旧やシステム環境の複製などによく使われる手段です。

そのため巨大なイメージファイルが生成されることも多く、HDDなどの容量には十分注意する必要があります。

これらはdumpとrestoreやddなどのコマンドを使うことで実現できます。

特にddはファイルシステムに関係なく記憶媒体の配列をそのまま他の記憶媒体に保存および、書き込みができるため、環境の丸ごとの複製を作成するときに重宝します。

バックアップの種類

  • フルバック: 形式を問わず、まるごとバックアップをとることです。ただし、バックアップには時間がかかります。
  • 差分バックアップ: 前回のフルバックアップから現在までの差分をバックアップします。前回のフルバックアップと差分バックアップでデータを復元します。
  • 増分バックアップ: 前回のフルバックアップを0として、1回め、2回め、3回め、と増加した分だけバックアップを取る方法です。フルバックアップ0として1、2、3と「全ての増加分が必要」で、バックアップ時間は短くなるが、バックアップ回数は増えます。また、途中の増加分を紛失した場合復元は不可能になります。

バックアップのコマンド一覧

各コマンドの簡単な説明です。

バックアップコマンド

cp

#ファイル(hogefile)をディレクトリ(path)へコピー
$ cp hogefile path/

tar

#アーカイブディレクトリ(hogedir)からzgip(.gz)、bzip(.bz2)ファイルを作成
$ tar cvzf hogefile.tar.gz hogedir
$ tar cvjf hogefile.tar.bz2 hogedir

#解凍
$ tar xzvf <hogefile.tar.bz2またはhogefile.tar.gz>
$ tar xvf <hogefile.tar.gzもしくはhogefile.tar.bz2>

rsync

#コピー元(hoge1)からコピー先(tege2)へ再帰的にオーナー、グループ、パーミッション、タイムスタンプをそのままコピーする。
$ rsync -a hoge1 tege2

#コピー元(hoge1)とコピー先(tege2)を比較し、追加や更新されたファイル、ディレクトリのみをコピーする。
$ rsync -u hoge1 tege2

#コピーしているファイル名などの情報を表示する。
$ rsync -v hoge1 tege2

#コピー元(hoge1)にないディレクトリやファイルをコピー先(tege2)で削除する。
$ rsync --delete hoge1 tege2

dump (restore)

#/dev/sda1の全ての内容が/mnt/backupUSBにdump-sda1.dumpbackupとして保存される。
$ sudo dump -0uf /mnt/backupUSB/dump-sda1.dumpbackup /dev/sda1

#現在のカレントディレクトリにdump-sda1.dumpbackupの内容が全てレストアされる。
$ sudo restore -rf /<path>/dump-sda1.dumpbackup

dd

#ディスクのデータ配列をそのままイメージファイルとして出力、一度に64k(bytes)転送される。
$ sudo dd if=/dev/sda of=/backup.img bs=64k

growisofs

#ファイルやディレクトリ(hogedir)からDVD-R、DVD±R、DVD+RWといったメディアへデータを書きこむ事ができる。
$ sudo growisofs -Z /dev/dvd -R -J hogedir

#ファイルやディレクトリ(hogedir)からDVDRWへの追加書き込みの場合は -M オプションを使う。
$ sudo growisofs -M /dev/dvd -R -J hogedir

バックアップの定期実行

cron

#設定ファイルをエディタで編集する。
$ crontab -e

#分 時 日 月 曜日 [実行スクリプト]
#例えば「毎時20分に/home/hoge/cron/backup.shを実行したい」場合は
20 * * * * /home/hoge/cron/backup.sh
#となる

バックアップの前準備

まず何を、どこに、どのようにバックアップするかについて、考えます。

今回の場合は、Debian10busterとubuntu20.04デュアルブートのHDDを使っていますので、ubuntuにdebianのバックアップファイルを作成することにしました。

バックアップファイルの作成にはdumpを使うことにしました。

まずは、ubuntuを起動します。

$ apt search ^dump
#dumpがインストールされていなければ
$ sudo apt install dump

debianのあるデバイスをチェックします。

$ lsblk

debianデバイス(/dev/sda6)がマウントしてあればアンマウントします。

$ sudo umount /dev/sda6

バックアップ先のディレクトリを作成します。

$ sudo mkdir -p /backup/debian

ここにバックアップファイルを保管します。

dumpによるバックアップ

まずは、バックアップ対象となるデバイス(/dev/sda6)のサイズを調べます。

$ sudo dump -s /dev/sda6

結果は、約8.7GBほどでしたので、バックアップ出力先(/backup/debian)は500GB以上の空きがあるので大丈夫みたいです。

ファイル(debian10.dump)へ、バックアップします。

$ sudo dump -f /backup/debian/debian10.dump /dev/sda6/

ついでにgzip圧縮ファイル(debian10.dump.gz)もバックアップしてサイズを比べてみました。

$ sudo dump -z -f /backup/debian/debian10_210623.dump.gz /dev/sda6/

結果は、gzip圧縮されたバックアップファイルのサイズが約3.6GBほどで、かなり小さくなりました。

なお、圧縮ファイルは「restore」するときに解凍する必要がないみたいです。(というか解凍できませんでした)

restoreによる復元

一応復元の方法も記載しておきます。

アンマウントしている対象デバイス(/dev/sda6)をext4でフォーマットします。

$ sudo mkfs -t ext4 /dev/sda6

対象デバイス(/dev/sda6)を適当な場所(/mnt/data)マウントして、そちらへ移動します。

$ sudo mount /dev/sda6 /mnt/data
$ cd /mnt/data

復元を実行します。

$ sudo restore -rf /backup/debian/debian10_210623.dump

復元されたかを確認します。

$ ls

まとめ

簡単にですが、バックアップの方法についてまとめてみました。

実際にやったのは「dump」ですが、その他にも気になるバックアップ方法がありましたので、今後は使っていきたいと思います。

また、バックアップデータの復元は、まだ実行していませんので、機会があればできると思います。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)