시스템이야기2011. 3. 17. 18:57

rsync


rsync는 크게 2가지 용도를 생각해볼 수 있다.

1) 파일 백업 (퍼미션 유지 필요. 백업본으로 복구할 경우 퍼미션도 중요하다.)
2) 파일 배포 (반드시 퍼미션을 유지하지 안해도 될 상황이 있다.)

rsync를 이용해서 다수의 서버를 동기화한다고 하자. 그리고, 대상 서버는 웹서버들이다. (즉, '파일 배포' 용도) 이 웹페이지 파일은 웹에서 읽을 수 있는 권한만 갖으면 된다. 쓰기 권한을 갖을 필요가 없다. (업로드가 이뤄지는 디렉토리는 쓰기 권한이 필요하겠지만)

rsync는 원본 파일(또는 디렉토리) 퍼미션과 상관없이, 싱크할 때 특정한 퍼미션으로 고정시키는 옵션이 있다. 디렉토리는 555(dr-xr-xr-x) 또는 515(dr-x--xr-x)으로, 파일은 444(-r--r--r--)로 고정해볼 수 있을 것이다. 서비스 서버(대상 서버)의 파일은 보안에 조금 더 안전하게 존재하게 된다.

(예)
-------------    ---------------
 원본 서버          대상 서버
192.168.1.123    192.168.1.110~120
-------------    ---------------
drwxr-xr-x    ->   dr-xr-xr-x
drwxrwxr-x    ->   dr-xr-xr-x
-rw-r--r--    ->   -r--r--r--
-rw-rw-rw-    ->   -r--r--r--
-------------    ---------------

대상 서버의 rsyncd.conf 예이다.

# server : 192.168.1.110
#
uid             = root
gid             = root
user chroot     = yes
max connections    = 10
hosts allow    = 192.168.1.123

[coffeenix]
path        = /home/coffeenix/public_html
read only    = no
incoming chmod  = Du=rx,Dgo=rx,Fugo=r

'incoming chmod =' 파라미터는 들어오는 파일을 특정 퍼미션으로 고정한다.
파라미터의 값은 각각 다음과 같은 의미를 갖는다.

- D : 디렉토리
- F : 파일
- ugo : 각각 user(u), group(g), other(o)에 해당한다.


[ 기본적인 파일 보호 장치인 chmod (열쇠찾아서 그리는데 쉽지 않았다. ^^) ]


위의 Du=rx,Dgo=rx,Fugo=r 는 Dugo=rx,Fugo=r처럼 통합해서 표시해도 좋다.
Du=rx는 디렉토리 소유자는 r-x(읽기, 쓰기)로 설정한다는 의미이다.
Fugo=r은 누구나(user, group, other) 파일을 읽을 수 있도록(r--)로 설정한다.
위 설정대로하면 디렉토리는 r-xr-xr-x 가 되고, 파일은 r--r--r--가 된다.

# rsync -avz --delete public_html/ 192.168.1.110::coffeenix/

보다 자세한 글은 커피닉스에 써뒀으니 살펴보시길.

Posted by 좋은진호
IT이야기2010. 9. 14. 12:30
ZFS 파일시스템은 snapshot(스냅샷) 기능을 제공하여, 원하면 언제든지 snapshot시점으로 복원할 수 있다. 명령어 한줄로 snapshot을 만들고, 명령어 한줄로 복원한다. snapshot 생성을 매일 1회 이상 자동으로 실행되도록 해주면, 데이터 복원에 유용할 것이다.

ZFS 파일시스템

참고로 FreeBSD 8.0은 ZFS v13을, 8.1은 v14를 지원한다. FreeBSD 8.2 또는 9.0에서는 v15를 지원할 예정이다. ZFS v15는 Solaris 10 update 8과 FreeBSD간의 호환성이 좋아졌으며, ZFS파일시스템에 php 코드가 있을 경우에 기존보다 15~20%정도 RPS가 향상되었다.

이 글은 FreeBSD에서 ZFS파일시스템을 운영한 것을 토대로 작성했지만 OS와 상관없이 ZFS파일시스템이라면 동일하게 적용된다.

1. snapshot 만들기

이론적으로 snapshot은 최대 2의 64제곱개까지 만들 수 있다. snapshot은 같은 스토리지 풀(파일시스템, 볼륨)의 공간을 사용한다.

snapshot을 만들어보자. snapshot시에 형식은 '파일시스템@snapshot명' 또는 '볼륨@snapshot명'이다. snapshot 이름은 기존 이름과 중복되지 않으면 임의로 만들면 된다.

# zfs snapshot data/log@2010_0621_1740_Mon

snapshot이름은 개인적으로 '년월일' 형식을 선호한다. snapshot 목록을 볼 때, 별도 속성 옵션(-o creation)을 줘야 생성일자를 볼 수 있는 불편함 때문이다. 좀 더 직관적으로 표기하기위해 요일까지 붙여줘도 좋다.

2. snapshot 확인하기

생성된 snapshot 목록을 살펴보자. 생성일시를 알고 싶다면 -o creation의 추가 옵션이 필요하다.

# zfs list -t snapshot
NAME                          USED  AVAIL  REFER  MOUNTPOINT
... 생략 ...
 data/log@2010_0619_0701_Sat   26K      -  20.9M  -
 data/log@2010_0620_0701_Sun   30K      -  21.5M  -
 data/log@2010_0621_0701_Mon   31K      -  21.5M  -
 data/log@2010_0621_1740_Mon     0      -  28.5M  -

3. snapshot rollback하기

rollback은 snapshot 방법과 동일하다. 특정 시점으로 되돌리고 싶으면 해당 'snapshot명'을 지정하기만 하면 된다.

# zfs rollback data/log@2010_0621_1740_Mon
cannot rollback to 'data/log@2010_0621_1740_Mon': more recent snapshots exist
use '-r' to force deletion of the following snapshots:
data/log@2010_0621_1750_Mon
data/log@2010_0621_1813_Mon

위의 경우는 data/log@2010_0621_1740_Mon 스냅샷 이후(즉, 보다 최근)에 2개의 스냅샷이 존재하기 때문에 나오는 메시지이다. 이를 무시하고 롤백하려면 -r 옵션(Recursively)을 주면 된다.

# zfs rollback -r data/log@2010_0621_1740_Mon

※ 여기서는 snapshot 생성, 확인, 복원에 대해 간단하게 적었으며, 자세한 글은 '커피닉스(coffeenix.net)'에 올려뒀다.

* 관련글
2009/02/26 - [시스템이야기] - FreeBSD 7에서 ZFS 사용 (유연성은 좋으나, 성능은 불만족)

Posted by 좋은진호