포터블기기 강좌


저는 얼마전 드라이브 순서를 바꿔놓은지도 모르고 dd를 하는 바람에 디스크 하나를 다 날린 적이 있네요

저는 리눅스여러 배포판들를 테스트해보면서 쓰는데 간단한 백업툴을 만들어 쓰면 아주 편리합니다.

usb스틱도 필요없이 구글드라이브로 한방에 유저화일들을 옮길수 있어요.


사실 민트리눅스에는 좋은 백업툴이 내장되어 있어요. 그리고 구글드라이브를 붙일수도 있어서 어렵지 않게 백업가능한데

자동으로는 안되는거 같습니다. 그래서 자동으로 만들어봤네요.


일단 파티션을 전체를 백업 하는 경우는 너무나 커지고 리눅스 시스템설치는 매우 쉽기에 그럴 필요가 없네요.

민트나 다른 리눅스에도 요새는 timeshift라는 어플도 들어가 있어서 시스템복구가 쉽습니다.

따라서 홈디렉토리만 백업합니다.


* 주의점은 구글드라이브는 하루에 전송량이 있다는점! 따라서 백업본 크기가 적게하는 것이 좋습니다.



insync라는것도 잠깐 썼는데 실시간 싱크하는건 오히려 걸리적거려서 번잡하더라고요.

그냥 간단히 tar로 백업하는게 전 편한거 같습니다.


먼저 gdrive 라는 매우 유용한 cli커맨드툴이 필요한데요  깃헙주소는:

https://github.com/prasmussen/gdrive



gdrive upload  화일

gdrive download 화일

하는 식으로 씁니다.


역시 크론잡으로 만들어놓으면 아무생각없이 쓰기 좋습니다.

쓰는 방법은 아래 화일을 ggd라는 파일로 실행권한 줘서 저장한다음


백업

ggd backup 

복구

ggd restore

구글드라이브에 저장된 백업본 보기

ggd list

구글드라이브에 저장된 백업본 삭제

ggd clear

설정된 조건에 맞춰 자동으로~

ggd auto


자동으로 설정된 시간은 이틀간격으로 2개의 백업본을 저장하게 되어있습니다.

아래보심 500mb이상은 백업하지 않게 되어있고

여러가지 숨김화일중 트래쉬폴더, 다운로드 폴더등 백업필요없다고 생각되는것들이 exclude옵션으로 해놨습니다.

편한대로 고치심 될거에요.


어플리케이션 설정등을 백업안하려면

.local 폴더 자체를 exclude하심 되고요.


그냥 수동으로 써도 되고 자동으로 하려면,

역시 크론잡에서 예를 들면,

 

매일 새벽3시에 백업체크하려면 (ggd자체의 설정사용),

0 3 * * * bash -lc "ggd auto"


12시간마다 백업체크하려면 (ggd자체의 설정사용),

0 */12 * * bash -lc "ggd auto"

월수금 5시에만 백업하려면  (ggd설정을 따르지 않고 백업본 삭제후 새로 백업 - 백업본 1개만 유지함)
0 5 * * 1,3,5 bash -lc "yes | ggd clear && ggd backup"


(ggd clear시 컨펌을 하기 때문에 yes | 로 컨펌처리를 해줘야함)




ggd 화일


--------------------------8<---------------------------------8<---------------------------------------------------

#!/bin/bash

# Backup  using gdrive (google drive)
# will backup user files in tar.gz archive
# usage:  edit cronjob and add below line
#
# 0 3 * * * bash -lc "ggd auto"
# The preceding line excutes 'ggd auto' at 3am every day

BKUP_INTERVAL_IN_DAYS=2

#Backup interval in seconds
TMS_BKUP_INTERVAL=$((60 * 60 * 24 * BKUP_INTERVAL_IN_DAYS))

#Limit the size of file to backup
#SIZE_LIMIT=1G
SIZE_LIMIT=500M

#Extra backup number (except last one)
DEFAULT_EXT_BKUP_NUM=1

# Backup user files excluding caches and system related files

do_backup() {
    BKUP_FILE="backup-$HOSTNAME-$(date +%s).tar.gz"
    cd $HOME && tar cvzpPf $BKUP_FILE --exclude=$BKUP_FILE\
        --exclude='.cache' \
        --exclude='.dbus' \
        --exclude='.gnupg' \
        --exclude='.cinnamon' \
        --exclude='.Xauthority' \
        --exclude='.config' \
        --exclude='.themes' \
        --exclude='.mozilla' \
        --exclude='.local/share/Trash' \
        --exclude='backup-*' \
        --exclude='Downloads' \
        --exclude-from <(find . -size +$SIZE_LIMIT) $HOME 2> tar.log
    gdrive upload $BKUP_FILE
    rm $BKUP_FILE
}


