今回も自宅サーバは中古PC。・・・なので、HDD故障の対策もしておきます。

■ Mondo Rescue をインストール
CentOS7 でも、標準では Mondo Rescue のリポジトリを持っていません。

Mondo Rescueのダウンロードサイトに yum のリポジトリ設定ファイルが用意されているので、それをダウンロードします。

# cd /etc/yum.repos.d/
# wget ftp://ftp.mondorescue.org/rhel/7/x86_64/mondorescue.repo
# cd


Mondo Rescue をインストール

# yum -y install mondo



バックアップ用ディレクトリ、テンポラリ(作業用)ディレクトリ、スクラッチ(isoファイル作成作業用)ディレクトリを作成します。・・・dfコマンドで確認したところ、空き容量が/home以下が多かったので・・・。

# mkdir /home/satoh163/mondo
# mkdir /home/satoh163/mondo/centos_backup
# mkdir /home/satoh163/mondo/tmp
# mkdir /home/satoh163/mondo/scratch



キャッシュが使えるよう、以下を実行しておく。

# yum -y update
# yum  makecache



「メタデータのキャッシュを作成しました」と表示。
ネット情報から、mindi の設定ファイルにも記述を追加してみました。

# nano -K /etc/mindi/mindi.conf

以下の2行を追加。

EXTRA_SPACE=240000
BOOT_SIZE=100000


バックアップ処理を実行

# mondoarchive -Oi -d /home/satoh163/mondo/centos_backup -E '/home/satoh163/mondo' -s 4480m -S /home/satoh163/mondo/scratch -T /home/satoh163/mondo/tmp -p '20161223' -9 -N -g



「-O」はバックアップ実行、「-i」はISOイメージファイルを作成、「-d」は出力先ディレクトリ指定、「-E」は除外ディレクトリ指定、「-s」はメディアサイズ指定、「-S」はスクラッチディレクトリ指定、「-T」はテンポラリディレクトリ指定、「-p」はバックアップファイル名を指定、「-9」は圧縮レベル、「-N」はネットワークファイルシステムの除外指定、「-g」は進捗状況のGUI表示です。
「-g」を指定したので進捗バーが表示されます。

今回は、ターミナルソフト「Tera Term」(on Windows)で実行中。

ちなみに、mondoarchive コマンドをオプションなしで実行すると、ウィザード形式のGUIの画面で、オプションを指定することもできます。

およそ1時間ほどかかりました。指定した場所(/home/satoh163/mondo/centos_backup)にISOファイルが作成されました。指定したファイル名の後に「-」と連番(指定メディアサイズ「-s」を超えるとファイルが増える)が付加され、拡張子「.iso」が付いたファイル名となるようです。上記の指定だと「20161223-1.iso」が生成されます。


■バックアップ先をUSB接続のHDDに変更
HDDの故障に備えてのバックアップなので、同一HDD内にファイルを置いては意味がありません。

都度、DVDに焼くのも面倒なので、USB接続した外付けHDDを、上記ディレクトリ(/home/satoh163/mondo/centos_backup)にシンボリック・リンクして、保存したいと思います。

ちょうど、USB接続の1TBの2.5インチHDD(TOSHIBA製)がありました。
ケースがUSB2.0なのでスピードは望めません。・・・それ以前に、中古PCにUSB3.0ポートが無いので・・・。
サーバ機を一旦シャットダウンし、HDDをUSB接続したら、再起動し、# fdisk -l で確認します。

# fdisk -l

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x00011af8

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200  1953523711   975712256   8e  Linux LVM

Disk /dev/mapper/cl_centos-root: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト


Disk /dev/mapper/cl_centos-swap: 4160 MB, 4160749568 bytes, 8126464 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト


Disk /dev/sdf: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト


Disk /dev/mapper/cl_centos-home: 941.3 GB, 941273120768 bytes, 1838424064 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト

# 

起動時にHDDが認識されていれば良いのですが・・・。
/dev/sdf が1000.2GB となっており、それらしい。
念のために、SMARTコマンドで、HDDの情報を表示してみます。

