카테고리 없음

nextcloud 자동 백업

주술쟁이 2024. 8. 26. 20:11

자동 백업을 하기 위한 전략을 아래와 같이 만들었다.

  • 유저가 파일을 올림과 동시에 백업.
  • 파일이 변경한 경우에 이력 파일과 원본 파일 모두 백업.
  • 삭제 폴더는 백업에서 제외.
  • 기타 환경 설정 및 임시 파일과 폴더는 제거.

위 조건을 만족하기 위해서는 아래 파일과 폴더들을 제외 시켜야 한다.

  • .part 파일(파일 다운로드 중일 때 생성되는 임시 파일)
  • appdata_* 폴더(계정 생성과 같이 nextcloud 앱이 사용하는 임시 폴더)
  • file_trashbin 폴더(휴지통 폴더)
  • cashe 폴더(각 유저별 캐쉬 폴더)
  • uploads 폴더(용량이 큰 파일을 저장할 때 사용하는 임시 폴더)
  • audit.log nextcloud.log : nextcloud 접속 로그 및 기타 각종 로그가 기록되는 파일

위 파일과 폴더를 제외하고 파일 생성을 모니터링 하기 위해 inotifywait 를 설치하고 아래와 같이 sh를 만들었다.

#!/bin/bash

# 감시할 Nextcloud 데이터 디렉토리
WATCH_DIR="/var/www/html/nextcloud/data"

# inotifywait 사용하여 파일 추가 시 백업 스크립트 실행
inotifywait -m -r --exclude '.*\.part$|appdata_.*|files_trashbin/.*|cache/.*|.*/uploads/.*|audit\.log$|nextcloud\.log$' -e close_write -e moved_to --format '%w%f' "$WATCH_DIR" | while read FILE
do
    SRC_PATH=$(dirname "$FILE")
    SRC_FILE=$(basename "$FILE")

    /usr/local/bin/nextcloud_file_backup.sh "$SRC_PATH" "$SRC_FILE"
done

위 sh를 watch_nextcloud_data.sh 파일명으로 /usr/local/bin에 저장한다.

 

nextcloud_file_backup.sh 파일을 하나 더 생성한다.

#!/bin/bash

# 백업 경로 설정
BACKUP_DIR="/data/backup"

# 파일이 추가된 경로와 파일명을 인자로 받음
SRC_PATH="$1"
SRC_FILE="$2"
MODIFIED_PATH=$(echo "$SRC_PATH" | sed 's|/var/www/html/nextcloud/data/||')

# 백업 디렉토리 구조 생성 (원본과 동일한 경로로)
mkdir -p "$BACKUP_DIR/$MODIFIED_PATH"

# 파일 복사
cp "$SRC_PATH/$SRC_FILE" "$BACKUP_DIR/$MODIFIED_PATH/"

# 로그 기록
echo "[$(date)] $SRC_FILE backed up to $BACKUP_DIR/$MODIFIED_PATH" >> /var/log/nextcloud_backup.log

위 sh은 실제로 유저의 파일을 백업하기 위한 sh이다. 임시로 로컬의 /data/backup 폴더에 백업한다. 필요시 리모트의 다른 경로에 백업하길 권장한다.

crontab에 등록하여 위 sh가 항상 실행이 되도록 설정한다.

> crontab -e

#아래 txt 추가
@reboot /usr/local/bin/watch_nextcloud_data.sh &