Linux 시스템 백업과 복원

nike984의 이미지

이글은 우분투 포럼에 A-star라는 작자가 올린 글을 요약 정리 한겁니다.
http://ubuntuforums.org/showthread.php?t=81311

방법은 간단합니다.
tar로 전체 시스템을 압축하는 명령어를 사용하면서
/proc , /lost+found , /mnt , /sys 는 제외하고 압축하고
나중에 복원은 이 파일 압축 푸는 방식입니다.

===========압축=========================

방법은 아래에 순서대로 작성했습니다.

sudo su
cd /
tar cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/media --exclude=/sys /

그러니까 루트 권한으로 바꾸고 나서 최상위 리스트로 올라가서 tar 명령어를 적용하는데
압축 파일이름은 backup.tgz로 하고 압축시 /proc , /lost+found , /mnt , /sys, /media 는 제외하자는 겁니다.
각자 사정에 맞춰서 제외할 디렉토리는 더 추가하시면 되겠죠.

그런 후에 backup.tgz파일을 dvd로 굽든 랜으로 다른 컴터로 옮기시든 하시면 되겠죠.

압축 종료후 나오는 'tar: Error exit delayed from previous errors'란 메세지는 쌩까시면 됩니다.
압축률을 좀더 높이자면 Bzip2나 7zip으로 압축하시면 됩니다.
Bzip2로 압축할 경우 아래 명령어를 쓰시면 됩니다. (cvpzf에서 cvpjf로 옵션을 바꿔야합니다.)

tar cvpjf backup.tar.bz2 --exclude=/proc --exclude=/lost+found --exclude=/backup.tar.bz2 --exclude=/mnt --exclude=/media --exclude=/sys /

==============복원===================
backup.tgz는 루트디렉토리에 있어야합니다.
sudo su
그리고 아래 명령어를 먹여주면 됩니다.
tar xvpzf backup.tgz -C /

Bz2로 압축한 경우
tar xvpjf backup.tar.bz2 -C /

그러고 나서 압축시 제외했던 폴더는 따로 만들어 주면됩니다mkdir sys.
아래처럼
mkdir proc
mkdir lost+found
mkdir mnt
mkdir sys
mkdir media
etc...
=====================================

만약 압축하고 자시고 하는게 너무 귀찮다하시면 아래 방법을 쓰면 됩니다.
이건 어떤 분 블러그에서 보고 배운건데
원본 시스템이 깔린 하드 A가 있고 그 시스템을 똑같이 복사할 하드 B가 있다고 하면
하드 B를 하드 A에 케이블로 연결을 해서 아래 명령어를 적용시키면 됩니다.

cat (하드A) > (하드B)

만약 하드 A 위치가 /dev/hdb이고 하드 B 위치가 /dev/hdc라면 이렇게 되는거죠.

cat /dev/hdb > /dev/hdc

그러면 하드A의 내용이 하드B에 완전히 모조리 똑같이 백업됩니다. 당연히 시스템 디바이스 관련된것도
같이 가니까 사용할 컴터 스펙은 동일해야겠죠.

Forums: 
poss의 이미지

아, gzip으로 그냥 압축을 하는군요.

전 tar보다는 dump를 선호합니다만, 압축할땐 편하겠군요.

디스크 사이즈가 똑같다면, dd가 더 낫지 않을까요? 혹시 cat로도 부트영역까지 복사가 되는지요?

monovision의 이미지

cat 으로 하면 부트영역까지 복사가 됩니다.

nike984의 이미지

예, cat 명령은 그런걸로 알고 있습니다.
예전에 저 내용을 블러그에 올리신분이 전산실에 동일한 컴터, 동일한 스펙, 동일한 구성으로
똑같은 내용을 200대인가? 암튼 여러 컴터를 동시에 셋업할때 저 방법을 사용했다고 들었습니다.

저걸 그대로 똑같이 사용하면 컴터 구성이 달라지면 문제가 발생하겠지만
조금 응용하면 쉽게 하는 방법을 찾을 수 있을걸로 보이는데요.

익명 사용자의 이미지

한 가지 걱정이 없어졌습니다. 좋은 자료 감사합니다 :-)

engineon의 이미지

'소중하지 아니한 것이 없다'

'소중하지 아니한 것이 없다'

이은태의 이미지

한 3000대 정도 저렇게 작업하고 있습니다. :-)

:-)

Mr.Dust의 이미지

굉장히 많은 대수라면.. 고스트 멀티캐스트를 이용하는 편이 낫지 않습니까?
(코퍼버전이 리눅스를 지원하는지는 잘 모르겠지만..)

