맘야의 이런저런 이야기들

리눅스 #2 시스템의 백업과 복구 (동영상 추가) 본문

맘야의 컴퓨터 이야기 /리눅스(Linux)

리눅스 #2 시스템의 백업과 복구 (동영상 추가)

맘야 2018. 3. 5. 11:53
반응형

마지막 수정 날짜 : 2018. 04. 16. 월.




<동영상 보기>

유튜브 - https://www.youtube.com/watch?v=OIDRD_3oYH0&list=PL18_TeFgN9R1jo2A7pFnwy_zl9wE2yKDC&index=1

카카오TV - https://tv.kakao.com/channel/2687112/cliplink/384735333





    1. 들어가며
   
리눅스는 저에게 있어서 매우 소중한 존재입니다. 왜냐하면, 리눅스가 있었기에 몇 년 동안의 어려운 과정을 보다 더 수월하게 헤쳐나갈 수 있었기 때문입니다. 리눅스의 모든 소프트웨어가 GNU 규정을 따르며 소스가 공개되어 있습니다. 이런 리눅스야말로 진정한 구원자라고 칭할 수 있겠습니다. 특히, 저처럼 어려운 과정을 겪고 있는 사람들에게 아주 훌륭한 도구를 제공해 주고 있습니다. 이런 고마운 존재인 리눅스를 사랑합니다.

컴퓨터를 사용하다 보면 각종 문제에 부딪힐 때가 있습니다. 이러한 과정을 잘 극복하시라고 도움이 될만한 포스팅을 해보겠습니다.

요사이 제 노트북의 OS를 업그레이드하면서 여러 날 동안 리눅스의 설치와 백업 및 복구를 해봤습니다. 이 과정에서 MBR 을 잘 못 건드리는 바람에 하드디스크가 잠깐 백지상태가 되어 보기도 하였습니다. 갑자기 머리가 멍해지더군요. 다행히 기술의 발전으로 말미암아 약간의 수고만으로 하드디스크를 예전으로 되돌릴 수 있었습니다. 지금 이 순간 십년감수라는 말이 생각나는군요. 나중에 기회가 된다면 이것에 관하여 포스팅을 해보겠습니다.

    "백업과 복구는 아무리 강조해도 지나치지 않습니다."

데이터를 잃어버린 컴퓨터는 무용지물이기 때문이죠. 그렇다고 무작정 백업과 복구를 하자니 겁이 납니다. 그래서 제가 겪었던 과정에서 알게 된 몇 가지 중요한 사실을 여러분과 공유하고자 합니다.

언제나 그렇듯이 OS를 새로 설치한다는 것은 많은 시간이 필요합니다. 새로 설치하기 위해서 준비하는 시간과 새로 설치한 OS를 체험해보는 시간, 또 각종 유틸을 다시 설치하는 시간이 오래 걸리고 힘들 수 있습니다. 그 과정에서 OS를 여러 번 설치할 수도 있습니다. 이것을 손쉽게 할 수 있지 않을까요? 이 방법을 여러분과 공유하고자 합니다.

현재 컴퓨터에 리눅스가 설치되어 있다는 가정하에서 진행하겠습니다. 만약, 리눅스가 설치되어 있지 않다면 앞 전에 올린 글을 읽으면 도움이 될 것입니다. 파티션을 추가하거나 새롭게 구성해서 리눅스를 설치하는 과정이 힘들게 느껴지는 분은 가상머신을 추천합니다. 대표적으로 vmware 와 virtualbox 라는 프로그램이 있습니다. 인터넷을 검색해보면 테스트 버전을 쉽게 구할 수 있으니 리눅스를 꼭 한번은 체험해보시기를 적극적으로 권장합니다.


    2. 리눅스 시스템 백업과 복구하기
   
리눅스의 백업과 복구는 약간 까다로울 수 있습니다. 왜냐하면, 리눅스에는 퍼미션이라는 개념이 있기 때문입니다. 퍼미션이라는 것은 디렉터리와 파일에 부여된 권한입니다. 즉, 디렉터리와 파일을 ‘읽고, 쓰고, 실행’하는 권한이 각각 다르다는 것이죠. 그래서 원본 그대로 백업을 해놓는 것이 매우 중요합니다. 또한, 디렉터리와 파일이 생성된 시간과 수정된 시간 등을 그대로 보존하면서 백업을 해놓아야 합니다. 무작정 복사만 해놓는 것은 올바른 백업이 아닙니다. 예를 들어서, 십 년 전부터 찍어놓은 사진이 있다고 했을 때, 이 사진들을 보는데 시간순으로 정렬이 되어있지 않고 백업을 한 시점으로 시간이 설정되어 있다면 분류를 해 나가는 데 어려움을 겪을 것입니다. 추억에 관한 시간이 바뀌어서 이 사진을 언제 찍었는지 알기 어렵게 될 수도 있습니다. 파일이 담고 있는 모든 정보가 원본 그대로 보존되는 것. 이것이 진정한 백업일 테죠.

리눅스에서 백업하는 방법은 여러 가지가 있습니다. 전문 프로그램을 구해서 할 수도 있고요. 저처럼 오로지 터미널(콘솔)만을 이용해서 할 수도 있습니다. 명령어만으로 올바른 백업과 복구를 해보는 것이죠. 리눅스를 사용해 보려는 분은 리눅스가 가지고 있는 매력인 이 방법을 사용해 보시기를 추천합니다. 이 방법을 사용하다 보면 까만 화면에 글자만 쓰여 있는 텍스트모드에서도 원활하게 리눅스를 운용해볼 수 있을 것입니다. 저는 리눅스를 좀 더 깊이 공부해보고자 리눅스마스터라는 책을 주문했습니다. 인생을 알차고 즐겁게 살아가는 좋은 방법의 하나는 바로, 새로운 것을 배워나가는 것이겠죠? ^^

