自作のファイルサーバー(NAS)をLinuxで作成&もう一つのHDDに定期的にバックアップさせて冗長性確保

#きっかけ
・研究室のファイルサーバーがクラッシュしてしまった
　僕「どうにもならんなぁ。一から作り直してみるか」
・どうせ作り直すなら良いものを
　

#用意したもの
・Linux PC (僕の環境では Vine Linux)
・外付けHDD等ローカル内で共有したいドライブ×2


#目指したもの
こんな感じのものを目指してみた
・メインのHDDはSambaでファイル共有
・バックアップ用のHDDは週に一度メインのHDDと同期することでバックアップ(gmail等で同期が正常に終了したか通知)
・もちろん同期は自動で

<img width="600" alt="server_hdd_demo.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513034/310ef0c1-4b81-acc3-6cf9-b5cf857f2bab.jpeg">

メインの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
```

<br/>
外付けドライブを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`

<br/>
先にマウント先を作っておく
(権限に注意 あとでchmodで変更はできるけど)

```
[root@hoge ~]$ mkdir /home/username/mainhdd/
[root@hoge ~]$ mkdir /home/username/backuphdd/
```

<br/>
`/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
```
<br/>
sanbaの設定ファイルを開く

```/etc/samba/smb.conf

↓以下を追記

[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
```
<br/>
デーモンを起動させる

```
[root@hoge ~]# /etc/rc.d/init.d/smb start
[root@hoge ~]# /etc/rc.d/init.d/nmb start
```

これでローカル内のクライアントからアクセスできる

##rsyncを使ってメインHDDからバックアップHDDに同期(バックアップ)

バックアップするためのスクリプトを作成する

```backup.sh
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`で同期する
・同期が正常に終了したか失敗したか判断し、メールで通知する


<br/>
`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`を自動的に実行するようになっている

<br/>
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


有用な情報ありがとうございました