#きっかけ
・研究室のファイルサーバーがクラッシュしてしまった
僕「どうにもならんなぁ。一から作り直してみるか」
・どうせ作り直すなら良いものを
#用意したもの
・Linux PC (僕の環境では Vine Linux)
・外付けHDD等ローカル内で共有したいドライブ×2
#目指したもの
こんな感じのものを目指してみた
・メインのHDDはSambaでファイル共有
・バックアップ用のHDDは週に一度メインのHDDと同期することでバックアップ(gmail等で同期が正常に終了したか通知)
・もちろん同期は自動で
メインのHDDが寿命かなんかでクラッシュした時はバックアップ用のHDDからデータ救出できるはず
(もっとスマートなやり方があったら教えてください)
#手順
##自動マウント(/etc/fstab
)の設定
外付けドライブをext4でフォーマットする
ここではsdb1をメインHDD、sdc1をバックアップhddとする
※速度的にはext4が良いらしいがWindows PCでもマウントしたい場合はFAT系が良いかも
[root@hoge ~]# mkfs -t ext4 /dev/sdb1
[root@hoge ~]# mkfs -t ext4 /dev/sdc1
外付けドライブをLinux PCに接続し、`blkid`でUUIDを確認する
[root@hoge ~]# blukid
/dev/sda1: LABEL="/boot" UUID="a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1" TYPE="ext4"
/dev/sda2: UUID="a2a2a2-a2a2-a2a2-a2a2-a2a2-a2a2-a2a2a2" TYPE="LVM2_member"
/dev/mapper/VolGroup00-LogVol00: UUID="11111111-2222-3333-4444-555555555555" TYPE="ext4"
/dev/mapper/VolGroup00-LogVol01: UUID="swapswap-swap-swap-swap-swapswap" TYPE="swap"
/dev/sdb1: UUID="b1b1b1b1-b1b1-b1b1-b1b1-b1b1b1b1b1b1" TYPE="ext4"
/dev/sdc1: UUID="c1c1c1c1-c1c1-c1c1-c1c1-c1c1c1c1c1c1" TYPE="ext4"
sdb1(メインHDD)のUUIDはb1b1b1b1-b1b1-b1b1-b1b1-b1b1b1b1b1b1
sdc1(バックアップHDD)のUUIDはc1c1c1c1-c1c1-c1c1-c1c1-c1c1c1c1c1c1
先にマウント先を作っておく (権限に注意 あとでchmodで変更はできるけど)
[root@hoge ~]$ mkdir /home/username/mainhdd/
[root@hoge ~]$ mkdir /home/username/backuphdd/
`/etc/fstab`を編集する
(/etc/fstab)
↓デフォルトではこんな感じの記述
/dev/VolGroup00/LogVol00 / ext4 defaults 1 1
LABEL=/boot /boot ext4 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
none /dev/shm tmpfs defaults 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults,sw 0 0
↓以下を追記
UUID=b1b1b1b1-b1b1-b1b1-b1b1-b1b1b1b1b1b1 /home/username/mainhdd/ ext4 users,rw,defaults,nofail 0 0
UUID=c1c1c1c1-c1c1-c1c1-c1c1-c1c1c1c1c1c1 /home/username/backuphdd/ ext4 users,rw,defaults,nofail 0 0
アンマウント後に再びマウントすると設定したディレクトリにマウントされる
##ファイル共有システムデーモン(Samba)のインストールと設定
sambaをインストール(環境によっては元からインストールされてるかも)
[root@hoge ~]# apt update
[root@hoge ~]# apt install samba
sanbaの設定ファイルを開く
↓以下を追記
[guest]
comment = file server
path = /home/username/mainhdd
browsable = yes
writable = yes
read only = no
force create mode = 0777
force directory mode = 0777
#force group = sambashare
デーモンを起動させる
[root@hoge ~]# /etc/rc.d/init.d/smb start
[root@hoge ~]# /etc/rc.d/init.d/nmb start
これでローカル内のクライアントからアクセスできる
##rsyncを使ってメインHDDからバックアップHDDに同期(バックアップ)
バックアップするためのスクリプトを作成する
a=`df -h |grep -o /home/username/mainhdd`
b=`df -h |grep -o /home/username/backuphdd`
if [ $a = "/home/username/mainhdd" -a $b = "/home/username/backuphdd" ]; then
flag=1
rsync -avzu /home/username/mainhdd/ /home/username/backuphdd --log-file=/home/username/backup.log
else
flag=0
fi
stat=$?
if [ $stat = 0 -a $flag = 1 ]; then
echo "研究室内サーバーの定期バックアップが正常に完了しました。(終了ステータス0)" | mail -s "自動バックップ完了" mail-address@hoge.jp
else
echo "研究室内サーバーの定期バックアップが失敗しました(終了ステータス0以外)。原因を確認してください" | mail -s "自動バックップ失敗" mail-address@hoge.jp
fi
〜スクリプトの簡単な説明〜
・df
で二つのHDDがマウントされているか確認し、rsync
で同期する
・同期が正常に終了したか失敗したか判断し、メールで通知する
`backup.sh`の権限を変更する
[root@hoge ~]# chmod +x backup.sh
##cronによる定期バックアップの設定
crontab -e
でcronの設定ファイルを編集する
分 時 日 月 曜日 (↓を追記)
00 17 * * 5 /home/username/backup.sh
この設定では毎週金曜日17時00分に/home/username/backup.sh
を自動的に実行するようになっている
cronを再起動する
再起動
[root@hoge ~]# /etc/init.d/cron restart
ステータス確認
[root@hoge ~]# /etc/init.d/cron status
これで週に一度自動的にバックアップされるようになる
#参考にしたサイト
・Samba関連
http://bamboo.chobi.net/linux/vinelinux/vinelinux-4.html
・cron関連
https://k99-tech.com/blog/archives/1141
有用な情報ありがとうございました