IT/LINUX

rsync를_활용한_linux_os_마이그레이션

ssung85 2020. 10. 16. 10:59
728x90

개요

  • 리눅스의 경우 OS파일과 부트로더를 설치해주면 일반 설치된 OS와 동일하게 사용 가능
  • rsync를 이용해서 기존 장비를 실시간으로 이전 가능

장점

  • 기존 시스템의 모든 패키지, 설정을 한번에 백업 가능
  • 라이브 백업 가능
  • 주기적으로 rsync로 백업 서버 지속 유지 가능
  • 사전 마이그레이션 후 최종 마이그레이션 시간 최소화 (tar 이전 대비)
  • rsync는 기본적으로 설치 되니 에이전트 불필요

주의사항 (단점)

  • OS에서 열려있는 파일(DB) 등은 rsync 시 오류가 발생 할 수 있으니 rsync 로그 확인 필요
    • 권장사항
      • DB 중지 후 rsync
      • 혹은 rsync 후 DB dump로 재복원을 권장

마이그레이션 진행

  • 원본장비 : 기존 장비, 아래 설명에서는 192.168.0.100
  • 대상장비 : 신규(백업) 장비, 아래 설명에서는 192.168.0.200

원본장비

  1. 원본 장비 디렉토리에 파일 확인
    # rsync 때 제외할 디렉토리에 중요 파일이 없는지 체크

    ls mnt
    ls media

    # 기타 추가로 제외한 디렉토리 목록
  2. 파일을 rsync 로 동기화
    1. xinetd에서 rsyncd 활성화 (xinetd를 통한 rsyncd 사용 시)
      vi /etc/xinetd.d/rsync
       
      service rsync
      {
              disable = no
              socket_type     = stream
              wait            = no
              user            = root
              server          = /usr/bin/rsync
              server_args     = --daemon
              log_on_failure  += USERID
      }
    2. /etc/rsyncd.conf 파일로 rsync 접근 설정
      vi /etc/rsyncd.conf
       
      [root]
      path = /     
      comment = root FS rsync
      uid = root
      gid = root
      use chroot = yes
      read only = yes
       
      # 접근 가능한 IP를 제한적으로 허용, 모두 허용하려면 hosts allow 라인을 주석 처리
      # hosts allow = 121.254.234.0/24
      hosts allow = 192.168.0.100
      max connections = 10
    3. rsyncd 서비스 실행
      # xinetd 서비스 재시작
      service xinetd restart
       
      # 혹은 xinetd 재시작이 힘들거나 단기간만 rsyncd 실행 하고 싶을 때
      rsync --daemon
    4. rsyncd 포트 확인
      netstat -nltp 
      tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      17496/rsync