준비되셨다면 터미널(콘솔) 창을 하나 여십시오.







    2.1. root 권한을 얻기
   
시스템을 백업하기 위해서는 root 가 되어야 합니다. 그래야만 모든 디렉터리와 파일에 접근할 수 있기 때문입니다. 배포판마다 차이가 있겠지만, 대부분이 root 가 아닌 일반 사용자로 로그인이 되어있을 것입니다. 로그아웃해서 다시 로그인해야 할까요? 아닙니다. 로그인되어있는 상태에서 사용자 간의 이동을 할 수 있습니다. 바로, su 라는 명령어로 가능합니다. 해보죠. 아래의 두 가지 명령은 모두 같은 것이니 마음에 드는 것으로 실행합니다.

    su
    su     root
   
비밀번호를 입력하면 root 계정으로 바뀌게 됩니다. 그런데, 여기서 안되시는 분들이 있으시죠? 저도 처음에 그랬습니다. 제가 사용하고 있는 우분투라는 배포판은 이 명령어를 사용할 때 앞에 sudo 라는 명령어를 붙여야 합니다. 우분투는 root 계정을 비활성 해놓았죠. 꼭 필요할 때만 사용하라는 뜻일까요? 우분투에서는, root 가 되기 위해서 su 라는 명령을 사용하고자 할 때도 앞에 sudo 라는 명령어를 붙여야 합니다. 역시나 아래의 두 가지 명령은 모두 같습니다. 마음에 드는 것으로 실행합니다.

    sudo     su
    sudo     su     root
   
위의 명령들이 먹히지 않는다면 sudo 가 이상한 것입니다. 에러 메시지가 출력될 텐데요. 저는 아직 이것에 관한 해결방법을 찾지 못했습니다. 그냥, 리눅스를 다시 설치했죠. ^^;

root 의 비밀번호를 설정해줄 수 있습니다. passwd 명령을 사용합니다. 사용자의 비밀번호를 바꾸는 명령이죠.

    sudo passwd root
   
비밀번호를 설정하라는 메뉴가 나옵니다. 앞으로 사용할 root 비밀번호를 두 번 정확하게 입력한 다음부터는 root 계정의 비밀번호를 사용할 수 있게 됩니다. 많은 명령어를 타자 하다 보면 sudo 라는 명령어를 계속 쓰는 것이 까다롭게 느껴집니다. 그래서 아예 root 로 계정을 바꾸고서 작업을 하는 것입니다. 이제 root 가 되었으니 시스템의 모든 권한을 사용할 수 있습니다. 물론, 모든 디렉터리와 파일에 접근하여 그 설정을 바꿀 수 있겠죠? sudo 라는 명령어를 입력하지 않아도 되고요.







    2.2. 명령어 cp, rsync, tar 이해하기
   
파일의 모든 정보를 그대로 유지하면서 백업과 복구를 하려면 이 세 가지 명령어를 이해하는 게 좋습니다.
우선, cp 라는 명령은 복사하는 명령입니다. 아무런 옵션을 주지 않고 cp 를 이용해서 파일을 복사하면 퍼미션과 시간 정보 등이 복사를 시도한 계정과 현 시간으로 바뀝니다. 이래서는 올바른 백업이 안 되겠죠? 그래서 -a 옵션을 추가해서 모든 정보가 유지된 채로 복사가 되게끔 합니다. 숨김 속성을 포함한 모든 디렉터리와 파일이 백업됩니다.

    cp  -a  원본경로...    목적경로
   
보기 편하게 tab 을 이용하여 띄어쓰기를 하였는데요. 실제로는 한 칸 이상 띄우면 됩니다. '...' 은 여러 개 줄 수 있다는 의미입니다. 즉,

    cp  -a  원본경로   원본경로   원본경로   등등...     목적경로
   
이렇게 할 수 있다는 뜻이죠. 원하는 디렉터리와 파일을 복사해 놓은 후 다시 복사하려고 할 때는 -u 옵션을 추가해 줍니다. -u 옵션은 목적지에 대상이 없거나 있더라도 원본이 더 최신의 파일일 때만 덮어씌우기를 합니다. 즉, 목적지에 같은 파일이 있는데 목적지의 파일이 더 최신의 파일이라면 복사를 하지 않습니다.

    cp  -au     원본경로...  목적경로
   
-t 옵션을 추가해서 목적경로를 먼저 정하고 원본경로 들을 나열할 수 있습니다. -t 옵션을 줄 때는 순서를 정확히 지켜야 합니다. -t 옵션이 맨 나중에 와야 하고 바로 다음에 목적경로가 있어야 하죠. 헷갈릴 수 있으니 -t 옵션이 있다는 정도만을 기억하고 넘어가겠습니다.

    cp  -aut     목적경로   원본경로...
   
cp 명령만 제대로 알더라도 백업과 복구가 참 쉽겠죠? 작업 내용을 보면서 하려면 -v 옵션을 추가합니다.

    cp  -av     원본경로...    목적경로
    cp  -auv    원본경로...    목적경로
    cp  -auvt   목적경로       원본경로...
   
이렇게 말이죠.





백업과 복구를 좀 더 손쉽고 알차게 할 수 있는 명령어가 있습니다. 바로 rsync 입니다. rsync 는 명령어 자체가 업데이트입니다. 즉, 'cp -u' 가 적용된 상태라고 생각하면 편합니다. 그래서 rsync 로는 백업을 수없이 진행해도 새롭게 바뀐 파일만 복사가 됩니다. 또, rsync 는 네트워크로도 복사할 수 있고 증감을 선택할 수 있으므로 백업에 대해서는 cp 보다 더 특화되어 있다고 할 수 있겠습니다. 이 포스팅은 초심자분들을 위주로 한 것이므로 네트워크 백업까지는 이야기하지 않겠습니다. rsync 도 모든 정보의 보존을 위해서 -a 옵션을 주어 사용합니다. 'cp -a'와 마찬가지로 숨김 속성을 포함한 모든 디렉터리와 파일이 백업됩니다.

    rsync   -a  원본경로...  목적경로
   