# smartctl -i /dev/sdf
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-514.2.2.el7.x86_64] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Toshiba 2.5" HDD MQ01ABD...
Device Model:     TOSHIBA MQ01ABD100
Serial Number:    13I5CJ3QT
LU WWN Device Id: 5 000039 4835045bb
Firmware Version: AX001A
User Capacity:    1,000,204,886,016 bytes [1.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    5400 rpm
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS (minor revision not indicated)
SATA Version is:  SATA 2.6, 3.0 Gb/s (current: 1.5 Gb/s)
Local Time is:    Sat Dec 24 18:45:58 2016 JST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

「Device Model : TOSHIBA MQ01ABD100」となっているので間違いないようです。
# fdsik /dev/sdf で一旦パーティションを削除し、再度パーティションを追加、その後テーブルを書き込みます。(詳細省略)
その後、# mkfs.ext4 /dev/sdf を実行し、ext4 でフォーマットしました。

# fdisk /dev/sdf
# mkfs.ext4 /dev/sdf

マウント用ディレクトリを作成し、マウントします。(HDDを取り外す場合は、# umount /dev/sdf してから)

# mkdir /mnt/usb_hdd
# mount /dev/sdf /mnt/usb_hdd

先にバックアップしたISOファイルをUSB接続HDDへ移動してみます。

# mv /home/satoh163/mondo/centos_backup/2016* /mnt/usb_hdd/
# ls -la /home/satoh163/mondo/centos_backup/
# ls -la /mnt/usb_hdd

マウントしたディレクトリをシンボリックリンクします。(リンク削除は # unlink で)

# rm -r /home/satoh163/mondo/centos_backup
# ln -s /mnt/usb_hdd /home/satoh163/mondo/centos_backup

また、再起動したときに自動的にマウントしてくれるように設定しておきます。

# nano -K /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Dec 15 16:48:54 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/cl_centos-root /                       xfs     defaults        0 0
UUID=4f8c910d-1724-401b-8cad-169b59119976 /boot                   xfs     defaults        0 0
/dev/mapper/cl_centos-home /home                   xfs     defaults        0 0
/dev/mapper/cl_centos-swap swap                    swap    defaults        0 0
#
/dev/sdf                   /mnt/usb_hdd            ext4     nofail          0 0

「nofail」にしておくと、もしサーバ起動時にUSB-HDDが抜かれていても、騒ぎ立てることなく、ブート処理を続けてくれます。

試しに、reboot し、再起動後に自動マウントされているか、ディスクの使用量は何%か、ファイルが表示されるか確認しておきます。

# mount | grep /dev/sdf
/dev/sdf on /mnt/usb_hdd type ext4 (rw,relatime,data=ordered)
# 
# df -h /dev/sdf
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/sdf         917G  4.0G  867G    1% /mnt/usb_hdd
# 
# ls -la /mnt/usb_hdd
合計 4017116
drwxr-xr-x  3 root root       4096 12月 23 21:30 .
drwxr-xr-x. 4 root root         34 12月 23 20:01 ..
-rw-r--r--  1 root root 4113502208 12月 23 16:45 20161223-1.iso
drwx------  2 root root      16384 12月 23 19:58 lost+found
# 

先ほど、移動したISOファイルが見えたらOKです。

これで、Mondo Rescue が出力するバックアップファイルの保存先が、USB接続のHDDになりました。

万が一、HDDがクラッシュしても、バックアップファイルからリカバリー用のDVDを作成しリストアすることで、OS、Apache、vsftpd、MariaDB、Adminer、WordPress、Postfix、Dovecot、Firewalld、Bind などの再導入・再設定をしなくても済むはずです。

ただし、新規HDDにリストアした際は、UUIDの変更が必要になるらしい。・・・まだ、試していません。・・・できれば試したくない。


■ 定期バックアップの設定
バックアップ作業を毎回Tera Termで接続後にコマンド実行で行うのは面倒です。そこで、バックアップ処理を定期的に自動実行させるため、クーロン(crond)を利用したいと思います。実作業は、crontab を使用して cronjob を登録します。

まずは、前述の mondoarchive コマンドとオプションの指定をシェルスクリプトファイルにおこします。

# mkdir /scripts
# nano -K /scripts/do_backup.sh
#!/bin/bash
today=$(date +%Y%m%d)
/usr/sbin/mondoarchive -Oi -d /home/satoh163/mondo/centos_backup -E '/home/satoh163/mondo' -s 4480m -S /home/satoh163/mondo/scratch -T /home/satoh163/mondo/tmp -p ${today} -9 -N
    ファイル名(オプション「-p」)は、${today}で実行時の日付を取り入れるようにしました。
    mondoarchiveはフルパスで指定する必要がありました。
    オプション「-g」は削除し、GUIではなく標準出力に結果を表示させます。

実行権を与えます。

# chmod +x /scripts/do_backup.sh


    (ちょっくら脱線)
    次の「crontab -e」を実行する前に、デフォルトのエディタを「vi」から「nano」に変更しておきます。・・・必要なければ読み飛ばして下さい。

    # nano -K ~/.bashrc
    

    以下の2行を最下部にでも追加。

    EDITOR="/usr/bin/nano -K"
    export EDITOR
    

    オプション「 -K」はテンキーで数字を入力可能とする為。
    一旦、ログアウトし、ログインすると読み込まれます。
    すぐに反映させたいなら以下を実行します。

    # source ~/.bashrc
    



クーロンタブ(crontab)にジョブを追加します。

# crontab -e

エディタが起動するので、以下の2行を追加します。

MAILTO=info@a21-hp.com
00 03 * * * /scripts/do_backup.sh

保存・終了すればジョブ(cronjob)が登録されます。
確認する場合は、crontab -l を実行。

# crontab -l
MAILTO=info@a21-hp.com
00 03 * * * /scripts/do_backup.sh
#

1行目は、メールアドレスの指定です。次行以降のスクリプトの実行結果(標準出力)を、スクリプト実行後に送信します。
2行目は、最初の「00」が分、「03」が時刻、次の「*」が日付、次の「*」が月、次の「*」が曜日です。最後に実行させるスクリプト名を記述します。今回は、毎日深夜3:00にバックアップを作成する設定です。

指定時刻に実行された、スクリプトの結果(標準出力の内容)がメールで届いていました。

保存先を見ると「20161224-1.iso」が存在していました。

ファイルサイズは約4GB。

1TBのUSB-HDDなので、今後の肥大化を見込んでも、200日分程はいけるかな。

とりあえず、「HDD全体バックアップ」は成功です。