3000대의 하드를 뗏다붙였다 할 생각을 하니 ㄷㄷ

pchero의 이미지

좋은 정보 감사합니다.

블로그에 퍼갈께요. : )

---------------------------------
제일 왼쪽이 저입니다 :)

---------------------------------
제일 왼쪽이 저입니다 :)

monovision의 이미지

tac 과 sfdisk 를 이용한 방법도 있습니다.
데이터 양에 따라 다르겠지만 cat 으로 통짜로 복사하는 방법보다 대개 수십배 빠릅니다.

kirrie의 이미지

엄청 느리겠습니다만, 원격지의 하드를 로컬로 옮기는 것도..

> ssh remotehost "cat /dev/hdb" | cat > /dev/hdb
--->
데비안 & 우분투로 대동단결!

--->
데비안 & 우분투로 대동단결!

netskate의 이미지

저는 dd 밖에는 생각이 안났습니다.
다만 성능 자체는 dd 가 낫지 않을까 싶네요.

===================================================
Make it Simple, Easy, Compact !!!!

select99의 이미지

파티션되있어도 잘작동할까요?

cat /dev/sda1 > /dev/sda2

파티션 크기가 달라도될까요.. 물론 후자가 클경우..

OpenSnake의 이미지

좋은 방법이군요....
저는 지금까지 dd if=/dev/sda1 of=backup , dd if=backup of=/dev/sda1
이런식으로 해결했었거든요.... -_-;;

--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.

--------------------------------------------
혼자있고 싶습니다. 모두 지구밖으로 나가주세요.

hotdigi의 이미지

모바일 기기(노키아 n900)에서 이방법으로 해보려고 하니,
압축할때 정말 많은 시간이 걸리네요.ㅠ.ㅠ.

gloomyr의 이미지

cat 은 엄청 느리지않나요?? 장난 아니던데..
tar 압축은 왠지 엄청 귀찬치 않나요??

dd로 size 100M 주고하는게 젤 빠른듯합니다.
320g 30분 내외면 완료 하던데..

dokeun의 이미지

좋은 정보 감사합니다.

막상 따라 해보니 아래와 같은 에러가 납니다.

tar: /: file changed as we read it
tar: Exiting with failure status due to previous errors

처음에 압축도중 이메일보고선 이메시지 받아서 그런가보다 하고 다시 시도했는데 동일한 메시지가 발생합니다.

첫번째 에러 메시지에 대해 검색해보니 아래의 사이트에서 옵션으로 --ignore-failed-read를 쓰라고 합니다.

http://www.ensode.net/roller/dheffelfinger/entry/tar_failing_with_error_message

혹시 이 옵션으로 무시되는 부분이 나중에 복원시에 문제가 안되나요? 또는 옵션없이 압축해서 에러가 나더라도 복원하는데 문제는 없습니까?

참고로 그사이에 두가지 경우 모두 해봤는데 ignore 옵션 쓰나 안쓰나 용량은 같네요.

vhgksl의 이미지

cat에 저런 재주가 있었다니 신통방통이네요.

rururara429의 이미지