cp 와 같죠? 리눅스의 모든 명령어는 이런 식으로 구성되어 있습니다. man 페이지를 보다 보면 명령어들이 일관성을 가지고 있다는 것을 알게 되더라고요. 다만, 대소문자는 철저하게 구별을 하니 주의해야 할 사항입니다.

rsync 에도 -u 옵션이 있습니다. cp 와 rsync 는 비슷하면서도 서로 다른데요. 헷갈릴 수 있으므로 간단히 설명하자면 'cp -au'와 'rsync -au'의 결과는 같고 'cp -a'와 'rsync -a'의 결과는 다릅니다. 역시나 'cp 무옵션'과 'rsync 무옵션'의 결과도 다릅니다. 우리는 헷갈리지 않고 속 편하게 결과가 같은 -au 옵션이 주어진 cp 와 rsync 를 사용하기로 합니다. 아래의 두 명령이 같다고 생각하면 편합니다. 이 두 가지 중에서 한 가지 명령만 알아도 백업과 복구를 정확하게 할 수 있습니다. 참 쉽죠?

    cp      -au    원본경로...    목적경로
    rsync   -au    원본경로...    목적경로 


rsync 도 마찬가지로 -v 옵션을 주어서 작업 내용을 확인하면서 진행할 수 있습니다. 


    rsync   -auv     원본경로...    목적경로

참고로 cp 와 rsync 의 차이점 중에서 '원본경로'에 관한 것이 있습니다. '원본경로' 다음에 '/' 가 있느냐 없느냐에 따라서 두 명령은 백업을 달리합니다. 가령, '원본경로/' 라고 입력하면 cp 는 '원본경로/'라는 폴더를 백업하고 rsync 는 '원본경로/' 아래에 있는 내용들을 백업합니다. '/home' 폴더를 백업한다고 했을 때요. 'cp /home/'과 'rsync /home/'이 다르다는 것입니다. 같게 하려면 아래와 같이 '원본경로'를 입력해야 합니다.

    cp      -au     원본경로/      목적경로
    rsync   -au     원본경로       목적경로
   
'/'가 있고 없고 하죠? 이것은 여러 번 사용해 봄으로써 자연스레 익혀질 것이니 우선은 두 명령의 개념을 안 것으로 만족하고 넘어가도 됩니다.




   
cp 와 rsync 만으로 백업과 복구를 계속하다 보면 언젠가는 부족함이 느껴질 때가 있습니다. 백업할 파일이 여러 개일 경우가 많으니 이를 한 개의 파일로 만들었으면 좋겠고 압축도 할 수 있으면 좋겠다는 생각이 드는 것이죠. 변경할 일이 없는 파일들을 백업하기에 매우 쉽겠죠? 주로 시스템을 백업할 때 많이 사용합니다. 이럴 때 쓰는 명령이 바로 tar 입니다. tar 는 명령어 자체에 퍼미션과 시간 정보가 원본 그대로 백업되게끔 되어있습니다. 기억 해야 할 옵션은 ‘-cf, -tf, -xf’ 이 세 가지입니다.

tar 는 -f 옵션 바로 다음에 '목적경로'가 있어야만 제대로 작동이 됩니다. cp 에서 -t 옵션을 준 것과 같은 상태이죠. 또, tar 는 지정한 경로 전체를 저장하는데 마지막에 지정한 곳만 퍼미션 정보가 원본 그대로 저장됩니다. 그래서 tar 는 cd 명령을 통하여 원본이 있는 곳으로 이동한 다음 작업하는 것이 가장 좋습니다. 약간 까다롭나요? 그런데 실상 사용해 보면 아주 쉽습니다. cd 명령부터 알아야 하겠죠?

    cd  원본경로
    

"tar 로 백업 할 때는 원본이 있는 곳으로 가서 작업한다."를 기억하세요.

예를 들어, tar 로 ‘/home/사용자이름’을 ‘/recovery/사용자이름-1.tar’ 로 백업한다면 이렇게 되겠습니다. 먼저 recovery 라는 디렉터리를 만든 다음에 /home 으로 이동을 해서 tar 명령을 실행합니다. 옵션은 파일을 생성하는 것이니 -cf 가 사용됩니다. 'cp -a', 'rsync -a'와 마찬가지로 숨김 속성을 포함한 모든 디렉터리와 파일이 백업됩니다. 첫 줄의 mkdir 은 디렉터리를 생성하라는 명령입니다.

    mkdir   /recovery
    cd          /home
    tar         -cf         /recovery/사용자이름-1.tar     사용자이름

혹시라도 퍼미션 정보가 제대로 백업되지 않았다면 -p 옵션을 추가합니다. 옵션을 -cpf 라고 입력하는 것이죠. 제가 사용하는 환경에서는 tar 명령이 -cf 옵션만으로도 퍼미션과 시간 정보를 원본대로 백업하였습니다. (필자의 리눅스 버전 : kubuntu-17.10.1-desktop-amd64)

아래도 같은 명령입니다. 경로를 './사용자이름'이라고 상대경로를 적어줬습니다. tar 로 백업을 할 때 원본에 절대 경로를 쓰지 않는 이유는 위에서 설명하였습니다.

    tar     -cf         /recovery/사용자이름-1.tar     ./사용자이름

