제가 사용하는 스마트플러그와 웹훅을 이용한 백업시 외장하드 ON/OFF 자동화입니다.
시놀로지의 경우 외장 디스크로 백업 후 마운트 제거 옵션이 있습니다. 백업이 끝나고 마운트 해제가 자동으로 되는건 좋은데, 마운트 해제 후 물리적으로 디스크 제거가 되지 않기때문에 스크립트 하나만 실행하면 마운트 부활을 시킬 수 있는 문제가 있어요.
스마트플러그와 HA를 이용해 나스에서 마운트 체크를 하고, 마운트 해제가 된 경우 전원을 끄는 방법입니다.
백업 전 디스크 켜는거야 그냥 자동화에서 시간 트리거 주고 켜주면 됩니다.
이렇게 하면 백업시간 외에 디스크가 켜져 있는 시간을 줄일 수 있습니다.
당연하게도 외부전원을 사용하는 방식의 외장하드만 해당이 됩니다.
동작은 이렇게 됩니다.
백업 5분쯤 전 스마트플러그 켜기 > 백업 수행 후 마운트 제거 > 10분단위로 마운트체크 후 마운트 되어있지 않으면 스마트플러그 끄기
HA 자동화 트리거에 웹훅이 있습니다.
웹훅 ID를 잘 메모해둡니다.
조건
저는 동작부분에서 if-then으로 설정해줍니다.
조건에서 설정하시려면 그냥 원하는 스마트플러그가 켜져있는지만 체크하면 됩니다.
동작
서비스 호출 - 알림 - 내가 알림받을 폰
원하는 스마트플러그 끄기
나스에서 들어갈 스크립트입니다.
원시적인 코드라서 부끄럽습니다 ㅡㅡ;
HA의 선지자분께서 거의 작성해준 부분을 조금 변형해서 쓰고 있습니다.
저는 하드디스크가 2개가 돌기때문에 USB1, 2가 있습니다.
#!/bin/bash
HA_IP = your_ha_ip
USB1_WEBHOOK = your_webhook_id1
USB2_WEBHOOK = your_webhook_id2
# .usbmntchk파일이 없으면 만든다.
if [ ! -e ~/.usbmntchk/chk ]; then
mkdir -p ~/.usbmntchk
touch ~/.usbmntchk/chk
fi
# 이전 수행 시 마운트 갯수 확인
MNTCHK=`cat ~/.usbmntchk/chk`
# 현재 마운트 갯수
MNTCNT=`cat /proc/mounts|grep "/dev/usb"|awk '{print $2}'|sed 's/\/volume//g'|sed 's/\/usbshare//g'|wc -l`
# 모두 마운트된 상황 제외, 기존 마운트 갯수와 현재 마운트 갯수가 다르면 수행
if [ "${MNTCNT}" != "2" ]; then
#if [ "${MNTCHK}" != "${MNTCNT}" ] && [ "${MNTCNT}" != "2" ]; then
# USB마운트 체크
MNTPNT=`cat /proc/mounts|grep "/dev/usb"|awk '{print $2}'|sed 's/\/volume//g'|sed 's/\/usbshare//g'|sort`
# USB 마운트 체크하고 unmount시 웹훅 날림
# USB 장치는 개별로 존재하므로, 각각 확인함
if [ "${MNTPNT}" != "USB1" ]; then
curl -X POST http://${HA_IP}:8123/api/webhook/${USB1_WEBHOOK}
fi
if [ "${MNTPNT}" != "USB2" ]; then
curl -X POST http://${HA_IP}:8123/api/webhook/${USB2_WEBHOOK}
fi
fi
echo ${MNTCNT} > ~/.usbmntchk/chk
좋은팁 공유 감사합니다 ㅎ
기본적으로 모든 기기의 데이터들이 나스로 백업되고, 나스는 매일 특정시간에 하이퍼백업과 USB Copy를 통해 각각 다른 디스크로 백업이 됩니다.
사실 물리적으로도 격리되는게 옳기는 한데.. 그건 중요데이터를 사무실에 있는 나스에 물려서 백업하는걸로 해결하고 있습니다 ㅋㅋ
cmt alert