Linux 서버에서 대용량 디렉토리를 안전하게 이동하기
얼마 전 필자는 Linux 서버에서 수많은 파일이 담긴 디렉토리를 한 위치에서 다른 위치로 옮겨야 할 일이 있었습니다. 이 작업을 수행하는 방법은 여러 가지가 있습니다. 간단한 cp 명령어만으로도 충분히 해결할 수 있습니다.
하지만 이번에 복사하려던 데이터가 데이터베이스였기 때문에 복사 과정이 완벽하게 이루어져야 했습니다. 그래서 인터넷을 검색해 보았고, 단 한 줄의 bash 명령으로 이 문제를 해결할 수 있는 훌륭한 방법을 찾게 되었습니다.
작업 목표
필자는 /var/lib/mysql 디렉토리의 내용 전체를 /opt/mysql로 옮기고자 했습니다. 먼저 다음과 같이 해당 디렉토리로 이동합니다.
# cd /var/lib/mysql
tar를 활용한 원라이너(One-liner) 명령어
그다음 아래의 한 줄짜리 명령어를 실행하여 마법 같은 결과를 얻었습니다.
# tar cf - * | ( cd /opt/mysql; tar xfp -)
명령어 동작 원리
위 명령어는 다음과 같은 순서로 동작합니다.
1. 현재 디렉토리의 모든 내용을 하나의 아카이브 파일로 묶습니다.
2. 파이프(|)를 통해 아카이브 스트림을 그대로 전달하면서 대상 디렉토리(/opt/mysql)로 이동합니다.
3. 이동한 위치에서 아카이브를 즉시 추출하여 파일을 복사합니다.
즉, 중간에 임시 아카이브 파일을 디스크에 생성하지 않고 메모리 상의 스트림으로 처리하기 때문에 빠르고 효율적입니다. 또한 xfp 옵션을 사용하면 파일 권한(permission)까지 그대로 유지되므로, 데이터베이스 파일처럼 권한 보존이 중요한 데이터를 복사할 때 특히 유용합니다.
마무리
필자는 위에서 소개한 명령어로 데이터베이스 파일들을 성공적으로 복사했습니다. 이 방식은 cp나 mv보다 파일 속성과 권한을 더욱 확실하게 보존할 수 있다는 장점이 있습니다. 작업을 마치기 전에, tar 명령어로 할 수 있는 다른 유용한 기능들도 함께 살펴보시기 바랍니다. :)