생성된 '사용자이름-1.tar' 를 열어보면 '사용자이름'이라는 폴더가 먼저 보일 것입니다. 이렇게 하지 않고 '사용자이름'이라는 폴더 아래에 속한 내용만 묶고 싶을 때는 경로를 바꿔주면 됩니다.

    cd      /home/사용자이름
    tar     -cf         /recovery/사용자이름-2.tar     .
   
cd 명령으로 이동한 곳이 다르죠? 원본경로에 따라서 만들어지는 tar 파일의 내용이 다르므로 경로에 신경을 쓰면서 작업해야 합니다. 마지막에 있는 '.'은 현재 경로라는 뜻입니다. 즉, 현재 경로에 있는 디렉터리와 파일을 지정한 것이죠. 해당 위치에 있는 숨김 속성을 포함한 모든 내용이 백업됩니다. 이렇게 생성된 '사용자이름-2.tar'를 열어보면 '사용자이름'이라는 폴더는 보이지 않고 그 아래의 내용이 보일 것입니다.

이번에는 -z 옵션을 추가해서 묶음과 동시에 압축을 해보겠습니다.

    cd      /home
    tar     -cf         /recovery/사용자이름-1.tar.gz   -z     ./사용자이름
   
    cd      /home/사용자이름
    tar     -cf         /recovery/사용자이름-2.tar.gz   -z     .
   
압축 효율은 일반 파일을 기준으로 약 40%~50% 정도 됩니다. 효율이 매우 좋은 편이죠. 참고로 이미 압축이 되어있는 mp3, mp4 등등의 음악 파일과 영상파일은 압축이 안 되니 참고하시기 바랍니다. -z 옵션은 앞에 주어도 됩니다. 단, -f 옵션이 맨 나중에 와야 합니다.

    cd      /home
    tar     -czf         /recovery/사용자이름-1.tar.gz     ./사용자이름
   
    cd      /home/사용자이름
    tar     -czf         /recovery/사용자이름-2.tar.gz     .

생성될 파일 이름은 자유롭게 줄 수 있습니다.

    cd      /home
    tar     -cf         /recovery/사용자이름-1   -z     ./사용자이름
   
    cd      /home/사용자이름
    tar     -cf         /recovery/사용자이름-2   -z     .
   
이렇게 확장자를 생략해도 된다는 것입니다. 파일 이름은 사용자가 알아보기 쉽게 하려고 표시해 놓는 것이므로 편할 대로 합니다. x 윈도상에서 유틸을 이용하여 압축파일을 열어볼 때 확장자를 인식하는 때도 있으므로 되도록 어떤 압축기를 썼는지 표현해 주는 것이 좋겠죠? 그래서 뒤에 '.tar.gz 또는 .tgz'를 확장자로 붙여주는 것입니다. 또, 압축기를 지정하는 옵션은 -z 이외에도 '-J, --lzma' 등등으로 많습니다. 이것은 각자가 해보도록 하고 우선은 가장 많이 쓰이는 gzip 을 기준으로 서술하였습니다.

묶음 파일을 확인 할 때는 -tf 옵션을 주어 열어봅니다.

    tar     -tf     /recovery/사용자이름-1.tar 
    tar     -tf     /recovery/사용자이름-2.tar 
   
파일의 내용이 경로와 더불어 화면에 보여집니다. 내용이 너무 많아서 한 화면에서 확인이 어려울 때는 파일로 저장해서 열어볼 수 있습니다.

    tar     -tf     /recovery/사용자이름-1.tar    >   list-1
    tar     -tf     /recovery/사용자이름-2.tar    >   list-2
   
파일 내용이 list 라는 파일로 저장됩니다. 저장될 파일 이름과 경로는 편할 대로 해도 됩니다.

    tar     -tf     /recovery/사용자이름-1.tar   >   list-1.txt
    tar     -tf     /recovery/사용자이름-1.tar   >   사용자이름-1.txt
    tar     -tf     /recovery/사용자이름-1.tar   >   /home/사용자이름-1.lst
   
'&&' 를 사용하여 list 파일을 생성한 다음 less 로 바로 확인하게끔 할수도 있습니다.

    tar     -tf     /recovery/사용자이름-1.tar   >   list-1    &&  less  list-1
    tar     -tf     /recovery/사용자이름-2.tar   >   list-2    &&  less  list-2
   
이렇게 하면 목록을 파일로 저장한 다음 less 를 이용하여 보여줍니다. '&&' 는 여러 가지 명령을 차례로 실행할 때 사용되는 기호입니다. 시간이 오래 걸리는 명령들을 묶어서 사용하면 참으로 편리합니다.

다음은 묶어진 파일을 풀어보겠습니다. 이때는 -xf 옵션을 사용합니다. 아까 만들어진 tar 파일들을 다시 원위치로 복구한다면 이렇게 되겠습니다.

    cd      /home
    tar     -xf     /recovery/사용자이름-1.tar   .
   
    cd      /home/사용자이름
    tar     -xf     /recovery/사용자이름-2.tar   .
   
cd 로 이동한 경로는 같고 tar 명령도 같은데 옵션만 바뀌었죠? 이렇듯 어렵지 않게 구성되어 있습니다.
   
-C 옵션을 사용하면 cd 로 이동하지 않고 절대 경로를 사용할 수 있습니다. -C 옵션은 대문자입니다.

    tar     -xf     /recovery/사용자이름-1.tar     -C      /home
    tar     -xf     /recovery/사용자이름-2.tar     -C      /home/사용자이름

이번에는 압축한 파일을 풀어볼까요? 압축된 파일 일지라도 -xf 옵션만으로 제대로 복구됩니다.

    cd      /home
    tar     -xf     /recovery/사용자이름-1.tar.gz   .
   
    cd      /home/사용자이름
    tar     -xf     /recovery/사용자이름-2.tar.gz   .
   