대상장비

  1. 레이드 디스크 구성
    • 레이드 디스크 구성이 필요한 경우 사전에 구성
  2. LiveCD로 부팅
    1. Live CD iso 다운로드
      1. 선택1> http://www.sysresccd.org/Download 추천
      2. 선택2> https://www.centos.org/download/
    2. iso파일로 CD 생성
    3. 장비에서 CD로 부팅
  3. 파티션 구성
    1. fdisk나 parted 등으로 파티션 구성
    2. 원본장비의 파티션 타입과 동일하게 설정 권장
    3. 원본 장비의 파티션 타입과 다르게 구성도 가능 (관련 설정파일 변경 필요, 설치된 커널이 파티션 지원 필요)
  4. 파티션 마운트
    1. 구성한 파티션을 모두 마운트
    2. /mnt로 마운트 하는 경우 예
      mount /dev/sda1 /mnt
      mount /dev/sda2 /mnt/boot
      mount /dev/sda3 /mnt/var
      mount /dev/sda5 /mnt/home
  5. 네트워크 구성
    1. 원본서버와 연결이 가능한 네트워크 대역으로 IP 설정 예
    2. 인터페이스명 eth0, IP : 192.168.0.200, netmask 255.255.255.0, gw 192.168.0.1로 설정 할 경우
      # System Rescue CD의 경우 네트워크 매니저 데몬 중지
      service NetworkManager stop
       
      # 랜케이블을 eth0에 연결 한 경우, eth0 인터페이스 활성화
      ifconfig eth0 up
       
      # eth0 IP 설정
      ifconfig eth0 192.168.0.200 netmask 255.255.255.0
       
      # 기본 게이트웨이 IP 설정
      route add default gw 192.168.0.1
    3. rsync로 실제 파일 복사 (아래 방법 중 상황에 맞는 명령으로 동기화)
      • 예1> rsync로 파일 복사 (원본서버에 rsyncd 서비스를 시작한 경우)
        rsync -avzp --progress --delete 192.168.0.100::root /mnt/ \
                --exclude=/dev/ --exclude=/proc/ --exclude=/sys/ \
                --exclude=/lost+found --exclude=/media/
      • 예2> rsync로 파일 복사 (원본서버에 rsyncd 서비스 미 시작, SSH를 통한 복사)
        rsync -avzp --progress --delete -e ssh 192.168.0.100:/ /mnt \
                --exclude=/dev --exclude=/proc --exclude=/sys \
                --exclude=/lost+found --exclude=/mnt --exclude=/media
      • 예3> 서비스 사용으로 리소스 최소화가 필요한 경우 (트래픽 30Mbps/s 로 제한)
        rsync -avzp --progress --delete --bwlimit=3000 192.168.0.100::root /mnt \
                --exclude=/dev --exclude=/proc --exclude=/sys \
                --exclude=/lost+found --exclude=/mnt --exclude=/media
      • 예4> 서비스 사용으로 리소스 최소화가 필요한 경우 (트래픽 5Mbps/s 로 제한)
        rsync -avzp --progress --delete --bwlimit=500 192.168.0.100::root /mnt \
                --exclude=/dev --exclude=/proc --exclude=/sys \
                --exclude=/lost+found --exclude=/mnt --exclude=/media
      • 참고할 만한 rsync 옵션
        --ignore-failed-read  읽기 오류 무시
        --numeric-ids UID/GID를 이름명이 아닌 숫자로 처리
  6. 제외한 디렉토리 생성
    cd /mnt
     
    mkdir dev
    mkdir proc
    mkdir sys
    mkdir run
    mkdir mnt
    mkdir media
  7. 원본장비의 설정과 다른 부분 수동으로 수정
    1. 네트워크 IP 변경, MAC주소 설정 주석처리
      • CentOS : /mnt/etc/sysconfig/network-scripts/ifcfg-*
        # ifcfg-eth0 예제
        # 1. HWADDR라인을 삭제나 주석처리
        # 2. IPADDR과 NETMASK등을 실제 사용할 장비의 IP설정에 맞게 수정
         
        DEVICE=eth0
        ONBOOT=yes
        BOOTPROTO=static
        IPADDR=211.115.117.120
        NETMASK=255.255.255.0
        GATEWAY=211.115.117.33
        # HWADDR=00:22:19:B9:D3:90
    2. udev의 장비명 설정 (네트워크 장치명이 일반적이지 않은 경우)
      # 인터페이스명 설정파일 파일명 변경 처리 (혹은 삭제)  ((혹은 파일명이 약간 다를수 있음))
      cd /mnt/etc/udev/rules.d/
      mv 70-persistent-net.rules 70-persistent-net.rules.bak
    3. 부트로더 설정에서 부트파티션 uuid, 파티션 설정 수정
      • grub 2.x인 경우 : /mnt/boot/grub/grub.cfg
      • grub 1.x인 경우 : /mnt/boot/grub/menu.lst
        # grub 1.x 예제
        # 1. /boot 파티션의 존재, 위치가 변경된 경우 splashimage, kernel, initrd 앞에 /boot등을 추가, 삭제 처리
        # 2. root=/dev/sda2 부분의 root 파티션 경로 수정
         
        default=0
        timeout=5
        splashimage=(hd0,0)/grub/splash.xpm.gz
        hiddenmenu
         
        title CentOS (2.6.18-53.1.14.el5)
                root (hd0,0)
                kernel /vmlinuz-2.6.18-8.1.10.el5 ro root=/dev/sda2
                initrd /initrd-2.6.18-8.1.10.el5.img
    4. 파티션 구성을 현재 시스템에 맞게 수정
      • /mnt/etc/fstab
  8. 부트로더 설치 (sda1이 / 파티션, sda 디스크에 부트로더 설치 시)
    mount /dev/sda1 /mnt
  • grub 부트로더 설치
    grub-install /dev/sda --root-directory=/mnt --recheck
     
    # 부트로더 설치 할 때 오류가 발생하면 아래 명령으로 시도 추천
    # 선택1> grub 부트로더 설치 (/파티션 디렉토리를 지정, sda1 파티션에 부트로더 설치)
    grub-install /dev/sda1 --root-directory=/mnt
    # 선택2> grub 부트로더 설치 (/파티션 디렉토리를 지정)
    grub-install /dev/sda --root-directory=/mnt
     
    # 설치 후 메시지 확인 (정상 처리 시)
    Installation finished. No error reported.
    • EFI 시스템
      작성 필요
  1. 부팅 확인 : 대상 장비에서 하드디스크로 부팅이 정상적인지 확인

