본문 바로가기

취미, 관심/NAS, Server

[Synology] 시놀로지 백업시 외장하드 자동 켜기(자동 마운트)

시놀로지에는 하이퍼 백업이라는 백업 도구가 있습니다.

백업의 중요성은 아무리 말해도 부족하지 않지만, 사람은 귀찮은걸 싫어하기 마련입니다.

 

외장하드를 하나 연결하고, 백업이 종료되면 자동 마운트 해제를 하는데, 스케줄을 이용해 자동 마운트를 하는 기능이 없습니다.

 

그래서 보통 백업시간 전에 재부팅을 시키거나, 수동으로 뺐다 꽂아주거나, 저처럼 전원제어가 가능한 디스크를 사용하고 스마트플러그와 조합을 하는 방법을 사용하곤 합니다.

 

아래 방법을 사용하면 자동 마운트를 시켜주므로, 백업 스케줄에 맞춰 스크립트를 돌려주기만 하면 됩니다.

 

사전 준비

USB HDD, NAS, SSH사용이 가능할 것(VID, PID 확인용)

 

ssh 환경에서 `lsusb`를 입력, USB로 연결된 Device 목록을 확인합니다. 

lsusb 실행화면

저는 HDD가 두개 있어서, WD Elements 디스크와 TOSHIBA 디스크가 보입니다.

모자이크 처리된 위치의 1234:5678:0123 부분에 영문과 숫자가 보일거에요. 우리는 1234:5678 이 필요합니다. 앞이 VID, 뒤가 PID 입니다.

 

작업 스케줄러 등록

작업 스케줄러에서 사용자 정의 스크립트를 하나 생성하고, 스케줄은 본인의 백업이 시작되기 3~5분전 정도로 맞춰주세요.

 

그리고 작업 설정 하단의 내용에 아래 내용을 넣어줍니다.

USBVID : 위에서 확인한 8자리 중 앞 4자리

USBPID : 위에서 확인한 8자리 중 뒤 4자리

USBNAME : USB의 볼륨이 usbshare1 이라면 USB1, usbshare2라면 USB2를 넣어주면 됩니다.

 

#!/bin/bash

# 아래에 Vender ID와 Product ID를 넣어줍니다. 
USBVID="****"
USBPID="****"
USBNAME="USB1"

MNTPNT=`cat /proc/mounts|grep "/dev/usb"|awk '{print $2}'|sed 's/\/volume//g'|sed 's/\/usbshare//g'|sort`
if [ "${MNTPNT}" != "${USBNAME}" ]; then
    # 마운트 진행
    for DIR in $(find /sys/bus/usb/devices/ -maxdepth 1 -type l); do
        if [[ -f $DIR/idVendor && -f $DIR/idProduct &&
            $(cat $DIR/idVendor) == $USBVID && $(cat $DIR/idProduct) == $USBPID ]]; then
            echo 0 > $DIR/authorized
            sleep 0.5
            echo 1 > $DIR/authorized
            break
        fi
    done
fi

설명

`usbshare1`이 존재하는 경우 이미 마운트 된 상태이므로 작업을 건너뜁니다.

`/sys/bus/usb/device` 에 존재하는 usb 장치 목록을 모두 불러온 후, 위에서 입력한 VID, PID가 맞는지 대조하고, 일치하는 경우 `authorized` 의 값을 0으로 바꾼 후 다시 1로 바꿔줍니다.

장치를 제거하고 다시 연결해준다고 보면 됩니다.

if문이 없는 경우 무조건 재연결을 하게 되므로, 이미 마운트 된 상황이라면 연결이 끊기게 됩니다. 어떠한 작업이 진행중인 경우 오류가 나게 됩니다. 

물론, 사용 용도를 보면 장치가 물려있을 일은 없으므로, 큰 문제는 되지 않을거라 생각합니다.