백업파일을 생성할 때는 -cf 내용을 확인할 때는 -tf 풀 때는 -xf 입니다. cp, rsync 와 마찬가지로 tar 로도 백업과 복구를 쉽게 할 수 있겠죠? 처음에는 잘 안되더라도 몇 번 쓰다 보면 아주 쉽게 사용됩니다. 각자가 쉽다고 생각되는 명령으로 사용하세요. 참고로 저는 rsync 와 tar 를 사용합니다. 변경 사항이 있는 경우는 rsync 로 백업해놓은 다음에 계속 싱크를 하고 변경 사항이 없는 경우는 tar 로 압축을 해놓습니다.





    2.3. 리눅스 시스템 백업하기

이제부터 본격적으로 리눅스 시스템을 백업해보도록 하겠습니다. 시스템 백업은 변경 사항이 없는 것이므로 tar 에 -z 옵션을 추가하여 압축합니다. 백업하면서 용량도 줄일 수 있으니 일거양득이라 하겠습니다. 시점별로 백업파일 여러 개를 만들어 놓고 사용할 수도 있겠죠? 필자는 설치 직후 바로 첫 번째 백업을 하고 모든 유틸의 설치와 업데이트를 마친 다음 두 번째 백업을 합니다. 그래서 시스템 백업파일이 두 개입니다.

시스템을 백업하고 복구하는 데는 주의해야 할 사항이 몇 가지 존재합니다. 부팅과 마운트라는 개념을 이해해야 하기 때문입니다. grub-install 과 grub-mkconfig 를 사용하여 부팅정보를 입력, 수정하고 에디터로 fstab 이라는 마운트 정보를 수정해야 합니다. 정확한 백업파일과 부팅정보와 마운트 정보만 있다면 어떤 시스템이라도 제대로 복구할 수 있습니다.

부팅이 되어있는 상태로 그 시스템을 백업한다는 것은 번거로운 일입니다. 드라이버 폴더와 마운트된 폴더 등의 가상 폴더들을 제외해 주어야 하고 복구할 때 다시 만들어줘야 하는 번거로움이 있는데 그 과정에서 자칫 제외해놓지 않은 폴더를 백업해 버리면 그 시간과 용량은 손해가 매우 큽니다. 또한, 시스템을 지울 경우 마운트 되어있던 백업파일까지도 지워버릴 수 있으므로 반드시 리눅스 라이브 DVD 또는 USB 로 부팅하여 시스템 백업 작업을 합니다. 시스템 백업은 꼭 이렇게 하시기 바랍니다.

이 포스팅에서는 리눅스 시스템을 백업한 다음 USB에 그 시스템을 입혀서 사용하는 경우를 가정하겠습니다. cp 또는 rsync 를 이용하여 바로 USB 에 입혀도 되지만, tar 를 이용하여 백업 원본을 만들어 놓는다면 하드디스크와 USB의 시스템이 망가지더라도 곧바로 복구할 수 있으니 안전하게 이 방법을 사용하겠습니다.

    "백업은 아무리 강조해도 지나치지 않습니다."

만들어진 리눅스 USB 를 가지고 다니면서 나만의 OS 로 사용할 수 있겠죠? 또, cp 또는 rsync 를 통해서 하드디스크에서 USB 로, USB 에서 하드디스크로 서로서로 백업과 복구를 해가면서 자유롭게 사용할 수 있습니다.

준비되셨다면 리눅스 라이브 DVD 또는 USB 로 부팅을 한 후 터미널(콘솔)을 하나 엽니다. 제가 사용한 환경은 kubuntu-17.10.1-desktop-amd64 입니다. 없다면 우선, DVD 가 만들기 쉬우니 원하는 버전의 '.iso' 파일을 내려받아서 DVD 라이터로 이미지 굽기를 하면 됩니다. 라이브 USB 를 만드는 방법은 따로 포스팅하겠습니다.

준비되셨나요? 그렇다면 root 로 로그인을 한 다음 fdisk -l 명령으로 현재 인식된 드라이브들을 확인하겠습니다.

    sudo    su
    fdisk   -l




   
보통은 /dev/sda 가 시스템이 설치된 하드디스크일 것입니다. 요새의 컴퓨터는 대부분이 sata 방식의 하드디스크를 사용하므로 /dev/hda 보다는 /dev/sda 가 보일 것입니다. 그중에서 시스템이 설치된 파티션을 확인합니다. 파티션이 한 개라면 /dev/sda1 이 되겠죠. 목록에 파일 시스템이 자세하게 나와 있으니 확인하기 쉽습니다. 저의 경우는 /dev/sda2 가 리눅스 시스템이 존재하고 있는 파티션입니다. 한 개의 파티션으로 사용을 하던 분이시라면 파티션을 추가하거나 외장 하드디스크 또는 USB 3.0을 추가하여 줍니다. 파티션 변경 시에는 소중한 데이터를 모두 날려버릴 수 있으니 주의하세요. 외장 하드디스크나 USB 3.0을 추천합니다.
   
사진에서 맨 아래에 보이는 드라이브는 제 노트북에 꽂혀 있는 USB 입니다. /dev/sdb1 로 인식되어 있습니다. 백업을 진행한 후 이곳에 리눅스 시스템을 입혀보겠습니다. USB 에서 리눅스 시스템을 사용하려면 2.0은 너무 느리니 꼭 3.0을 사용하세요. 리눅스는 10G 정도만 되더라도 설치할 수 있습니다. 요새는 100G 가 넘는 USB 3.0 도 3만~4만 원대에 구매할 수 있더군요. 그리 큰 부담을 안 될 것입니다.

