IT 관련/우분투(Ubuntu) 이것저것

Lubuntu 서버 > Ubuntu 서버로 그대로 복사(이전)

islet2 2025. 4. 5. 19:12

기존의 15년이상 지난 구형 노트북(아톰 프로세서, 2G ram)시스템에 가벼운 Lubuntu 서버를 구성해서 이것저것 연습하며 설치한 것들이 좀 있습니다.

대략, DOCKER로 n8n서버, WordPress 서버, cockpit 서버등등 몇가지를 설치했는데 구형 노트북이라 그런지 원격 reboot도 어렵고 해서 싱글보드 컴퓨터를 하나 구입했습니다.

alixxx에서 약 8만원에 구입한 싱글보드pc(banana pi bpi m5)에 기존 구형노트북(구입당시 80만원.ㅜ.ㅜ)에 설치했던 것들을 그대로 옮길 수 있는지 VM ware를 통해 pc에 Ubuntu를 설치 후 rsync를 통해 시스템을 그대로 복사하였습니다.

상황은 내부ip 192.168.0.251(구형 서버-Lubuntu)에서 192.168.0.115(VM ware 서버-Ubuntu)로 이전하는 것입니다.

먼저 가장 큰 변화는 ubuntu서버의 인터페이스가 Lubuntu처럼 똑같이 변한다는 겁니다. 이 점 참고하세요.

아래 내용은 'Gemini 2.5 Pro Preview 03-25'버전과 협업(?)하면서 진행한 사항이고 화면을 비롯해서 모든 것들이 그대로 똑같이 이전 되었습니다. ㅎㅎ

핵심 원리: 기존 서버의 설정, 데이터, 설치된 프로그램들을 최대한 그대로 새 서버로 복사하고, 새 환경(특히 IP 주소)에 맞게 일부 설정을 수정하는 것입니다.

가장 일반적이고 권장하는 방법: rsync를 이용한 데이터 및 설정 복사

이 방법은 새 서버에 Ubuntu를 새로 설치한 후, 필요한 데이터와 설정을 기존 서버에서 복사해오는 방식입니다. 유연하고 문제가 발생했을 때 대처하기 용이합니다.

진행 단계:

