자작의 파일 서버(NAS)를 Linux로 작성&다른 HDD에 정기적으로 백업시켜 중복성 확보

계기



· 실험실 파일 서버가 충돌했습니다.
 나「아무래도 안돼. 처음부터 다시 만들어볼까」
· 어차피 다시 만든다면 좋은 것을
 

준비한 것



· 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-b1b1b1b1b1b1sdc1 (백업 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 설정 파일 열기

/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

데몬 시작
[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 "自動バックップ完了" [email protected]
else
echo "研究室内サーバーの定期バックアップが失敗しました(終了ステータス0以外)。原因を確認してください" | mail -s "自動バックップ失敗" [email protected]
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 관련
ht tp // 바 m 보오. 잠깐. 네 t/ぃぬx/ゔぃねぃぬx/ゃぃねぃぬxー4. HTML

· cron 관련
htps : // k99 - ch. 코 m/bぉg/아 rゔぇs/1141

유용한 정보 감사합니다.

좋은 웹페이지 즐겨찾기