드라이브를 확인했다면 바로 백업을 진행합니다. 우선, 백업할 하드디스크와 저장할 하드디스크를 마운트 합니다. 마운트 한다는 것은 저장장치를 사용하기 위해서 시스템에 인식을 시켜주는 단계입니다. 참고로 리눅스는 '.iso' 파일도 mount 명령으로 인식시킬 수 있습니다. 저는 /dev/sda2 를 /dev/sda4 로 백업하려고 하니 두 디스크를 마운트 하겠습니다. mkdir 명령으로 폴더를 생성한 다음 그 폴더에 마운트 할 수도 있으나 여기서는 편의상 이미 만들어져 있는 마운트 전용 폴더를 이용하겠습니다.

    mount   /dev/sda2   /mnt
    mount   /dev/sda4   /media
   
아무런 메시지가 출력되지 않으면 잘 마운트 된 것입니다. 오류가 날 경우에는 오류 메시지가 출력됩니다. 해당 디스크를 확인을 해보고 싶으신 분들은 ls 명령으로 확인해봅니다.

    ls  /mnt
    ls  /media
   
잘 마운트가 되었다면, 이제 /mnt 의 모든 디렉터리와 파일을 /media 로 옮기면 되겠죠? tar 를 이용하여 한 개의 파일로 압축 백업을 하겠습니다. 기억할 것은 "tar 로 백업 할 때는 원본이 있는 곳으로 가서 작업한다 ."입니다.

    cd      /mnt
    tar     -cf     /media/linux-k-17_full.tar.gz    -z      .

간단하죠? 마지막에 '.' 잊지 마세요. 시간이 걸리는 명령을 잘 못 입력했다면 작업 취소는 'ctrl+c'이고 작업 정지는 'ctrl+z'입니다. 모든 명령에 적용되니 참고하시기 바랍니다. 작업 내용을 보면서 백업하고 싶다면 -v 옵션을 추가하면 됩니다.

    tar     -cvf     /media/linux-k-17_full.tar.gz    -z      .
   
시간이 걸리는 작업이다 보니 저는 백그라운드로 실행을 해놓고 다른 작업을 하면서 놉니다. 가령 top 명령으로 시스템의 현 상황을 지켜본다든지 하죠.

    tar     -cf     /media/linux-k-17_full.tar.gz    -z      .  &
    top
   
위와 같이 명령 끝에 '&' 를 붙여주면 해당 명령은 백그라운드로 작업 됩니다. -v 옵션을 주었을 때는 백그라운드로 보내더라도 작업 내용이 계속 출력되므로 백그라운드 작업에는 -v 옵션을 잘 사용하지 않습니다. top 도 마찬가지로 'ctrl+c' 나 'ctrl+z' 를 입력하여 빠져나올 수 있습니다. 백그라운드 작업을 확인하려면 jobs 명령을 사용합니다.

    jobs
   
번호와 함께 백그라운드로 실행되고 있는 작업이 출력됩니다. 이 번호로 해당 작업을 이동시킬 수 있습니다. fg 와 bg 를 이용합니다. '&' 기호를 추가하지 않아서 오래 걸리는 작업이 포그라운드로 실행되었다면 'ctrl+z'로 정지를 시킨 다음에 'bg %번호' 명령으로 백그라운드로 작업 되게끔 할 수 있습니다. 반대로 백그라운드로 실행되고 있는 작업을 'fg %번호' 명령으로 포그라운드로 보이게끔 할수도 있죠. 작업이 한가지라면 '%번호'는 생략해도 됩니다.

    tar     -cf     /media/linux-k-17_full.tar.gz    -z      .
    ctrl+z
    bg
   
포그라운드로 실행되던 tar 명령이 멈춘 다음 백그라운드로 이동하여 작업을 이어가게 됩니다. 다시 포그라운드로 이동시키려면 fg 를 입력하면 되겠죠?

    fg
   
시스템을 백업하는 데 시간이 걸린다고 해도 제 노트북의 사양을 기준으로 10G 를 백업하는데 대략 20~25분 정도 걸렸습니다. 압축이 되는 것까지 고려한다면 그리 오래 걸리지 않는 시간입니다. 복구는 10분 내외로 되니 참 빠른 편입니다. 리눅스 시스템과 유틸을 모두 새롭게 설치하는 시간에 비교하면 아무것도 아니죠.

작업이 모두 끝났다면 해당 경로 아래에 백업파일이 잘 만들어져 있을 것입니다. 확인해볼까요?

    ls      -l      /media/linux-k-17_full.tar.gz
   
퍼미션 정보와 함께 백업된 tar 파일이 보일 것입니다.





    2.4. 리눅스 시스템 복구하기
   
현재 사용자가 위치한 /mnt 의 모든 내용을 지우고 방금 백업했던 파일을 풀어주면 전과 똑같은 상태가 됩니다. 시간이 남는 분들만 해보시기 바랍니다.

    rm      -r      *
    tar     -xf     /media/linux-k-17._full.tar.gz      .
   
rm 은 지우는 명령이고 -r 옵션은 디렉터리를 지울 때 사용합니다. '*' 은 '모든 것'을 뜻합니다. 단, 숨김 속성은 해당되지 않습니다. 숨김 속성이 있다면 상위 디렉터리를 지워야 하죠. 'rm -r /mnt' 이렇게요. rm 명령 대신 mkfs 명령으로 파일 시스템을 재구축 해도 됩니다. 파일 시스템을 재구축하면 해당 디스크의 UUID 가 변경되므로 grub.cfg 파일과 fstab 파일을 갱신해주어야 합니다. grub.cfg 파일과 fstab 파일을 갱신하는 방법은 아래에서 설명하겠습니다. 역시나 tar 명령 끝에는 현재 경로를 나타내는 '.' 이 있습니다.

이제 USB 에 시스템을 입히겠습니다. 우선, USB 가 마운트되어 있다면 해제를 합니다.

    umount      /dev/sdb1
   
