見出し画像

CentOS8に入門してみる(バックアップ)

バックアップについて重要な項目についてまとめたいと思います


バックアップの意義

ハードウェアの故障や操作ミス、不正侵入などによって消失したデータを復旧する為にデータを外部に保存しておき、リストアできるようにする為にバックアップを行います


バックアップの種類

完全バックアップ : システム上やファイルシステム上のファイル全てをバックアップ。バックアップに要する時間・バックアップメディアに要求される容量は共に大。復元は容易

差分バックアップ : 前回の完全バックアップから作成・変更の行われたファイルのバックアップを行う。バックアップに要する時間・バックアップメディアに要求される容量は共に小。復元は完全バックアップメディアと差分バックアップメディアの二つが必要

増分バックアップ : 前回のバックアップ(完全、差分、増分いずれも)から作成・変更の行われたファイルのバックアップを行う。バックアップに要する時間・バックアップメディアに要求される容量は共に最小。復元は完全バックアップメディア(あれば差分バックアップメディア)と前回バックアップ以降に行われた全ての増分バックアップメディアが必要



バックアップの方法(xfsdumpコマンド)

まずは下記コマンドをインストールする必要があります

sudo dnf -y install xfsdump

バックアップ対象は以下の/data1(xfs)を対象とします

/dev/sdb1                   xfs       52402180  398404  52003776   1% /data1
/dev/sdb2                   ext4      51342816   53276  48651768   1% /data2

xfsdumpのオプションは以下のようなものがあります

-f : 出力先ファイルを指定

-L : セッションラベルを指定(リストアの時に使用)

-l : バックアップレベルの指定

    0 : 完全バックアップ

    1 ~ 9 : 増分バックアップ

例えば、最初にレベル0を実行し、その後毎週、レベル1を実行すると、レベル0以降に追加、変更があったファイルを毎回全てバックアップするため、対象となるファイルの数が次第に増えてくる(差分バックアップ)。最初にレベル0を指定し、毎週レベルを1つずつ増やして実行すると、1週間分の差分だけをバックアップするため、対象となるファイルの数を抑えることができる(増分バックアップ)。

