리눅스 tar 압축 백업복원시 소유자 문제해결
Posted 2008/09/26 09:29
리눅스에서 백업은 보통 tar을 이용하여 백업합니다. (리눅스에서의 파일압축은 이전 글 리눅스에서의 파일압축 (tar/gzip) 을 참고하세요) 보통 백업과 복구시에는 아래와 같은 옵션들을 이용합니다.
각 옵션들은 아래와 같습니다.
즉, 진행하면서 작업중인 파일들을 표시하면서 퍼미션을 포함하여 gzip을 이용하여 압축 혹은 해제하게 되는데, 서버의 OS를 재설치한뒤 복원하는 경우나 다른 서버로의 복원을 할 때 이 퍼미션 때문에 문제가 발생합니다. 압축한 파일들의 소유자들이 복원하는 서버의 소유자들과 일치하지 않을 수 있습니다. 예를 들면 압축된 파일의 소유자 uid가 500이었는데 복원하는 서버에는 500번 uid가 없다거나 하는 경우죠.
위 그림처럼 tar로 새로운 서버에 압축을 풀은 후 압축한 파일의 소유자가 압축을 풀은 서버에 존재하지 않는다면, 계정이 표시되지 않고 uid가 그대로 표시되게 됩니다. 이 경우 복원하는 서버에서 원래의 서버와 동일하게 계정들을 맞춰주는 방법도 있겠습니다만, 소유자를 변경해주는 chown 명령을 이용해서 해결 할 수도 있습니다.
보통 소유자를 변경시에는 아래와 같은 커맨드로 변경합니다.
예를 들어, chown www-data:www-data post-* 를 입력해보겠습니다.
uid로 표시되던 파일들이 아이디로 표시되고 있습니다. 그러면 남은 문제는 모든 파일이 소유자와 그룹이 다 똑같지 않다는 것이죠. 예를 들어 500번 uid로 되어있는 파일들은 megawave 계정으로 변경해야 하고 600번 uid로 되어있는 파일들은 www-data 계정으로 변경해야 한다거나죠. 이 문제를 해결하기 위해서 chown명령에서는 --from 옵션을 제공하고 있습니다.
chown --from 500:500 megawave:megawave [대상] 으로써 소유자와 그룹이 500:500으로 된 대상들만 특정 소유자,그룹으로 변경할 수 있습니다. 대상이 디렉토리일 경우 -R 옵션을 붙여주므로써 통채로 변경이 가능합니다.
chown --from 500:500 megawave:megawave [폴더] -R
chown --from 600:600 www-data:www-data [폴더] -R
이런식으로 한꺼번에 변경할 수 있습니다.
백업시의 tar 명령커맨드
tar cvfpz [파일이름.tar.gz] [대상]
복구시의 tar 명령커맨드
tar xvfpz [파일이름.tar.gz]
tar cvfpz [파일이름.tar.gz] [대상]
복구시의 tar 명령커맨드
tar xvfpz [파일이름.tar.gz]
각 옵션들은 아래와 같습니다.
tar의 옵션
c : 새로운 tar파일을 생성한다.
x : 기존의 tar파일을 푼다.
v : 어떤 명령을 실행할 때 현재 작업중인 파일을 보여준다.
f : 파일이름을 지정한다.
p : 퍼미션을 포함한다.
z : gzip을 이용한다.
c : 새로운 tar파일을 생성한다.
x : 기존의 tar파일을 푼다.
v : 어떤 명령을 실행할 때 현재 작업중인 파일을 보여준다.
f : 파일이름을 지정한다.
p : 퍼미션을 포함한다.
z : gzip을 이용한다.
즉, 진행하면서 작업중인 파일들을 표시하면서 퍼미션을 포함하여 gzip을 이용하여 압축 혹은 해제하게 되는데, 서버의 OS를 재설치한뒤 복원하는 경우나 다른 서버로의 복원을 할 때 이 퍼미션 때문에 문제가 발생합니다. 압축한 파일들의 소유자들이 복원하는 서버의 소유자들과 일치하지 않을 수 있습니다. 예를 들면 압축된 파일의 소유자 uid가 500이었는데 복원하는 서버에는 500번 uid가 없다거나 하는 경우죠.
위 그림처럼 tar로 새로운 서버에 압축을 풀은 후 압축한 파일의 소유자가 압축을 풀은 서버에 존재하지 않는다면, 계정이 표시되지 않고 uid가 그대로 표시되게 됩니다. 이 경우 복원하는 서버에서 원래의 서버와 동일하게 계정들을 맞춰주는 방법도 있겠습니다만, 소유자를 변경해주는 chown 명령을 이용해서 해결 할 수도 있습니다.
보통 소유자를 변경시에는 아래와 같은 커맨드로 변경합니다.
chown [소유자] [대상] 혹은 chown [소유자]:[그룹] [대상]
예를 들어, chown www-data:www-data post-* 를 입력해보겠습니다.
uid로 표시되던 파일들이 아이디로 표시되고 있습니다. 그러면 남은 문제는 모든 파일이 소유자와 그룹이 다 똑같지 않다는 것이죠. 예를 들어 500번 uid로 되어있는 파일들은 megawave 계정으로 변경해야 하고 600번 uid로 되어있는 파일들은 www-data 계정으로 변경해야 한다거나죠. 이 문제를 해결하기 위해서 chown명령에서는 --from 옵션을 제공하고 있습니다.
chown --from 500:500 megawave:megawave [대상] 으로써 소유자와 그룹이 500:500으로 된 대상들만 특정 소유자,그룹으로 변경할 수 있습니다. 대상이 디렉토리일 경우 -R 옵션을 붙여주므로써 통채로 변경이 가능합니다.
chown --from 500:500 megawave:megawave [폴더] -R
chown --from 600:600 www-data:www-data [폴더] -R
이런식으로 한꺼번에 변경할 수 있습니다.
센토제타
| 2008/09/26 23:48 | PERMALINK | EDIT | REPLY |뭔말인지 알듯 말듯 하다 흐음 비관계 업종 종사자로선 댓글 달기 곤란한 글이로군 ㅎㅎ
MegaWave
| 2008/09/26 23:58 | PERMALINK | EDIT |나도 너의 그림을 보고 느낀바를 적으려면 곤란하긴 마찬가지다. ㅎㅎ
시리니
| 2008/09/27 21:02 | PERMALINK | EDIT | REPLY |경험상 v 옵션을 뺄 때랑 넣을 때랑 은근히 처리속도 차이가 많이 나더라구요.
그래서 요즘에는 정밀하게 모니터링 안해도 될 때는 v 옵션을 빼고 빨리 처리하려고 합니다. ㅎㅎ
MegaWave
| 2008/09/28 01:36 | PERMALINK | EDIT |아무래도 그렇겠죠. 전 안 보이면 답답해서~ ㅎㅎ
디지문
| 2008/10/11 10:11 | PERMALINK | EDIT | REPLY |오~호, chown에 그런 옵션이 있었군요. 좋은 정보 감사합니다.
저 같은 경우는 find 명령어로 여태 대체하고 있었습니다만...
find / -user aaa -group aaa -exec chown bbb.bbb. {} \;
이렇게 해도 소유권이 aaa.aaa 로 되어 있는 파일이나 디렉토리 모두 몽땅 bbb.bbb 소유권으로 바꾸어 줄 수 있죠.
MegaWave
| 2008/10/11 15:39 | PERMALINK | EDIT |아... 그렇게 바꾸는 방법도 있군요~
경우에 따라서는 그렇게 바꿔야할 경우도 있을 것 같군요. ^^