마운트 해제 명령이 unmount 가 아닌 umount 임을 잘 확인합니다. 처음에 저도 잘 못 입력해 놓고서 '왜 마운트 해제가 안 될까?'를 고민했던 적이 있었습니다.^^; 조용하면 마운트가 잘 해제된 것이고요. 에러 메시지가 출력되면 마운트가 되어 있지 않은 상태이므로 바로 다음을 진행하면 됩니다. 참고로 마운트 되어있는 장치들을 보는 명령은 mount 입니다.

    mount
   
보통은 USB 의 파일 시스템이 fat 이나 ntfs 일 것이니 이것을 리눅스 전용 파일 시스템인 ext4 로 만들어 줍니다. 명령은 mkfs 가 사용됩니다. 아래의 두 명령은 같습니다. 마음에 드는것으로 사용하세요.

    mkfs.ext4                           /dev/sdb1
    mkfs            -t      ext4        /dev/sdb1
   
참고로 ntfs 파일 시스템으로 빠른 포맷을 하고자 한다면 아래처럼 합니다. 역시나 두 명령은 같으니 마음에 드는것으로 사용하세요. -Q 옵션은 대문자입니다.

    mkfs.ntfs   -Q                          /dev/sdb1
    mkfs            -t      ntfs    -Q      /dev/sdb1
   
이제 파일 시스템까지 잘 만들어진 USB 에다가 리눅스 시스템을 입힐 차례입니다. 아까 마운트했던 /dev/sda2 는 일을 모두 마쳤으므로 마운트를 해제하겠습니다. 사용자가 위치한 경로가 /mnt 임으로 cd 명령으로 이동 후 umount 합니다. 왜냐하면, 사용자가 있는 경로는 마운트 해제가 안 되기 때문입니다. 그리고서 USB 를 마운트 한 후 tar 명령으로 풀어주면 되겠죠? cd 만을 입력하면 해당 계정의 홈 디렉터리로 이동하게 됩니다.

    cd
    umount      /mnt
    mount       /dev/sdb1   /mnt
    tar         -xf         /media/linux-k-17_full.tar.gz       -C      /mnt
   
-C 옵션을 빼고자 한다면 'cd /mnt'라는 명령 줄이 추가됩니다.

    cd
    umount      /mnt
    mount       /dev/sdb1   /mnt
    cd              /mnt
    tar         -xf         /media/linux-k-17_full.tar.gz       .
   
tar 명령 마지막에 현재 경로를 뜻하는 '.' 을 적어주는 것을 꼭 기억하세요. 모든 내용이 잘 풀어졌다면 이제 부팅 설정과 마운트 설정만 잘 해주면 USB 로 리눅스 시스템을 사용할 수 있습니다. 거의 다 왔습니다. 힘내세요.

grub-install 명령으로 부트로더를 설치합니다. 이때 '--boot-directory=경로' 옵션으로 부트 디렉터리를 지정해줄 수 있습니다.

    grub-install    /dev/sdb    --boot-directory=/mnt/boot
   
마지막에 아래와 같은 메시지가 출력되었다면 성공입니다.
   
    Installation finished. No error reported.
   
부트로더가 성공적으로 설치되었다면 이제는 'grub.cfg' 라는 부팅 설정 파일을 만들어 줍니다. 여기에는 두 가지 방법이 있습니다.

첫 번째 방법은, 현재의 상태에서 grub.cfg 파일을 만들어 준 다음에 USB 로 처음 부팅할 때 recovery 모드로 들어가서 grub 를 업데이트해주는 방법입니다. 이 방법이 가장 간단하지만, recovery 모드가 없는 다른 시스템에서는 적용되지 않을 수 있습니다. 방법은 아래와 같습니다.

        grub-mkconfig     -o     /mnt/boot/grub/grub.cfg 

나중에 USB 로 처음 부팅할 때 recovery 모드로 진입 후 'grub 업데이트' 실행 

        그리고 재부팅
   
두 번째 방법은, 'chroot' 명령을 써서 '/mnt' 로 '/' 를 바꾼 다음 grub.cfg 파일을 만들어 줍니다. 이 방법은 USB 로 처음 부팅할 때 recovery 모드로 들어가지 않아도 된다는 것과 recovery 모드가 없는 여러 시스템에 같게 적용될 수 있다는 장점이 있습니다. 이 방법을 익혀두는 것이 좋겠죠? 필자는 두 번째 방법을 선호합니다. 가장 정확한 방법이기도 하고요.

우선, /mnt 에는 드라이버 설정 파일이 없으므로 현재 부팅되어있는 드라이버 정보를 bind 한 후 chroot 를 합니다.
   
    mount   --bind      /proc       /mnt/proc
    mount   --bind      /sys        /mnt/sys
    mount   --bind      /dev        /mnt/dev
    mount   --bind      /dev/pts    /mnt/dev/pts
    chroot     /mnt
   
드라이버를 모두 bind 하였고 root 를 /mnt 로 변경하였습니다. 확인해볼까요?

    ls  /
    whoami
   
/mnt 아래에 있던 내용이 / 로 보입니다. 또, whoami 명령에는 'root' 라고 답할 것입니다. 이제 /mnt 폴더에서 root 가 되었으니 이 상태로 grub.cfg 파일을 만들어 주면 됩니다.

    grub-mkconfig   -o   /boot/grub/grub.cfg
   