引用(https://www.atmarkit.co.jp/ait/articles/1804/26/news045.html


実際に実行した結果は下記になります

[vagrant@centuser /]$ sudo xfsdump -l 0 -f /tmp/data1.dump /data1
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.8 (dump format 3.0) - type ^C for status and control
============================= dump label dialog ==============================
please enter label for this dump session (timeout in 300 sec)
-> data1Label
session label entered: "data1Label"
--------------------------------- end dialog ---------------------------------
xfsdump: level 0 dump of centuser:/data1
xfsdump: dump date: Sun Aug 23 05:56:33 2020
xfsdump: session id: 59866a9a-f5ff-4a55-9db7-a10c34c65715
xfsdump: session label: "data1Label"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 25216 bytes
============================= media label dialog =============================
please enter label for media in drive 0 (timeout in 300 sec)
-> data1Label
media label entered: "data1Label"
--------------------------------- end dialog ---------------------------------
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 22216 bytes
xfsdump: dump size (non-dir files) : 544 bytes
xfsdump: dump complete: 47 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /tmp/data1.dump OK (success)
xfsdump: Dump Status: SUCCESS

ダンプファイルも出力されているようです

[vagrant@centuser /]$ ls -l /tmp/data1.dump
-rw-r--r--. 1 root root 22216 Aug 23 05:57 /tmp/data1.dump

次にファイルを一つ増やして差分バックアップをしてみたいと思います

[vagrant@centuser /]$ cd /data1
[vagrant@centuser data1]$ ls -l
total 4
-rw-rw-r--. 1 vagrant vagrant 15 Aug 23 04:20 data1.txt
[vagrant@centuser data1]$ touch data1_lebel1.txt
[vagrant@centuser data1]$ ls -l
total 4
-rw-rw-r--. 1 vagrant vagrant 15 Aug 23 04:20 data1.txt
-rw-rw-r--. 1 vagrant vagrant  0 Aug 23 06:01 data1_lebel1.txt

元々data1.txtを作っていましたが、data1_lebel1.txtというファイルを増やしました

その上で差分バックアップ(xfsdumpコマンドのレベル1)を実行します

[vagrant@centuser /]$ sudo xfsdump -l 1 -f /tmp/data1_lebel1.dump /data1
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.8 (dump format 3.0) - type ^C for status and control
============================= dump label dialog ==============================
please enter label for this dump session (timeout in 300 sec)
-> data1Lebel1Label
session label entered: "data1Lebel1Label"
--------------------------------- end dialog ---------------------------------
xfsdump: level 1 incremental dump of centuser:/data1 based on level 0 dump begun Sun Aug 23 05:56:33 2020
xfsdump: dump date: Sun Aug 23 06:04:16 2020
xfsdump: session id: 512d1d97-edaf-4b23-b14a-df3a187505f4
xfsdump: session label: "data1Lebel1Label"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 21120 bytes
============================= media label dialog =============================
please enter label for media in drive 0 (timeout in 300 sec)
-> data1Lebel1Label
media label entered: "data1Lebel1Label"
--------------------------------- end dialog ---------------------------------
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 21712 bytes
xfsdump: dump size (non-dir files) : 0 bytes
xfsdump: dump complete: 31 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /tmp/data1_lebel1.dump OK (success)
xfsdump: Dump Status: SUCCESS

成功したようなのでダンプファイルを確認します

[vagrant@centuser /]$ ls -l /tmp/data*
-rw-r--r--. 1 root root 22216 Aug 23 05:57 /tmp/data1.dump
-rw-r--r--. 1 root root 21712 Aug 23 06:04 /tmp/data1_lebel1.dump

上手くいっているようです!


バックアップの方法(dumpコマンド)

まずは下記コマンドをインストールする必要があります

sudo dnf -y install dump

バックアップ対象は以下の/data2(ext4)を対象とします

/dev/sdb1                   xfs       52402180  398404  52003776   1% /data1
/dev/sdb2                   ext4      51342816   53276  48651768   1% /data2

dumpのオプションは以下のようなものがあります

-f : ダンプファイル出力先を指定

-u : バックアップ実施時に/var/lib/dumpdatesを更新する

0-9 : バックアップレベル(レベル内容はxfsdumpと同様)


実際にバックアップを行っていきたいと思います

[vagrant@centuser /]$ sudo dump -0uf /tmp/data2.dump /data2
 DUMP: Date of this level 0 dump: Sun Aug 23 06:24:42 2020
 DUMP: Dumping /dev/sdb2 (/data2) to /tmp/data2.dump
 DUMP: Label: none
 DUMP: Writing 10 Kilobyte records
 DUMP: mapping (Pass I) [regular files]
 DUMP: mapping (Pass II) [directories]
 DUMP: estimated 832 blocks.
 DUMP: Volume 1 started with block 1 at: Sun Aug 23 06:24:42 2020
 DUMP: dumping (Pass III) [directories]
 DUMP: dumping (Pass IV) [regular files]
 DUMP: Closing /tmp/data2.dump
 DUMP: Volume 1 completed at: Sun Aug 23 06:24:42 2020
 DUMP: Volume 1 820 blocks (0.80MB)
 DUMP: 820 blocks (0.80MB) on 1 volume(s)
 DUMP: finished in less than a second
 DUMP: Date of this level 0 dump: Sun Aug 23 06:24:42 2020
 DUMP: Date this dump completed:  Sun Aug 23 06:24:42 2020
 DUMP: Average transfer rate: 0 kB/s
 DUMP: DUMP IS DONE

成功したようなのでダンプファイルの確認を行います

[vagrant@centuser /]$ ls -l /tmp/data2*
-rw-r--r--. 1 root root 839680 Aug 23 06:24 /tmp/data2.dump

ダンプファイルも確認できました

xfsdumpの時と同様に差分バックアップも行いたいと思います

[vagrant@centuser /]$ cd /data2
[vagrant@centuser data2]$ ls -l
total 20
-rw-rw-r--. 1 vagrant vagrant    15 Aug 23 04:21 data2.txt
drwx------. 2 root    root    16384 Aug 23 04:10 lost+found
[vagrant@centuser data2]$ touch data2_lebel1.txt
[vagrant@centuser data2]$ ls -l
total 20
-rw-rw-r--. 1 vagrant vagrant    15 Aug 23 04:21 data2.txt
-rw-rw-r--. 1 vagrant vagrant     0 Aug 23 06:27 data2_lebel1.txt
drwx------. 2 root    root    16384 Aug 23 04:10 lost+found

元々data2.txtを作っていましたが、そこにdata2_lebel1.txtが加わりました

差分バックアップをとります

[vagrant@centuser /]$ sudo dump -1uf /tmp/data2_label.dump /data2
 DUMP: Date of this level 1 dump: Sun Aug 23 06:30:00 2020
 DUMP: Date of last level 0 dump: Sun Aug 23 06:24:42 2020
 DUMP: Dumping /dev/sdb2 (/data2) to /tmp/data2_label.dump
 DUMP: Label: none
 DUMP: Writing 10 Kilobyte records
 DUMP: mapping (Pass I) [regular files]
 DUMP: mapping (Pass II) [directories]
 DUMP: estimated 819 blocks.
 DUMP: Volume 1 started with block 1 at: Sun Aug 23 06:30:00 2020
 DUMP: dumping (Pass III) [directories]
 DUMP: dumping (Pass IV) [regular files]
 DUMP: Closing /tmp/data2_label.dump
 DUMP: Volume 1 completed at: Sun Aug 23 06:30:00 2020
 DUMP: Volume 1 820 blocks (0.80MB)
 DUMP: 820 blocks (0.80MB) on 1 volume(s)
 DUMP: finished in less than a second
 DUMP: Date of this level 1 dump: Sun Aug 23 06:30:00 2020
 DUMP: Date this dump completed:  Sun Aug 23 06:30:00 2020
 DUMP: Average transfer rate: 0 kB/s
 DUMP: DUMP IS DONE

成功したようなので、ダンプファイルの確認をします

[vagrant@centuser /]$ ls -l /tmp/data2*
-rw-r--r--. 1 root root 839680 Aug 23 06:24 /tmp/data2.dump
-rw-r--r--. 1 root root 839680 Aug 23 06:30 /tmp/data2_label.dump

大丈夫そうですね!


リストアの方法

リストアにはxfsrestoreコマンドとrestoreコマンドを使用します

(restoreの実行はxfsrestoreとそこまで変わらないので省略します)

xfsrestoreを実行していきます

[vagrant@centuser /]$ sudo xfsrestore -r -f /tmp/data1.dump /home/vagrant/data1restore/
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.8 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description:
xfsrestore: hostname: centuser
xfsrestore: mount point: /data1
xfsrestore: volume: /dev/sdb1
xfsrestore: session time: Sun Aug 23 05:56:33 2020
xfsrestore: level: 0
xfsrestore: session label: "data1Label"
xfsrestore: media label: "data1Label"
xfsrestore: file system id: faf79782-5405-4def-ae2b-bcdd57ef061a
xfsrestore: session id: 59866a9a-f5ff-4a55-9db7-a10c34c65715
xfsrestore: media id: df1b2127-517b-40eb-b922-a8bbea089036
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 1 directories and 1 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /tmp/data1.dump OK (success)
xfsrestore: Restore Status: SUCCESS

成功しました

リストアは/home/vagrant/data1restoreという場所に行うように設定しているので確認します

[vagrant@centuser /]$ ls -l /home/vagrant/data1restore/
total 4
-rw-rw-r--. 1 vagrant vagrant 15 Aug 23 04:20 data1.txt
drwx------. 2 root    root    78 Aug 23 06:42 xfsrestorehousekeepingdir

data1.txtが復元されています

そしてxfsrestorehousekeepingdirというフォルダが生成されていることを確認できますが、これはxfsrestoreした際に-rオプションをつけたことによって生成されたものです

差分・増分のリストアに必要なので残しておく必要があります

差分バックアップのリストアも行っていきます

[vagrant@centuser /]$ sudo xfsrestore -r -f /tmp/data1_lebel1.dump /home/vagrant/data1restore/
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.8 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description:
xfsrestore: hostname: centuser
xfsrestore: mount point: /data1
xfsrestore: volume: /dev/sdb1
xfsrestore: session time: Sun Aug 23 06:04:16 2020
xfsrestore: level: 1
xfsrestore: session label: "data1Lebel1Label"
xfsrestore: media label: "data1Lebel1Label"
xfsrestore: file system id: faf79782-5405-4def-ae2b-bcdd57ef061a
xfsrestore: session id: 512d1d97-edaf-4b23-b14a-df3a187505f4
xfsrestore: media id: 4bd3dfd4-2e53-429c-9ad7-3b2b651667f1
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 1 directories and 2 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /tmp/data1_lebel1.dump OK (success)
xfsrestore: Restore Status: SUCCESS

成功したようなので、リストアしたファイルを確認します

[vagrant@centuser /]$ ls -l /home/vagrant/data1restore/
total 4
-rw-rw-r--. 1 vagrant vagrant 15 Aug 23 04:20 data1.txt
-rw-rw-r--. 1 vagrant vagrant  0 Aug 23 06:01 data1_lebel1.txt
drwx------. 2 root    root    78 Aug 23 06:51 xfsrestorehousekeepingdir

data1_label.txtがリストアされていることが確認できました!

(全てのリストアが終了したのでxfsrestorehousekeepingdirは削除しても大丈夫です)


ディレクトリ単位でのバックアップ(tarコマンド)

仕事でもかなり使っている記憶があるのがtarコマンドです

[vagrant@centuser /]$ sudo tar -czf tmp/data1.tar.gz data1
[vagrant@centuser /]$ ls -l /tmp/data1*
-rw-r--r--. 1 root root 22216 Aug 23 05:57 /tmp/data1.dump
-rw-r--r--. 1 root root   196 Aug 23 07:04 /tmp/data1.tar.gz
-rw-r--r--. 1 root root 21712 Aug 23 06:04 /tmp/data1_lebel1.dump

tar.gzファイルが生成されてます

今度はこれを展開していきます

[vagrant@centuser data1restore]$ pwd
/home/vagrant/data1restore
[vagrant@centuser data1restore]$ ls -l
total 0
[vagrant@centuser data1restore]$ sudo tar -xzf /tmp/data1.tar.gz
[vagrant@centuser data1restore]$ ls -l
total 0
drwxr-xr-x. 2 vagrant vagrant 47 Aug 23 06:01 data1
[vagrant@centuser data1restore]$ ls -l data1/
total 4
-rw-rw-r--. 1 vagrant vagrant 15 Aug 23 04:20 data1.txt
-rw-rw-r--. 1 vagrant vagrant  0 Aug 23 06:01 data1_lebel1.txt

/home/vagrant/data1restoreの中身は予め消しておきました

そこに先ほどのtar.gzを展開し、ファイルの存在を確認しています


まとめ

以上がバックアップの説明となります

バックアップには他にもネットワーク経由での方法もあるらしいのですが、

それをまとめるのはsshとか学習してからにしたいと思います




この記事が気に入ったらサポートをしてみませんか?