1단계: 사전 준비

  1. 새 서버 준비:

    • 새 서버에 원하는 버전의 Ubuntu 서버를 설치합니다. (기존 Lubuntu와 버전이 비슷하거나 더 최신이면 좋습니다.)
    • 새 서버에 고정 IP 주소 (192.168.0.115) 를 설정합니다. Ubuntu 서버는 보통 netplan을 사용합니다. (/etc/netplan/*.yaml 파일 수정 후 sudo netplan apply)
    • 새 서버에 SSH 서버를 설치하고 실행합니다. (sudo apt update && sudo apt install openssh-server)
    • 새 서버에서 방화벽(ufw 등)이 SSH 연결(기본 포트 22)을 허용하는지 확인합니다. (sudo ufw allow ssh 또는 sudo ufw allow 22/tcp)
  2. 기존 서버 (192.168.0.251) 확인:

    • rsync가 설치되어 있는지 확인합니다. 없다면 설치합니다. (sudo apt update && sudo apt install rsync)
    • 매우 중요: 이전 작업을 시작하기 전에 기존 서버의 중요 데이터를 백업하세요! 외장 하드나 다른 안전한 곳에 백업하는 것이 좋습니다. 예상치 못한 문제에 대비할 수 있습니다.
  3. 서비스 중지 (기존 서버):

    • 데이터 일관성을 위해, 이전할 데이터와 관련된 서비스(웹 서버, 데이터베이스 등)를 기존 서버에서 중지합니다. 예를 들어:
      • sudo systemctl stop apache2 (Apache 웹서버)
      • sudo systemctl stop nginx (Nginx 웹서버)
      • sudo systemctl stop mysql (MySQL/MariaDB 데이터베이스)
      • (운영 중인 다른 서비스들도 중지)

2단계: 데이터 및 설정 복사 (rsync 사용)

  • 새 서버 (192.168.0.115)에서 다음 명령어를 실행하여 기존 서버의 데이터를 가져옵니다. (비밀번호나 SSH 키 필요)
  • sudo를 사용하는 이유는 시스템 파일 전체에 대한 권한이 필요하기 때문입니다.
sudo rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/boot/*","/var/run/*","/var/lock/*","/etc/fstab","/etc/mtab","/etc/netplan/*","/etc/network/interfaces","/etc/ssh/ssh_host_*"} -e ssh <기존서버_사용자계정>@192.168.0.251:/ /
  • 명령어 설명:

    • sudo: 관리자 권한으로 실행
    • rsync: 원격/로컬 파일 동기화 도구
    • -a: 아카이브 모드 (권한, 소유권, 타임스탬프 등 대부분 속성 유지)
    • -A: ACL 정보 유지
    • -X: 확장 속성(Extended Attributes) 유지
    • -v: 진행 상황 상세히 보기
    • --exclude={...}: 복사에서 제외할 디렉토리 및 파일 목록.
      • /dev, /proc, /sys: 가상 파일 시스템 (복사 불필요)
      • /tmp, /run, /var/run, /var/lock: 임시 파일 및 런타임 파일 (복사 불필요)
      • /mnt, /media: 마운트 포인트 (하위 내용 복사 시 문제될 수 있음)
      • /lost+found: 파일 시스템 복구용 디렉토리
      • /boot/*: 부트로더 관련 파일. 새 서버에 새로 설치된 것을 사용하는 것이 안전할 수 있습니다. (필요시 수동 복사 고려)
      • /etc/fstab: 파일 시스템 마운트 정보 (디스크 UUID 등이 다를 수 있어 제외)
      • /etc/mtab: 현재 마운트 정보 (자동 생성됨)
      • /etc/netplan/*, /etc/network/interfaces: 네트워크 설정 파일 (새 서버 IP 설정 유지 위해 제외)
      • /etc/ssh/ssh_host_*: SSH 호스트 키 (새 서버 고유 키 유지 위해 제외)
    • -e ssh: SSH를 통해 원격으로 접속
    • <기존서버_사용자계정>@192.168.0.251:/: 원본 위치 (기존 서버의 루트 디렉토리 /)
    • /: 대상 위치 (새 서버의 루트 디렉토리 /)
  • 주의: --exclude 목록은 서버 설정에 따라 추가/수정이 필요할 수 있습니다.

  • 시간 단축 팁: 처음 rsync를 실행하면 시간이 오래 걸립니다. 이후 변경된 내용만 동기화하려면 같은 명령을 다시 실행하면 됩니다. 이를 이용해 서비스 중단 시간을 최소화할 수 있습니다 (마지막 동기화 직전에 서비스 중지).

  • 실행시 권한으로 인해 문제가 발생할 수 있습니다. 이럴 경우 아래 명령어를 실행하여 필요한 권한을 부여하세요.

해결 방법:

** 기존 서버에서 비밀번호 없이 sudo rsync 실행 허용 **

가장 깔끔하고 안전한 방법은 기존 서버(192.168.0.251) 에서 <기존서버_사용자계정>이 비밀번호 입력 없이 sudo rsync 명령어만 실행할 수 있도록 sudoers 설정을 잠시 변경하는 것입니다.

  1. 기존 서버(192.168.0.251)에 SSH로 접속하세요. (평소 사용하던 <기존서버_사용자계정>으로)

  2. sudo visudo 명령어를 실행하여 sudoers 파일을 안전하게 편집합니다. (절대 nano나 다른 편집기로 직접 열지 마세요! 문법 오류 시 시스템에 문제가 생길 수 있습니다.)

    sudo visudo
  3. 편집기(보통 nano 또는 vim)가 열리면, 파일 맨 아래쪽에 다음 줄을 추가합니다. <기존서버_사용자계정> 부분은 실제 사용하는 계정 이름으로 바꿔주세요.

    <기존서버_사용자계정> ALL=(ALL) NOPASSWD: /usr/bin/rsync
    • 주의: rsync의 정확한 경로를 확인하는 것이 좋습니다. 기존 서버에서 which rsync 명령어를 실행해서 경로가 /usr/bin/rsync가 맞는지 확인하세요. 다르면 해당 경로로 수정해야 합니다.
  4. 파일을 저장하고 편집기를 종료합니다. (nano의 경우 Ctrl+X, Y, Enter)

  5. 이제 새 서버(192.168.0.115)에서 이전에 실패했던 rsync 명령어를 다시 실행해보세요.

    sudo rsync -aAXv --rsync-path="sudo rsync" --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/boot/*","/var/run/*","/var/lock/*","/etc/fstab","/etc/mtab","/etc/netplan/*","/etc/network/interfaces","/etc/ssh/ssh_host_*"} -e ssh <기존서버_사용자계정>@192.168.0.251:/ / 2>&1 | tee rsync_sudo_nopasswd_log.txt

    이제 기존 서버에서 sudo rsync를 실행할 때 비밀번호를 묻지 않아야 합니다.

  6. rsync 작업이 성공적으로 끝나면, 보안을 위해 반드시 기존 서버의 sudoers 파일에서 방금 추가했던 라인을 다시 삭제하거나 주석 처리(# 추가) 하세요! (sudo visudo 사용)

  7. *r sync_sudo_nopasswd_log.txt 확인하여 에러발생 여부 확인 *

  8. ** sudo reboot 실행하여 서버 재시작 **

3단계: 새 서버 설정 확인 및 수정

rsync 완료 후, 새 서버에서 몇 가지 중요한 설정을 확인하고 새 IP 주소(192.168.0.115)에 맞게 수정해야 합니다.

  1. 네트워크 설정 확인:

    • /etc/netplan/ 아래의 설정 파일이나 /etc/network/interfaces (구 버전) 파일에 새 IP (192.168.0.115)가 올바르게 설정되어 있는지 다시 확인합니다.
  2. 호스트 이름 확인/수정:

    • /etc/hostname 파일과 /etc/hosts 파일을 확인하고, 필요하다면 새 서버에 맞는 호스트 이름으로 수정합니다.
    • /etc/hosts 파일 안에 기존 IP (192.168.0.251)가 하드코딩된 부분이 있다면 새 IP (192.168.0.115) 또는 127.0.0.1 (localhost) 로 변경해야 합니다.
  3. 애플리케이션 설정 파일 확인:

    • 가장 중요한 부분입니다. 기존 서버에서 운영하던 서비스들의 설정 파일 내부에 기존 IP (192.168.0.251)가 직접 적혀있는 경우가 많습니다. 이 부분을 새 IP (192.168.0.115) 또는 상황에 맞게 0.0.0.0 (모든 IP), 127.0.0.1 등으로 수정해야 합니다.

    • 주요 확인 대상:

      • 웹 서버 설정 (Apache: /etc/apache2/sites-available/, Nginx: /etc/nginx/sites-available/) - Listen, ServerName, 가상 호스트 설정 등
      • 데이터베이스 설정 (MySQL/MariaDB: /etc/mysql/my.cnf 또는 /etc/mysql/mariadb.conf.d/, PostgreSQL: /etc/postgresql/.../postgresql.conf, pg_hba.conf) - bind-address
      • 애플리케이션 자체 설정 파일 (예: PHP 애플리케이션의 DB 접속 정보 등)
      • 방화벽 설정 (sudo ufw status numbered, /etc/ufw/) - 특정 IP 기반 규칙이 있다면 수정
    • 찾는 방법: grep 명령어를 사용하여 설정 파일 디렉토리에서 기존 IP를 검색해 볼 수 있습니다.

      sudo grep -r "192.168.0.251" /etc/
      # 필요하다면 다른 디렉토리도 검색 (예: /var/www/, /opt/)
  4. SSH 호스트 키:

    • 새 서버는 고유한 SSH 호스트 키를 가집니다. 기존 서버에서 새 서버로 SSH 접속하던 클라이언트들은 호스트 키가 변경되었다는 경고 메시지를 보게 됩니다. 클라이언트의 ~/.ssh/known_hosts 파일에서 기존 서버 IP에 해당하는 라인을 삭제해야 합니다.
  5. 필요한 패키지 설치:

    • 기존 서버에 설치되었던 프로그램/패키지 목록을 확인하고 (dpkg --get-selections > installed-packages.txt 등), 새 서버에 동일하게 설치되지 않았다면 설치해 줍니다. rsync는 설정 파일과 데이터를 가져오지만, 실행 파일 자체는 새 OS에 설치된 것을 사용하게 됩니다. (일반적으로 rsync로 시스템 디렉토리를 복사하면 대부분 따라오지만, 확인차 진행)

      # 기존 서버에서 목록 생성
      dpkg --get-selections > ~/installed-packages.txt
      # 새 서버로 목록 파일 복사 (예: scp 사용)
      # 새 서버에서 목록 기반 설치
      sudo apt-get update
      sudo apt-get install dselect
      sudo dselect update
      sudo dpkg --set-selections < ~/installed-packages.txt
      sudo apt-get dselect-upgrade -y
    • 주의: 위 패키지 설치 과정은 시스템을 불안정하게 만들 수도 있습니다. 문제가 없다면 생략하거나, 꼭 필요한 핵심 패키지만 sudo apt install <패키지명> 으로 설치하는 것을 권장합니다.

4단계: 테스트 및 서비스 시작

  1. 재부팅: 새 서버를 재부팅합니다 (sudo reboot).
  2. 서비스 시작: 기존 서버에서 중지했던 서비스들을 새 서버에서 하나씩 시작합니다.
    • sudo systemctl start apache2
    • sudo systemctl start nginx
    • sudo systemctl start mysql
    • ... (다른 서비스들)
  3. 상태 확인 및 로그 분석: 서비스가 정상적으로 시작되었는지 확인하고 (systemctl status <서비스명>), 문제가 있다면 관련 로그 파일 (/var/log/ 디렉토리 확인)을 분석하여 원인을 찾습니다. 특히 IP 주소 관련 설정 오류가 없는지 확인합니다.
  4. 기능 테스트: 웹사이트 접속, 데이터베이스 연결, 애플리케이션 기능 등 모든 것이 기존 서버와 동일하게 작동하는지 꼼꼼하게 테스트합니다. 내부 네트워크의 다른 PC에서 새 IP (192.168.0.115)로 접속하여 테스트합니다.

5단계: 최종 마무리

  1. DNS 업데이트 (필요시): 만약 도메인 이름으로 서버에 접속하고 있었다면, DNS 설정에서 해당 도메인이 새 IP 주소 (192.168.0.115)를 가리키도록 변경해야 합니다.
  2. 기존 서버 처리: 새 서버가 완벽하게 작동하는 것을 확인한 후에, 기존 서버(192.168.0.251)를 네트워크에서 분리하거나 전원을 끕니다. 바로 삭제하지 말고, 문제가 발생했을 경우를 대비해 일정 기간 동안 보관하는 것이 좋습니다.

대안: 디스크 이미지 복제 (고급 사용자)

  • dd 명령어 또는 Clonezilla 같은 도구를 사용하여 기존 서버의 디스크 전체를 이미지 파일로 만든 후, 새 서버의 디스크에 해당 이미지를 복원하는 방법입니다.
  • 장점: 시스템 상태를 거의 완벽하게 그대로 복제할 수 있습니다.
  • 단점:
    • 디스크 크기가 같거나 새 서버 디스크가 더 커야 합니다.
    • 하드웨어 드라이버 호환성 문제가 발생할 수 있습니다 (특히 물리 서버 간 이동 시).
    • 복제 후 새 서버에서 네트워크 설정(IP 주소 등)을 반드시 수동으로 변경해야 합니다. (위 3단계의 네트워크 설정 및 애플리케이션 설정 수정은 동일하게 필요)
    • 초보자에게는 rsync 방식보다 복잡하고 위험 부담이 클 수 있습니다.

** 완료후 체크할 사항 **

1. 새 서버 설정 확인 및 수정 (가장 중요! 꼼꼼하게!)

  • 네트워크 설정 재확인 (필수):

    • 혹시 모르니 새 서버(192.168.0.115)의 /etc/netplan/*.yaml (또는 구버전이면 /etc/network/interfaces) 파일에 새 IP 주소 192.168.0.115 가 올바르게 설정되어 있는지 다시 한번 확인해주세요.
    • ip a 명령어로 현재 IP 주소를 확인합니다.
  • 호스트 이름 확인/수정 (필수):

    • /etc/hostname 파일과 /etc/hosts 파일을 확인합니다.
    • 특히 /etc/hosts 파일 안에 기존 IP 주소 192.168.0.251이 직접 적혀 있다면 반드시 새 IP 주소 192.168.0.115 또는 127.0.0.1 (localhost)로 변경해야 합니다!
  • ** 애플리케이션 설정 파일 내 IP 주소 변경 (핵심 중의 핵심!) **

    • 이제 rsync로 복사해 온 각종 서비스 설정 파일들을 열어서, 그 안에 하드코딩된 기존 IP 주소 192.168.0.251을 새 IP 주소 192.168.0.115 (또는 0.0.0.0, 127.0.0.1 등 서비스 특성에 맞게)로 바꿔줘야 합니다.

    • 어디를 찾아야 할까요? grep 명령어로 찾아보면 편리합니다! 새 서버 터미널에서 다음 명령어를 실행해보세요:

      sudo grep -r "192.168.0.251" /etc/

      (이 명령어는 /etc 디렉토리 아래 모든 파일에서 192.168.0.251 문자열을 찾아줍니다.)

    • 주요 확인 대상:

      • 웹 서버: Apache (/etc/apache2/), Nginx (/etc/nginx/) 설정 파일 (특히 sites-available 안의 파일들, Listen, ServerName, VirtualHost 설정 등)
      • 데이터베이스: MySQL/MariaDB (/etc/mysql/), PostgreSQL (/etc/postgresql/) 설정 파일 (bind-address 등)
      • 기타 서비스: 기존에 사용하던 다른 서비스들의 설정 파일 (예: FTP, 방화벽 규칙에 IP가 명시된 경우 등)
      • 웹 애플리케이션: 웹사이트 코드 내의 설정 파일 (/var/www/html 등)에 DB 접속 정보나 API 주소 등이 IP로 되어 있다면 수정해야 합니다.
    • grep으로 찾은 파일들을 sudo nano <파일명> 등으로 열어서 해당 IP 주소를 수정하고 저장합니다.

2. 테스트 및 서비스 시작

  • 재부팅: 모든 설정 변경을 마쳤다면, 시스템을 안정적으로 적용하기 위해 새 서버를 재부팅합니다.

    sudo reboot
  • 서비스 시작: 재부팅 후, 기존 서버에서 stop 시켰던 서비스들을 새 서버에서 하나씩 start 시킵니다.

    sudo systemctl start apache2  # 또는 nginx
    sudo systemctl start mysql
    # ... 다른 서비스들도 시작
  • 상태 확인: 서비스가 제대로 시작되었는지 확인합니다.

    sudo systemctl status apache2
      sudo systemctl status mysql
    # ...

    만약 active (running) 상태가 아니라면 에러가 발생한 것이니 로그를 확인해야 합니다.

  • 로그 확인: 문제가 있다면 관련 로그를 확인하여 원인을 찾습니다.

    journalctl -u apache2 # 아파치 로그 확인 예시
    sudo tail -n 50 /var/log/apache2/error.log # 아파치 에러 로그 확인 예시
    sudo tail -n 50 /var/log/mysql/error.log # MySQL 에러 로그 확인 예시
  • 기능 테스트: 다른 PC에서 웹 브라우저로 새 서버 IP(http://192.168.0.115)에 접속해보거나, DB에 접속해보는 등 실제 서비스가 기존처럼 잘 작동하는지 꼼꼼하게 테스트합니다.

** 참고사항 **

  • 백업은 필수입니다! 어떤 방법을 사용하든 시작 전에 반드시 데이터를 백업하세요.
  • IP 주소 변경이 가장 큰 변수입니다. 새 서버에서 관련 설정을 꼼꼼히 확인하고 수정하는 것이 중요합니다.
  • rsync 방법이 일반적으로 더 안전하고 유연합니다.
  • 서비스 중단 시간을 최소화하려면 rsync를 여러 번 실행하여 변경분만 동기화하는 전략을 사용하세요.
  • 문제가 발생하면 로그 파일을 확인하는 것이 기본입니다 (/var/log/).
  • 천천히, 각 단계를 확인하면서 진행하세요.

'IT 관련 > 우분투(Ubuntu) 이것저것' 카테고리의 다른 글

Ubuntu를 VM에 설치시 네트워크 설정  (0) 2025.04.06
scp 명령어  (0) 2025.04.05
Ubuntu 메일서버 설치(with Manus)  (0) 2025.04.05
tail 명령어  (0) 2025.04.05
grep 명령어  (0) 2025.04.05