# This function removes all the backups except given number of backups
do_clear() {
    if [ "$#" -eq 0 ]
    then
        EXT_BKUP_NUM=0
    else
        EXT_BKUP_NUM=$DEFAULT_EXT_BKUP_NUM
    fi
    LST=$(gdrive list | grep backup- | awk '{print $1}')
    IFS=$'\n'
    i=0
    for l in $LST
    do
        if [ $i -ge $EXT_BKUP_NUM ]
        then
            gdrive delete $l
        fi
        ((i+=1))
    done
}


# Convert seconds to hour string
sec2string(){
    str=$(echo "scale=2; $1 / 3600" | bc)
    echo "$str hours"
}

if [ "$1" == "backup" ]
then
    do_backup
elif [ "$1" == "restore" ]
then
    LST=$(gdrive list | grep backup-)
    ID=$(echo $LST | awk '{print $1}')
    FNAME=$(echo $LST | awk '{print $2}')
    gdrive download $ID && tar -xvzf $FNAME -C / && rm $FNAME
elif [ "$1" == "list" ] || [ "$1" == "view" ]
then
    gdrive list | grep backup-
elif [ "$1" == "clear" ]
then
    read -p "This will erase all the backups stored in G-drive. Are you sure? " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Yy]$ ]]
    then
        do_clear
    fi
elif [ "$1" == "auto" ]
then
    LST=$(gdrive list | grep backup-)
    ID=$(echo $LST | awk '{print $1}')
    FNAME=$(echo $LST | awk '{print $2}')

    # Extract timestamp part   
    TMS_THEN=$(echo $FNAME | sed 's/.*-\([0-9]*\).*/\1/')
    TMS_NOW=$(date +%s)
    TMS_DIFF=$((TMS_NOW - TMS_THEN))
    if [ $TMS_DIFF -gt $TMS_BKUP_INTERVAL ]
    then
        do_clear 1
        do_backup
    else
        printf 'Backup was already made %s hours ago. %s hours left until next backup.\n' \
            "$(sec2string $TMS_DIFF)"  "$(sec2string $((TMS_BKUP_INTERVAL - TMS_DIFF)))"
            printf    'To clear backup use clear command. or use backup command to force backup.\n'
       
    fi
else
    echo "Unknown commands. Legal commands are: backup/restore/list/clear/auto"
fi



번호 제목 작성자 작성일 조회
201 팜 IIIe 쓰는 법 (업무용, 학습용, 오락용, 오소독스~~) [7] 성야무인 02.12 3469
200 일본어 학도를 위한 아이폰(팟터치) 사용기 [8] file minki 02.13 3727
199 SKT 미라지 세팅방법 [2] Freedom^^ 02.13 3375
198 [노키아] 노키아를 무선 AP기기로 만드는 어플 JOIKU 소개 [2] file 미케니컬 02.17 3501
197 심비안 OS의 어플 OPDA 사이트를 통해 쉽게 인증하기!!! [7] tubebell 02.20 4185
196 이이폰(팟터치) 잠재우는 어플 테스트 후기 (첫째날+둘째날) [5] minki 02.23 3598
195 아이폰(팟터치)가 공유기로 싱크 잘 안 될 때 (내부 네크워크 접속 불량 등) [1] minki 02.25 3834
194 KPUG 강좌, KPUG 자료실 2,000점 이벤트 KPUG.KR 03.03 3767
193 때늦은 클리에 T650 개조기 - 슈퍼 T650을 만들어 보자.. [8] 피델리티 03.04 4318
192 아이폰 테더링을 위한 블루투스 페어링(연결)이 잘 안될 때 채리새우 03.08 19562
191 때늦은 팜 강좌 - 꼭꼭 숨어라 시리즈 강좌 1. 핫싱크 데이터 전송 피하기 [5] file 피델리티 03.10 3395
190 때늦은 팜 강좌 - 꼭꼭 숨어라 시리즈 강좌 2. 어플리케이션 숨기기 [2] file 피델리티 03.10 3671
189 때늦은 팜 강좌 - 꼭꼭 숨어라 시리즈 강좌 3. 개인 데이터베이스 백업 [4] file 피델리티 03.10 3311
188 구PIMS(TC) 를 신규PIMS(ZIre72)로 업그레이드 file 부릉이 03.13 3687
187 조디악용 팜데스크 실행시 에러 해결법 [2] 권동휘 03.17 3575
186 대용량 메모는 아웃룩 작업 또는 연락처에 기재하자 거스파이 03.18 4179
185 유럽판 드로이드 마일스톤스 단략 사용기와 카메라 성능 샘플 사진들 (안드로이드폰) [3] file 거스파이 03.18 3462
184 WM폰에서 페이스북 사용하는 3가지 방법 (동영상 첨부) [1] 거스파이 03.18 3380
183 (맥 소개6) 하드만 물리면 다중 백업이 됩니다. [5] minki 03.29 4444
182 120v 전용 아답터 220v으로 만들기 [4] file 와늬 03.29 5044

오늘:
239
어제:
871
전체:
15,186,725