-o 옵션 다음의 파일 경로는 아까 grub-install 명령을 줄 때 '--boot-directory=경로'로 지정해준 /boot 입니다. 오류가 없이 잘 진행이 되었다면 아래와 비슷한 메시지가 출력됩니다. 마지막에 'done'이라고 표시되죠.

    Generating grub configuration file ...
    Found linux image: /boot/vmlinuz-4.13.0-36-generic
    Found initrd image: /boot/initrd.img-4.13.0-36-generic
    Found linux image: /boot/vmlinuz-4.13.0-21-generic
    Found initrd image: /boot/initrd.img-4.13.0-21-generic
    Found memtest86+ image: /boot/memtest86+.elf
    Found memtest86+ image: /boot/memtest86+.bin
    Found Windows 10 on /dev/sda3
    done

이제 fstab 만 설정해주면 완벽하게 복구가 완료됩니다. blkid 명령으로 UUID 를 확인해서 fstab 에 입력해 줍니다. 터미널 창에서의 복사는 'ctrl+shift+c' 이고 붙여넣기는 'ctrl+shift+v' 입니다.

    blkid
    해당 부분을 마우스로 선택 후 'ctrl+shift+c' 로 복사
   
편집기는 편한 것으로 사용합니다. 터미널(콘솔)에서 사용하는 편집기로는 대표적으로 vi 와 nano 가 있습니다. vi 는 명령모드와 편집모드가 따로 있어서 처음 접하는 사람은 매우 어렵게 느껴지므로 nano 를 사용하는 것으로 하겠습니다.

    nano    /etc/fstab
   
fstab 이 열리면 아래의 '편집할 부분'에 UUID를 입력합니다. 터미널(콘솔)에서의 편집은 마우스가 아닌 커서로 이동을 해서 입력해야 합니다.

    UUID='편집할부분'       /               ext4    errors=remount-ro       0       1
   
'편집할부분'을 지우고 아까 복사해 두었던 UUID 를 'ctrl+shift+v'를 입력하여 붙여넣기를 합니다. 이후 'ctrl+x' -> 'y' 순서대로 입력하면 저장하면서 빠져나오게 됩니다. UUID 의 복사와 붙여넣기가 힘든 조건이라면 수기로 적어서 입력할 수도 있겠습니다. 이마저도 힘들다면 '편집할 부분'에 /dev/sdb1 을 입력하여 줍니다. 시스템 대부분에서는 하드디스크를 하나만 사용하므로 USB 를 꽂으면 /dev/sdb1 으로 잡힐 것입니다. 만약, 하드디스크가 3개 있다면 이 시스템에서의 USB 부팅은 /dev/sdd1 이 되겠죠? 드라이버 명을 적는 것은 디스크 개수에 맞게 fstab 을 편집해야 하므로 가장 확실한 UUID 를 사용하여 fstab 을 편집해 두는 것이 가장 좋습니다.

참고로 제 노트북의 fstab 은 아래와 같습니다.

    # /etc/fstab: static file system information.
    #
    # Use 'blkid' to print the universally unique identifier for a
    # device; this may be used with UUID= as a more robust way to name devices
    # that works even if disks are added and removed. See fstab(5).
    #
    # <file system> <mount point>   <type>  <options>       <dump>  <pass>
    # / was on /dev/sda2 during installation
    UUID=9089892a-cfd4-4b65-971d-2f1cec2f1b46    none    swap    defaults    0    0 
    UUID=0ab24418-d1a9-49c8-8c75-f02edc92f9a7    /    ext4    errors=remount-ro         0       1
    UUID=78E0DF7AE0DF3D56      /windows    ntfs    defaults    0    2

    UUID=5663392952E39DA8    /data    ntfs    defaults    0    2 
   
한 개의 하드디스크에 네 개의 파티션이 있고 각각의 UUID 로 설정이 되어있습니다. 이 방식이면 부팅을 시도하는 디스크를 확실하게 인식할 수 있습니다. 만약, 이 설정이 다르다면 절대로 부팅이 되지 않겠죠?

부팅에 있어서 가장 중요한 세 가지입니다. 부트 로더인 grub 설치와 grub.cfg 파일 생성 그리고 fstab 수정. 꼭 기억하세요.

이제, chroot 상황을 해제하고 bind 했던 드라이버와 마운트했던 디스크들을 umount 해준 후 재부팅 하여 USB 로의 부팅을 시도해 보겠습니다.

    exit
    cd
    umount  /mnt/dev/pts
    umount  /mnt/dev
    umount  /mnt/sys
    umount  /mnt/proc
    umount  /mnt
    umount  /media
    reboot

시스템 복구 후 처음 부팅할 때는 드라이버 인식 과정과 커널 설정 등을 거치므로 약간의 시간이 더 걸립니다. 인내심을 가지고 기다리다 보면 '로그인' 화면을 볼 수 있을 것입니다. 로그인 화면이 보인다면 모든 과정이 잘 끝마쳐진 것입니다.

여기까지 따라오셨다면 리눅스 시스템의 백업과 복구를 자유자재로 할 수 있는 경지에 다다랐습니다. 축하합니다. ^^





    3. 마치며

리눅스는 참으로 매력이 많은 OS 입니다. 공개 소스라는 강점, 수많은 사용자가 함께 만들어 간다는 것. 이 두 가지만으로도 가슴을 두근거리게 합니다. 장래가 촉망되는 시스템이죠. 이미 수많은 기업과 개인이 리눅스를 사용하고 있습니다. 우리가 함께 만들어 갈 수 있는 여건이 조성된 리눅스. 기백 만 원의 상용 프로그램과 똑같은 기능을 손쉽게 이용해볼 수 있고 또한, 자신이 직접 수정할 기회가 있는 곳. 이런 리눅스를 이번 기회에 한 번 사용해 보시기를 적극적으로 권장합니다. 긴 내용 따라오시느니라 수고가 많으셨습니다. 앞으로 즐거운 리눅스 생활이 되기를 진심으로 바랍니다. ^^

고마움이 느껴지신다면 저에게 기부를 해주실까요??

감사합니다. ^^;




728x90
반응형
Comments