今回も自宅サーバは中古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全体バックアップ」は成功です。