요약: 이 글은 여러분이 파일 혹은 디렉토리를 옮기거나 카피 할때 발생할 수 있는 문제에 대해 다뤄보고 그에 관한 해결방법을 제시 합니다.
순서:
- 소개
- 경고들
- NFS
- 심볼릭 링크
- 미지의 목적지
- 접근 문제
- 복사 혹은 이동 과정 중의 중단
- 다른 디바이스들 간의 이동
- 소유자, 그룹, 권한
- 요약 및 몇몇 이슈들
소개
여러분은 "이건 나에게 해당 되는 문제가 아니다. 왜냐하면
cp나cp -r커맨드를 이용해서 카피할 수 있고 혹은mv커맨드를 이용해서 파일을 이동시킬 수 있기 때문이다." 라고 생각 할 수 있습니다. 그러나 종종 여러분은 데이타를 잃어 버립니다.필자는 큰 파일, 엄청난 숫자의 파일들, 혹은 대용량의 데이타를 카피 하거나 이동할 필요가 있을때
cp혹은mv커맨드를 되도록 쓰지 않기를 권합니다. 또한 동일한 소유자, 그룹, 허가권한 그리고 데이타의 다른 모든 정보들을 그대로 유지하고자 할때cp혹은mv를 사용하지 않기를 권합니다.Caveats
NFS
여러분은 목적 혹은 소스 디렉토리가 로컬 머신에서 원격 머신으로 NFS 혹은 네트워크의 다른 프로토콜을 이용해서 연결 됐을때 이러한 문제를 경험할 수 있습니다. 이러한 문제를 회피하기 위해서는 소스 와 목적지 디렉토리를 다음의 명령을 통해서 미리 검사해 봅니다. 예를 들어:
# df -k <디렉토리>
여기서 <디렉토리> - 소스 혹은 목적지 디렉토리또는 솔라리스 9 혹은 그 이후의 버전에서는:
# df -h <디렉토리>
여기서 <디렉토리> - 소스 혹은 목적지 디렉토리예를 들어:
# df -k /source_directory Filesystem kbytes used avail capacity Mounted on 127.0.0.1:/source 34750583 28174655 6228423 82% /source_directory여기서 IP 주소
127.0.0.1를 가진 호스트의 디렉토리/source가 (여기에서는localhost) 가 로컬 머신의/source_directory에 마운트 되어 있습니다. 디렉토리 마운트를 위해 어떠한 서비스가 사용됐는지 확인하기 위해 아래와 같은 명령어를 실행 시킵니다:# mount -v | grep "<디렉토리>"여기서 <디렉토리> - 소스 혹은 목적지 디렉토리심볼릭 링크
목적지 혹은 소스 디렉토리가 -- 혹은 더 나쁜 경우에는 서브 디렉토리가 -- 소스 디렉토리에 링크 되어 있을때 문제가 발생 합니다.
여러분이
cp -r커맨드를 이용해서 심볼링 링크를 포함하고 있는 디렉토리를 카피 하게 되면 목적지 디렉토리의 링크들은 이러한 링크가 가르키고 있는 실제 데이타를 가르키게 됩니다. 만약cp -r커맨드를 이용해서 1Gbyte 정도의 데이타를 포함하고 있는 수 많은 양의 링크를 지닌 디렉토리를 카피하려고 하면 목적지는 1Gbyte 의 데이타 외에 이러한 링크가 가지고 있는 모든 데이타를 포함하게 될 것입니다. 종종 이런 경우 결과는 매우 커지게 되고 시스템의 용량을 뛰어 넘게 될 것입니다.소스 디렉토리가 심볼릭 링크를 포함하고 있는지 확인하려면 다음과 같은 명령어를 입력합니다:
# cd <디렉토리> 여기서 <디렉토리> - 소스 혹은 목적지 디렉토리 # find . -type link | more
링크의 갯수를 세려면 다음의 명령어를 사용합니다:
# find . -type link | wc
아래에는 디렉토리
example01을 새로운 디렉토리example02로cp -r ./example01 ./example02커맨드를 이용해서 카피한 결과 입니다:# find ./example01 -type link | wc 2440 2440 171743 # du -ks ./example01 2772092 ./example01 # find ./example02 -type link | wc 0 0 0 # du -ks ./example02 6326172 ./example02미지의 목적지
여러분이 실제 장소, 목적지 혹은 소스 디렉토리와 친숙하지 않을때 문제가 발생할 수 있습니다. 왜냐하면 전혀 다른 장소를 가르킬 수도 있기 때문입니다.
예를 들어:
# df -k /source_directory Filesystem kbytes used avail capacity Mounted on /dev/dsk/c0t0d0s0 34750583 28174655 6228423 82% /source_directory # df -k /destination_directory Filesystem kbytes used avail capacity Mounted on 127.0.0.1:/destination 34750583 28174655 6228423 82% /destination_directory여기서
/source_directory는 로컬 디스크에 생성된 디렉토리 입니다 (루트 파티션에)./destination_directory는 IP 주소127.0.0.1(여기에서는localhost)을 가진 호스트의 디렉토리/destination를 로컬 머신에 마운트 한 것입니다. 이 예제의 목적을 위해서 IP 주소는 localhost 입니다. 그러나 실제 시나리오에서는 다른 서브넷의 IP 주소가 될 수도 있고 패킷(데이타)는 네트워크를 통해서 전송될 수도 있습니다.소스 혹은 목적지 디렉토리가 네트워크를 통해 마운트 되어 있으면 다음과 같은 것들을 알아야 합니다:
- 목적지 혹은 소스 디렉토리에 직접 접근할 수 있는 방법
- 디렉토리에서 혹은 디렉토리로 데이타를 복사할때 걸리는 시간
- 데이타가 다른 머신 혹은 디바이스(네트워크 가속기 같은) 를 통해 복사될것인지에 대한 여부
최고의 방법은 샘플 데이타를 목적지로 카피해서 측정해 보는 방법입니다.
접근 문제
여러분이 목적지 혹은 소스 디렉토리에 접근하는 것에 친숙하지 않다면 디렉토리 혹은 서브디렉토리에 접근이 불가능할 수 있습니다.
mv커맨드를 이용해서 데이타를 이동하는 것을 결정했다면 옮겨질 소스 디렉토리안에 어떠한 프로세스도 실행되고 있지 않음을 확인하시기 바랍니다.종종 여러분은 마운트된 디렉토리에 접근하지 못할 수도 있습니다. 왜냐하면 마운트하려고 하는 원격 호스트의 디렉토리에 대한 올바르지 못한 권한을 가지고 있을 수 있기 때문입니다. 목적지 디렉토리가 읽기-전용 파일시스템으로 마운트 되지 않았음을 확인하시기 바랍니다. 예를 들어:
# df -k /destination_directory Filesystem kbytes used avail capacity Mounted on 127.0.0.1:/destination 34750583 28174655 6228423 82% /destination_directory # mount -v | grep "<directory>"여기서 <디렉토리> - 소스 혹은 목적지 디렉토리
또한 읽기-전용 플래그가 셋팅되지 않았음을 확인하시기 바랍니다. 최적의 방법은 대용량의 데이타를 복사 혹은 이동할때 미리 샘플 데이타를 이용해서 테스트하는 것입니다.
복사 혹은 이동 과정 중의 중단
다양한 문제가 발생 가능합니다. 예를 들어
mv커맨드를 이용하여 소스에서 목적지로 복사를 한다고 하고 그둘중 하나가 네트워크를 통해 연결되었다고 해봅시다. 만약 네트워크가 파일이 이동되는 도중에 사용이 불가능해 졌다고 하거나 실수로 데이타를 이동하고 있는 프로세스 혹은 터미널을 kill 했다고 하면 데이타는 오직 부분만 이동되게 되고 데이타를 잃어 버리게 될 것입니다.문제는
cp커맨드를 이용할때도 똑같은 상황에서 똑같이 발생합니다. 이 경우 데이타는 부분적으로만 이동되게 됩니다.여러분이 데이타를 원격으로 이동할때, 예를 들어 DISPLAY 를 여러분의 머신으로 export 했을때 프로세스가 중단될 확률이 커 집니다. 그러므로 이러한 커맨드를 실행한 장소가 매우 안정적임을 반드시 확인하시기 바랍니다.
터미널 이름을 확인 하기 위해 다음과 같은 명령을 사용합니다:
# tty /dev/console # tty /dev/pts/1
만약 여러분이 콘솔을 이용해서 로그인하고 있다면 재부팅시에도 여전히 제어권을 가지게 될 것입니다.
nohup커맨드를 이용해서 장시간 실행되고 있는 프로세스들에 의해 방해 받는 것을 피하시기 바랍니다.다른 디바이스들 간의 이동
mv커맨드를 이용해서 디렉토리들을 카피할때 동일한 파티션 혹은 디스크에 생성되어 있지 않은 디렉토리들을 이동하는 것은 동일한 파티션을 공유하고 있는 디렉토리들을 이동하는 것보다 훨씬 시간이 많이 걸립니다. (동일한 파티션에서mv커맨드는 한순간에 완료 되지만 서로 다른 디바이스 간들 사이에서는 놀랄 정도로 긴 시간이 필요 합니다) 걸리는 시간은 대부분 각 파티션 혹은 디바이스에 접근하는데에 달려 있습니다. 파일을 이동하는 동안 머신이 재부팅 되거나 이동 프로세스가 방해 받지 않도록 주의하시기 바랍니다.예를 들어:
# df -k /source_directory Filesystem kbytes used avail capacity Mounted on /dev/dsk/c0t0d0s0 34750583 28174655 6228423 82% /source_directory # df -k /destination_directory Filesystem kbytes used avail capacity Mounted on /dev/md/dsk/d30 34750583 28174655 6228423 82% /destination_directory
이전 케이스에서
/source_directory는 로컬 디스크에 생성된 디렉토리이고(root 파티션),/destination_directory은 메타디바이스에 생성된 디렉토리 입니다. 그러므로 동일한 파티션에서 걸린 시간 보다 훨씬 많은 시간이 걸릴 것입니다.반드시 목적지 와 소스 디렉토리가 동일한 블럭 구조를 가지고 있음을 확인하시기 바랍니다. 만약 그렇지 않다면
cp혹은mv커맨드의 사용을 자제하시기 바랍니다. 확인을 위해서는 각 디바이스에 동일한 텍스트 파일을 생성하고du -ks커맨드를 각 파일에 대해 실행해서 확인합니다.예를 들어:
# du -ks ./example.txt 4 ./example.txt # du -ks /tmp/example.txt 8 /tmp/example.txt
그러나
diff혹은sdiff -s커맨드는 어떠한 차이도 보여주지 않습니다.소유자, 그룹, 권한
소유자, 그룹, 권한과 다른 모든 파일 정보가 보존됨을 반드시 확인하시기 바랍니다. 몇몇 유저 혹은 서비스는 새로운 장소에서 이러한 데이타에 대한 접근 권한을 잃어 버릴 수 있고 여러분은 이것을 알지 못할 수 있습니다. 종종 서비스는 시스템의 가장 민감한 부분이 될 수 있습니다.
요약 및 몇몇 이슈들
mv혹은cp커맨드를 이용해서 대용량의 데이타를 카피하는 대신 다음과 같은 방법을 고려해 보시기 바랍니다:-
이전에 언급한 어떠한 경고 사항에도 해당되지 않음을 확인.
- 디스크 용량 확인.
예를 들어:
# df -k <directory>
여기서 <디렉토리> - 소스 혹은 목적지 디렉토리# df -k <directory>
여기서 <디렉토리> - 소스 혹은 목적지 디렉토리 cpio(추천됨),tar,rsync,ufsdump, 혹은ufsrestore같은 커맨드를 이용해서 데이타를 목적지로 복사 함.예제:
소스 디렉토리를
/source, 그리고 목적지 디렉토리를/destination라고 가정.# cd /source # cd .. # find ./source -depth -print | cpio -cvo> /destination/source_data.cpio # cd /destination # cpio -icvmdI ./source_data.cpio # rm -rf ./source_data.cpio
-c옵션은 데이타가 서로 다른 타입의 머신에서 카피 될때 중요합니다. 이 옵션은 데이타 이식성을 위해 일기 혹은 쓰기 헤더 정보를 ASCII 문자 형태로 제공합니다. 이 헤더 포맷에는 어떠한 UID 혹은 GID 제한도 연관되어 있지 않습니다. 이 옵션은 SVR4 기반 머신사이에서 사용하고,-H odc옵션은 알지 못하는 머신 사이에서 사용 합니다.-c옵션은 확장 디바이스 넘버를 사용함을 의미하고 이것은 오직 SVR4-기반 시스템에서만 지원됩니다.-H odc옵션은 SunOS4 혹은 인터렉티브 UNIX 시스템에서 솔라리스 2.6 혹은 호환되는 버젼으로 파일을 전송하고자 할때 사용 합니다.위의 단계에서는 일단
/destination디렉토리에cpio를 이용해서 모든 데이타를 압축해서 하나의 파일에 담고 이 파일을 목적지로 복사 한다음 압축을 해제 합니다.좀 더 자세한 정보는
cpio커맨드와 필요한 다른 커맨드들의 멘 페이지를 참고하시기 바랍니다.또한 다음을 참고 바랍니다:
-
- System Administration Guide (여러분이 인스톨한 시스템의 버전에 따라)
- GNU
cpio
- 소스 디렉토리의 데이타와 목적지 디렉토리의 데이타를
sdiff -s,diff,du -ks,find,cmp, 그리고dircmp같은 명령을 통해 비교해보시기 바랍니다.예제:
소스 디렉토리를
/source, 그리고 목적지 디렉토리를/destination이라 가정하면# cd /source # cd .. # dircmp -s ./source ./destination
- 만약 데이타를 복사 하는 대신 이동하기로 했고 새로운 장소에 복사된 데이타가 모두 정상임을 확인했다면 소스의 모든 데이타를 삭제 하거나 다른 장소로 백업해 두시기 바랍니다.
"관리자코너" 카테고리의 다른 글
- 썬 버추얼 데스크탑 커넥터 1.0(베타)을 사용한 VDI 데모 구축 (댓글 0개 / 트랙백 0개) 2008/01/23
- 솔라리스 부트 매니저를 이용한 부트 디스크 미러링 방법 (댓글 1개 / 트랙백 0개) 2005/09/23
- 솔라리스 10 5/08 릴리스의 새로운 기능 (댓글 0개 / 트랙백 0개) 2008/06/11
- Solaris 10의 컨테이너를 이용하여 보안을 향상시키는 방법 - Part 1 of 2 (댓글 1개 / 트랙백 0개) 2005/10/23
- 설정 파일 관리 베스트 프랙티스 (댓글 0개 / 트랙백 0개) 2008/05/19
- The Zone Manager 스크립트 (댓글 1개 / 트랙백 0개) 2005/11/23
- 스크립트를 이용한 자동화된 시스템 체크 (댓글 0개 / 트랙백 0개) 2008/06/16
- 플래시 어카이브로 부터 솔라리스10 Branded 존 설치하기 (댓글 0개 / 트랙백 0개) 2008/08/19
- xVM DomU 지원을 솔라리스 라이브CD 배포판에 추가하기 (댓글 0개 / 트랙백 0개) 2008/12/05
- 솔라리스 레디 애플리케이션 및 솔루션 (댓글 0개 / 트랙백 0개) 2008/03/13
댓글을 달아 주세요
nfs와 nis를 이용해 원격으로 설치했던 기억이 나네요. 좋은 글 잘 보고 갑니다. 그런데 본문에 링크가 걸려있는건 원래 그런가요??
2007/04/24 10:40태그가 잘못된게 아닐까요 ㅎㅎ
2007/04/24 13:38꽤 오랜전에 배웠던 기억이 나네요..
2007/09/10 17:39지금은 쓰던 명령어만 쓰니.. ㅡㅡ;
좋은 글 감사합니다. 긁어 갈께요 ^^
http://tong.nate.com/flowertt/b1482268
초보이지만 유용한 자료입니다. 유용한 자료 잘 활용하겠습니다.
2007/09/18 22:17좋은 정보 감사해요~
2007/09/19 03:45정말 좋은 자료 많이 얻어가요.
2007/09/19 23:09