sudo tar cvpzf backup114t.tgz --exclude=/proc --exclude=/lost+found --exclude=backup114t.tgz --exclude=/mnt --exclude=/media/* --exclude=/sys /

하니까

tar: Exiting with failure status due to previous errors

라는 오류가 뜹니다.
왜 그럴까요?

rururara429의 이미지

sudo tar cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=backup.tgz --exclude=/mnt --exclude=/media/* --exclude=/sys /

tar: Exiting with failure status due to previous errors 오류 무시하고

tar xvpzf backup.tgz -C /

풀었는데

이상하게
와이파이도 정상적으로 잡히는데
웹브라우저 인터넷 연결이 안 되네요 T_T
다행히 어제 클론질라 백업본이 있어서 재복구 했지만 에구.

MyAbby의 이미지

ext는 윈도 파일시스템같이 파일 속성을 중구난방으로 관리하지 않고, 파일시스템에서 모든걸 해결합니다. (마스크, 숨김은 dot prefix)

그래서 이 방법이 가능하고, 이런 방법이 가능하게 설계 된 것이 유닉스구요. 사실 요즘 lvm, efi에 적용 된거 같이 부트로더용 파티션이 따로 빠져있으면 부트로더 부분만 저수준에서 복사하고 (dd나 cat .......) 실제 유닉스 파일시스템은 논리적인 영역(cp, tar 등등)에서 복사하심 되요.

내가 하고싶은 말은 윈도에서는 씨알도 안먹힙니다. ntfs 파티션을 tar로 압축해서 풀었는데! 파일 속성하고 권한 옵션 다 사라집니다... 헐; 부팅도 잘되고 작동도 잘 되는데 파일시스템이 더러워 지더군요.
그래도 timestamp (수정 날짜, 생성 날짜 같은거)는 다 남아있는데 왜 속성만 사라지는지...
ntfsclone 에서 이걸 해결하려고 ntfs 기능들을 억지루 유닉스에서 구현했나봅니다.

rururara429의 이미지

1. home 제외한 루트 백업

~/ sudo tar cvpzf backup.tgr.bz2 --exclude=backup.tgr.bz2 --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/media --exclude=/sys --exclude=/home /

2. home 백업

~$ sudo tar cvpzf backup.tgr.bz2 --exclude=backup.tgr.bz2 /home/lxle13

이렇게 루트 백업이랑 HOME 백업 따로하니
데스크탑 리눅스 이용자 입장에서 훨씬 편한 것 같네요.
둘 중 하나만 복구해도 되는 경우가 대부분일 테니까요.

감사합니다.
근데 궁금한 것이 있습니다.

클론질라는 백업 당시와 비교 살짝만 용량이 달라도 이미지 복구가 안 되어 버리더군요.
tar 로는 아예 백업 당시와 다른 파티션에 복구를 시켜도 os를 정상화 시킬 수 있는지 궁금합니다.
이전 파티션에서 tar로 백업한걸 새로 만든 파티션에 복구...가 가능할 까요?
가능하다면 무엇을 만져야는지 팁이라도 부탁드리겠습니다 ^^;

esrevinu의 이미지

파티션을 새로 만들면 파일시스템의 UUID가 달라집니다. blkid란 프로그램으로 이 UUID를 확인할 수 있는데요,
/etc/fstab에 UUID로 파티션을 구분한다면 이를 바꿔주어야 합니다. 그리고 GRUB을 쓴다면 부트파티션을
UUID로 구분하도록 grub.conf가 작성되어 있을 것입니다. 부트디렉토리가 있는 루트파티션을 새로 만들었다면
GRUB을 grub-install을 이용해 새로 설치해야 하고 grub-mkconfig로 grub.conf도 새로 만들어야 합니다.
배포판마다 다를 수 있는데 initramfs도 새로 만들어야 할 수 있습니다.

rururara429의 이미지

답변 감사드립니다.

esrevinu의 이미지

tar 쓸 때 루트와 home 파티션이 분리되어 있어 따로 백업한다면
--exclude 옵션 쓸 필요 없이 그냥 --one-file-system 옵션만을 쓰면 됩니다.
한 파일시스템에서만 백업이 됩니다. 물론 devfs나 proc, sysfs 같은 특수한 것들도 제외됩니다.

rururara429의 이미지


"--exclude=/backup.tgr.bz2" 도 빼고 그냥 이건가요?

sudo tar cvpzf backup.tgr.bz2 --one-file-system /

정말 감사합니다. ^^

esrevinu의 이미지

그건 빼면 안 될 것 같습니다. 그런데 루트 파티션을 아무리 넉넉하게 잡아 놔도 사용량의 두 배 이상이나 되게
잡아 놓지는 않을 것 같은데... 루트디렉토리는 엄청나게 많은 프로그램을 설치하지 않는 이상 사용량이 어느 정도
제한되니까 30GB 정도만 잡고 나머지는 홈디렉토리 파티션으로 사용합니다.
그래서 전 다른 스토리지를 마운트해서 그곳에 백업을 합니다.
-p 옵션은 풀 때 적용하는 것이므로 없어도 될 것 같고, -z 옵션은 gzip 파일을 만드는 것이므로 압축파일이
tar.gz 확장자를 가져야 할 것 같습니다. bz2는 -j 옵션입니다. 요즘은 압축률이 더 좋은 xz를 많이 쓰는 것 같더군요.
이건 -J 옵션입니다.

rururara429의 이미지

~$ sudo tar cvfJ backup.tgr.xz --one-file-system /

하니까 백업파일이 그냥 유저폴더에 생성이 되므로 --exclude=backup.tgr.xz 는 안 넣어도 될 것 같습니다.

복구는 "sudo tar xvfJp backup.tgr.xz -C /" 가 되는 건가요?

여로모로 알려 주셔서 정말 감사합니다. 꾸벅!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.