잘 알려져 있다시피, 리눅스에서는 모든 대상이 파일로 관리됩니다. 저는 이걸 처음 배웠을 때 그냥 아...그렇구나...하고 넘겼었는데요. 그런데 알고 보니 제 생각보다 훨씬 더 많은 것이 파일로 구현되어 있었습니다.
디스크 복사하기
리눅스에서는 디스크 드라이버 자체가 하나의 파일입니다. /dev/sda
와 같은 식으로 파일 형식으로 되어 있습니다. 그런데 재미있는 점은 파일시스템이 디스크 드라이버보다 상위의 시스템이라는 것입니다. 즉, 이 디스크를 그냥 파일로써 읽으면 파일시스템 아래의 raw data를 전부 볼 수 있습니다. (잘만 하면 이런 식으로 삭제된 데이터 복구 등도 가능할 것 같습니다.)
그래서 한 디스크를 통째로 파일로 백업하고 싶을 때에는 아래와 같이 cat 명령어를 사용해서 할 수 있습니다.(...) /dev/sda
디바이스를 파일로 백업하고, 다시 돌려놔보겠습니다.
먼저 chmod
명령어를 사용하여 /dev/sda
의 권한을 변경해줍니다.
sudo chmod 777 /dev/sda
다음으로 cat
명령어를 이용하여 파일 복사를 수행해서 백업해줍니다.
cat /dev/sda > sda.backup
반대로 이 백업 파일을 원래 디바이스로 돌리고 싶을 때에도 똑같이 할 수 있습니다.
cat sda.backup > /dev/sda
한 디스크를 다른 디스크로 복제하고 싶을 때에도 똑같이 할 수 있습니다.
cat /dev/sda > /dev/sdb
물론 두 디스크 모두에 대한 R/W권한이 있어야 합니다.
파일 복사하기
그런데 디스크 전체를 복제하는 것이 아니라 특정 디렉토리만 복사하고 싶을 수도 있습니다. 그럴 때에는 cp
명령어를 사용하면 되는데, 이것 역시 유용한 옵션이 많아 알아 두면 좋습니다.
-r
: 재귀적으로 복사를 수행-u
: 목적 파일이 존재하지 않거나, 목적 파일보다 원본 파일이 더 최근에 생성된 경우에만 복사-p
: 권한, 날짜, 소유자를 모두 보존하여 복사-a
: 재귀적으로, 심볼릭 링크는 보존하지 않으며, 모든 메타데이터를 보존하도록-v
: 로그 출력
그래서 백업 시에는 아래와 같이 -au
옵션을 사용하면 유용합니다.
cp -au [src] [dst]