추가 확인이 필요한 사항

  • 원본서버상에서 설정된 어플리케이션 설정
    • 모니터링 솔루션의 설정 (U+ ims의 PID, username등)

활용 예

원본장비 -> 대상장비로 밀어넣기

  • 대상장비에서 가져오기 힘든 경우
    • 원본장비가 내부IP 전용 장비 (네트워크 접근이 힘든 경우)

대상장비

  1. rsync 서비스 활성화 설정
    vi /etc/xinetd.d/rsync
     
    service rsync
    {
            disable        = no
            flags                = IPv6
            socket_type     = stream
            wait            = no
            user            = root
            server          = /usr/bin/rsync
            server_args     = --daemon
            log_on_failure  += USERID
    }
  2. rsyncd 설정
    vi /etc/rsyncd.conf
    [backup]
    path = /data/backup
    comment = backup
    uid = root
    gid = root
    use chroot = yes
    write only = yes
     
    # 원본 장비 IP혹은 대역만 접근 허용 처리
    hosts allow = 121.254.234.0/24
  3. xinted 서비스 재시작
    service xinetd restart

원본장비

  1. 원본장비에서 대상장비로 파일 밀어넣기

# 경우에 따라서 옵션 변경해서 적용 (delete, bwlimit, exclude)
# 실제 적용 전에 -n 으로 목록 확인 후 적용 권장
#
 
rsync -avzp --progress --delete --bwlimit=500 \
  / 110.45.238.3::backup/bep2 \
  --exclude=/dev --exclude=/proc --exclude=/sys \
  --exclude=/lost+found --exclude=/mnt --exclude=/media

이슈

FakeRAID에서 마이그레이션

  • 일반적인 부팅 CD에서는 FakeRAID 디스크 인식 불가
  • CentOS OS CD 복구모드로 부팅
  • RAID 드라이버 로딩
  • chroot로 rsync 혹은 tar 해제로 진행

복구 후 부팅 실패

  • FakeRAID나 기타 문제로 부팅이 안 될 경우
  • 오류 원인을 찾기 힘든 경우 복구 한 상태로 기존 OS와 동일한 버전으로 재설치
    • /나 기타 파티션 초기화 없이 재설치

관련 툴

  • GitHub - tritonas00/system-tar-and-restore: Backup and Restore your system using tar or Transfer it with rsync - https://is.gd/LZhmE6

관련 링크

 

728x90