리스토리의 IT's

[펌]백업 하드디스크 만들기

리스토리™ 2006. 10. 17. 08:15
반응형
[리눅스 팁]
배철수 : 리눅스월드 발행인

      하드디스크에 어렵사리 리눅스를 깔았는데 연습 중에 잘못해서 날려버릴 경우에 대비해 다른 하드에 백업해 놓고서 날리면 그 하드를 꼽아 바로 부팅해서 쓰고 싶다. 또는 웹 호스팅을 하는데 중요한 프로그램이 깔려 있어서 깨질 경우에 대비해 원본 하드와 똑같은 백업하드를 만들어서 원본 하드에 이상이 생기면 바로 백업 하드로 부팅해서 쓰고 싶다.  혹은 여러대에 동시에 리눅스를 깔아야 하는데 일일히 CD롬 넣고 새로 깔기 귀찮다. 한대에만 리눅스를 깔아서 이걸 다른 피시에 그대로 옮기고 싶다.  이런 경우가 많다.

      이럴 때 사용하는 백업하드 만드는 방법을 소개한다. 이름만 백업하드이지 원본하드와 똑같은 하드를 만드는것이다. 하드디스크의 크기나 방식은 서로 달라도 가능하다. 준비물은 플로피 한장이면 된다.

    사전 유의 사항

      - 아래에서는 원본 하드와 백업 하드 모두 IDE하드이고 원본 하드는 primary master(/dev/hda), 백업 하드는 seondary master(/dev/hdc)에 연결한다고 가정한다. SCSI 하드의 경우도 가능하지만 조금 다르다.

      (보통 피시에서 secondary master에는 cd-rom 드라이브가 연결돼 있다. 하지만 복사 과정에서는 cd-rom이 사용되지 않으므로 cd-rom 대신 하드디스크를 연결해도 된다)

      - 원본 하드 파티션 구성이 아래와 같다고 가정한다.
      /dev/hda1 :  linux swap
      /dev/hda2 :  linux native

      - 아래는 두가지 경우를 설명한다.
      1) 백업하드를 만든 후 원본하드를 떼내고  대신 백업하드로 부팅하는 경우(한대의 피시에 리눅스를 깔아 이를 여러대의 피시에 복사해 리눅스를 깔 경우가 이에 해당한다)
      2) 원본하드와 백업하드를 그대로 놔둔채 원본 하드가 깨질 경우 바로 백업하드로 부팅하는 경우이다.

      두번째의 경우는 lilo를 사용하지 않고 플로피로 부팅 한다고 가정한다. lilo를 사용해 선택적으로 원본과 백업 하드에서 부팅 할 수 있지만 원본 하드가 깨지면 보통 lilo도 작동하지 않을 수 있으므로 백업 하드로 부팅하는 경우는 아에 플로피로 부팅하는 걸로 가정했다.

    작업 단계

      1. 백업하드는 secondary master에 연결한다.

          * 하드를 secondary master에 연결하는 경우는 하드디스크의 점퍼를 master에 셋팅한다.

        2. 우선 플로피(3.5인치)를 포맷해 놓는다.

              fdformat  /dev/fd0H1440

            “Formatting  ...  “ 메시지가 나오면서 그 옆에 숫자가 1부터 79까지 나온다.

            그리고서 다시
            “verifying  ... “ 메시지가 나오고 역시 숫자가 1부터 79까지 나온다.

            이 과정에서 I/O error 등등의 에러메시지가 나오면 그 디스켓은 쓸 수 없다.끝나면 화면이 아래처럼 나와야 한다.

                hyunah:~$ fdformat /dev/fd0H1440
                Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
                Formatting ... done
                Verifying ... done
                hyunah:~$

              주의]
              리눅스에서는 플로피에 배드 섹터가  있으면 사용할 수 없다.

            3. fdisk로 /dev/hdc에 두개의 파티션을 만든다. hdc1은 swap  hdc2는 linux native로 잡는다.

                주의]
                만약에 원본 하드가 swap이 /dev/hda2에 있으면 백업 하드도 hdc2를 swap으로 잡는다. 같은 순서로 해야한다.
                바뀌면 문제가 발생한다.

                ◆ 참고 : swap을 먼저 잡느냐, linux native를 먼저 잡느냐라는 논쟁이 있는데 본인은 아래 이유로 swap을 먼저 잡는다. swap은 메모리를 대신하므로 메모리 부족으로 swap이 사용된다면 swap 속도는 시스템 실행 속도에 큰 영향을 준다. 그런데 하드디스크는 바깥 실린더에서부터 안쪽으로 사용되며 헤드의 이동 속도는 안쪽 보다 바깥쪽이 빠르다. 따라서 swap을 먼저 잡으면 swap 파티션이 하드디스크의 바깥쪽에 위치하므로 swap이 안쪽에 있는 경우보다 시스템 실행 속도가 빠르다.

                ◆ 참고
                아래에 간략히 fdisk 사용법을 적는다.

                    fdisk /dev/hdc

                    - linux swap 파티션 만들기(/dev/hdc1)

                       n : 파티션 만들기
                       e : extended
                       p : primary
                       p를 선택

                    ㉠ partition number (1-4) : 1

                    ㉡ first cylinder :

                    ㉢ last cylinder

                    (실린터 수치는 하드디스크에 따라 다르다.)

                    t : system ID 변경
                     partition number (1-4) : 1
                     Hex code : 82

                    - linux native 파티션 만들기

                    n : 새 파티션
                    p : primary

                    ㉠ Partition number : 2

                    ㉡ First cylinder

                    ㉢ Last cylinder

                    - 부트 파티션 지정

                    a
                      partition number : 2

                    - fdisk
                    w : 저장후 끝냄
                    q : 저장 않고 끝냄

                4. swap 파티션을 포맷한다.

                    mkswap -c /dev/hdc1

                  5. 리눅스 파티션을 포맷한다.

                      mke2fs -c /dev/hdc2

                    6. cd  /

                    7. mkdir /zzz  ; 원본하드의 루트디렉토리에 zzz란 디렉토리를 만든다.

                    8. mount /dev/hdc2 /zzz   ;  백업하드를 /zzz에 마운트한다.

                    9. tar cf  -  [0-y]* |  ( cd /zzz ; tar xvf - )

                        이 부분은 원본하드 루트(/) 디렉토리에서 아스키 코드 순으로 0부터 y로 시작하는 모든 파일 및 디렉토리를 /zzz 즉 hdc2로 복사하라는 뜻이다. 여기서 y까지만 지정한 이유는 z까지로 하면 /zzz 디렉토리까지 복사하려 하므로 반복복사의 오류가 나기 때문이다.

                        루트디렉토리(/) 에 영문이나 숫자가 아닌 특수문자 파일/디렉토리(예를 들면 한글 파일, .으로 시작하는 파일)는 수동으로 복사해야 한다. z로 시작하는 파일이나 디렉토리도 마찬가지이다. 그러나 디렉토리내에 들어있는 경우는 상관없다. 복사할 때는 cp -a 명령을 써야 한다.

                        예를 들어 루트디렉토리(/)에 zebra라는 디렉토리가 있으면 cp -a  /zebra  /zzz  명령을 준다.

                      10. 이 단계까지 했으면 원본하드와 똑같은 백업하드가 만들어졌지만 백업 하드로 부팅
                           하려면 lilo 부분을 다시 잡아야 한다.

                          여기서 두가지 경우로 나눈다.

                          A. 첫번째는 복사본을 원본 하드 위치로 옮겨 바로 lilo로 부팅하는 경우이다. 즉 여러 피시에 리눅스를 깔 경우이다.

                              A-1 원본 하드에서 커늘 위치를 찾는다. /etc/lilo.conf를 보면 알 수 있다.

                                   아래 lilo.conf예이다.

                                   hyunah:/etc$ cat lilo.conf
                                   boot=/dev/hda
                                   compact
                                   install=/boot/boot.b
                                   map=/boot/map
                                   vga=normal
                                   delay=20
                                   message=/boot/message
                                   prompt
                                   timeout=70
                                   image=/boot/vmlinuz
                                    label=a
                                    read-only
                                    root=/dev/hda2

                                   여기에서 커늘은 /boot/vmlinuz이다.

                              A-2 rdev /boot/vmlinuz /dev/hda2 명령을 준다.

                              다시 rdev /boot/vmlinuz 명령을 줄 때 아래처럼 나와야한다.
                              “Root device /dev/hda2”

                              이는 커늘에 들어있는 루트디바이스 위치가 /dev/hda2이라는 뜻이다.

                              A-3 위의 단계 2에서 포맷한 디스켓을 넣고 아래 명령을 준다.

                                        cp /boot/vmlinuz  /dev/fd0

                              A-4  원본하드를 떼고 백업하드를 원본하드 위치에 단다. 그리고서 위에서 만든 디스켓으로 부팅한다.

                              A-5  부팅이되면 root로 login해서 lilo 명령을 쳐 준다.

                              A-6  이제 디스켓을 제거하고 하드로 리부팅하면 원본하드와 똑같이 부팅하는걸 알 수 있을것이다.

                            B. 두번째는 백업하드를 그대로 둔채 원본하드에 이상이 있을때만 백업하드로 부팅하는 경우이다. 이 경우도 두가지가 가능한데 1) 원본하드의 lilo.conf를 고쳐 부팅시 원본과 백업 하드를 선택하는 경우 2) 백업하드로 부팅할때는 플로피를 사용하는 경우이다.

                                여기서는 두번째의 경우만 보여준다.

                                B-1  위의 a-1 및 a-3까지는 같다. 단 a-2의 hda2 대신 hdc2를 써야한다.

                                B-2 /dev/hdc2의 /etc/fstab을 고쳐야 한다. 이미 /dev/hdc2가 /zzz에 마운트 돼 있으면 cd /zzz/etc 명령을 준후 vi로 fstab 파일을 수정한다.

                                현재 /dev/hdc2의 /etc/fstab는 아래처럼되어있다.

                              # <file system> <mount point> <type> <options> <dump> <pass>
                                  /dev/hda2            /              ext2     defaults       0           1
                                  /dev/hda1           none         swap    sw              0           0
                                   proc                 /proc          proc    defaults       0           0

                                  여기에서 hda를 hdc로 바꾼다. 즉 hda2는 hdc2로 hda1은 hdc1로 한다.

                                  B-3 이제 /dev/hdc2의 루트 파일시스템으로 부팅하려면 위에서 만든 플로피로 부팅하면 된다.

                                  주의]
                                  hda와 hdc를 똑같이 만들어 선택 부팅하는 경우는 조심해야한다. 프로그램 중에서 하드디스크의 절대위치를 참조하는 프로그램은 모두 바꾸어야한다. 예를들면 crontab 같은 경우이다. 따라서 완벽한 백업시스템이 되려면 사전에 테스트해 보아야한다.

                                  백업하드를 원본하드와 같은 위치에 바꾸어 다는 경우는 원본과 동일한 작동이 가능하다. 단지 일부 log 파일에서 일시적인 문제가 발생하나(utmp, wtmp) 시스템 작동에는 영향이 없다.


                            반응형