--- title: "Convert to KVM 서버 이미지 변환 점검(Linux)" slug: "server-convert-check" updated: 2026-11-06T05:06:57Z published: 2026-11-06T09:00:30Z canonical: "guide-gov.ncloud-docs.com/server-convert-check" --- > ## Documentation Index > Fetch the complete documentation index at: https://guide-gov.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # Convert to KVM 서버 이미지 변환 점검(Linux) VPC 환경에서 이용 가능합니다. Xen 또는 RHV에서 KVM으로 서버 이미지 변환 중 오류가 발생했을 때 원본 서버 OS의 변환 적합성을 확인하는 방법과 결과에 따른 조치 방법을 안내합니다. 원본 서버의 환경에 맞는 항목을 참고해 주십시오. 참고 - 변환을 위한 서버 이미지를 생성하기 전에 원본 서버를 검증해 주십시오. - 가상 머신(VM) 변환의 유효성을 점검하려면 점검 스크립트를 먼저 설치해야 합니다. - 원본 환경에 따라 지원 OS와 점검 스크립트가 다릅니다. | 원본 환경 | 지원 OS | 점검 스크립트 | 안내 | | --- | --- | --- | --- | | Xen | Rocky Linux 8.10, Ubuntu 20.04 | `x2k_validate` | [Xen to KVM](/docs/server-convert-check#XentoKVM) | | RHV | RHEL 8.10 | `r2k_validate` | [RHV to KVM](/docs/server-convert-check#RHVtoKVM) | ## Xen to KVM Xen 환경의 서버를 KVM으로 변환하는 경우의 점검 방법입니다. ### VM 점검 전 실행 사항 VM을 점검하기 전에 실행해야 하는 사항은 다음과 같습니다. #### 원본 Xen VM 기본 설정 점검 OS별 주요 파일의 존재 여부를 확인하고 파일이 수정 가능한 상태인지 확인해 주십시오. ``` # Rocky8.10 '/etc/yum.repos.d/Rocky-BaseOS.repo' '/etc/rc.d/rc.local' '/etc/default/grub' '/etc/sysconfig/network-scripts/ifcfg-eth0' '/etc/udev/rules.d' '/etc/fstab' '/etc/resolv.conf' ``` ``` # Ubuntu20.04 '/etc/apt/sources.list' '/etc/rc.local' '/etc/default/grub' '/etc/network/interfaces' '/etc/udev/rules.d' '/etc/fstab' ``` #### 주요 환경 설정 점검 1. Repo URL인 `http://repo.gov-ncloud.com/`를 바라보는지 확인해 주십시오. 2. VM 내부에 1MB 이상의 공간이 남아있는지 확인해 주십시오. 3. /etc/fstab에 오류가 있는지 확인해 주십시오. #### 점검 스크립트 다운로드 변환 대상 서버에서 점검 스크립트 x2k_validate를 다운로드해 주십시오. 주의 점검 스크립트는 변환 지원이 가능한 OS에서만 동작합니다. - 변환 지원 가능 OS: Rocky8.10, Ubuntu20.04 ``` # root 계정이 아닌 경우 sudo로 진행 # wget http://init.gov-ncloud.com/server/linux/x2k-migration/x2k_validate # chmod +x x2k_validate # ./x2k_validate ``` ### 점검 결과 확인 및 문제 조치 방법 스크립트를 실행하여 원본 서버 OS의 변환 적합성을 점검한 결과에 따른 조치 방법을 안내합니다. #### 점검 결과 문제 없음 유효성 검증 결과가 정상(SUCCESS)으로 확인되면 점검 결과 문제가 없는 상태입니다. ``` root@s1950d11189a:~# ./x2k_validate Fri 11 Apr 2025 05:10:33 PM KST Execute ./x2k_validate - start x2k convert for ubuntu 20.04 : v1.0.0-2025041102 [OK] checkExistFile : /etc/apt/sources.list exists [OK] checkImmutable : /etc/apt/sources.list mutable [OK] checkExistFile : /etc/rc.local exists [OK] checkImmutable : /etc/rc.local mutable [OK] checkExistFile : /etc/default/grub exists [OK] checkImmutable : /etc/default/grub mutable [OK] checkExistFile : /etc/network/interfaces exists [OK] checkImmutable : /etc/network/interfaces mutable [OK] checkExistFile : /etc/udev/rules.d exists [OK] checkImmutable : /etc/udev/rules.d mutable [OK] checkExistFile : /etc/fstab exists [OK] checkImmutable : /etc/fstab mutable [OK] checkRepo : the repo url valid [OK] checkSpace : enough disk space [OK] checkFstab : fstab is valid Execute ./x2k_validate - end SUCCESS ``` #### 문제별 확인 및 조치 방법 유효성 검증 결과 문제가 있을 경우, 문제별 결과 확인 및 조치 방법은 다음과 같습니다. 1. **checkRoot**: Root user로 스크립트가 수행될 수 있도록 합니다. - FAIL 로그 ``` [FAIL] checkRoot : this script must be run as root or with 'sudo' ``` - 작업 방법 ``` ncloud@s1950d11189a:~$ sudo ./x2k_validate ``` 2. **supportOS**: 지원하는 OS 및 버전인지 확인해 주십시오. - FAIL 로그 ``` [FAIL] supportOS : unsupported OS Version ``` - 확인 방법 ``` root@s1950d11189a:~# cat /etc/os-release ``` 3. **checkExistFile**: 설정 파일이 존재하는지 확인해 주십시오. - FAIL 로그 ``` [FAIL] checkExistFile : /etc/apt/sources.list does not exist ``` - 확인 방법 ``` root@s1950d11189a:~# ls /etc/apt/sources.list ls: cannot access '/etc/apt/sources.list': No such file or directory ``` - 조치 방법 - base 이미지와 동일한 파일을 생성해 주십시오. 4. **checkRepo**: 디폴트 레포 주소가 내부를 바라보는지 확인해 주십시오. - FAIL 로그 ``` [FAIL] checkRepo : /etc/apt/sources.list some repo urls are not valid ``` - 확인 방법 ``` root@s1950d11189a:~# grep -v '^$\|^#' /etc/apt/sources.list |grep 'main restricted' deb http://repo.gov-ncloud.com/ubuntu focal main restricted deb http://repo.gov-ncloud.com/ubuntu focal-updates main restricted deb http://repo.gov-ncloud.com/ubuntu focal-backports main restricted universe multiverse deb http://repo.gov-ncloud.com/ubuntu focal-security main restricted ``` - 조치 방법 ``` root@s1950d11189a:~# grep -v '^$\|^#' /etc/apt/sources.list |grep 'main restricted' deb http://repo.gov-ncloud.com/ubuntu focal main restricted deb http://repo.gov-ncloud.com/ubuntu focal-updates main restricted deb http://repo.gov-ncloud.com/ubuntu focal-backports main restricted universe multiverse deb http://repo.gov-ncloud.com/ubuntu focal-security main restricted ``` - source file을 열어 디폴트 레포 주소가 내부를 바라볼 수 있도록 수정해 주십시오. 5. **checkSpace**: 루트 파일 시스템에 1MB 이상의 용량이 남았는지 확인해 주십시오. - FAIL 로그 ``` [FAIL] checkSpace : not enough disk space ``` - 확인 방법 ``` root@s1950d11189a:~# df |grep '/$' /dev/vda2 10215700 2688948 6986236 28% / ``` - 조치 방법 - 루트 파일 시스템의 여유 용량이 1MB 이상이 될 수 있도록 불필요한 파일을 삭제해 주십시오. 6. **checkFstab**: fstab 설정 파일 내에 추가 디스크를 제외하고 / 또는 /boot 의 정상 여부를 확인해 주십시오. - FAIL 로그 ``` [FAIL] checkFstab : fstab is not valid ``` - 확인 방법 ``` root@s1950d11189a:~# findmnt --verify findmnt: /etc/fstab: parse error at line 10 -- ignored 1 parse error, 0 errors, 0 warnings ``` - 조치 방법 ``` root@s1950d11189a:~# findmnt --verify Success, no errors or warnings detected ``` - /etc/fstab를 수정하여 findmnt --verify 커맨드 수행 시 / 또는 /boot에 error가 없도록 해주십시오. 7. **checkFstab**: fstab 설정 파일 내 /dev/xvd* 와 같은 디바이스가 있는지 확인합니다. - FAIL 로그 ``` [FAIL] checkFstab : fstab containes /dev/xvd* device ``` - 확인 방법 ``` root@s1950d11189a:~# grep ^/dev/xvd /etc/fstab /dev/xvdb1 /root/test ext4 defaults 0 1 ``` - 조치 방법 ``` root@s1950d11189a:~# grep ^/dev/xvd /etc/fstab root@s1950d11189a:~# ``` - /etc/fstab 을 수정하여, /dev/xvd* 디바이스 관련한 내용이 없도록 합니다. ## RHV to KVM RHV 환경의 서버를 KVM으로 변환하는 경우의 점검 방법입니다. 공공 환경의 RHV 서버를 공공 환경의 KVM 서버로 변환하는 경우를 기준으로 하며, RHV 환경에서는 RHEL 8.10 운영 체제만 지원됩니다. ### VM 점검 전 실행 사항 VM을 점검하기 전에 실행해야 하는 사항은 다음과 같습니다. #### 원본 RHV VM 기본 설정 점검 OS별 주요 파일의 존재 여부를 확인하고 파일이 수정 가능한 상태인지 확인해 주십시오. ``` # RHEL 8.10 '/etc/dnf/dnf.conf' '/etc/yum.repos.d' '/etc/default/grub' '/etc/fstab' '/etc/resolv.conf' '/etc/sysconfig/network-scripts' '/etc/NetworkManager/system-connections' '/etc/rc.d/rc.local' '/etc/udev/rules.d' ``` #### 주요 환경 설정 점검 1. Repo URL인 `http://repo.gov-ncloud.com/`를 바라보는지 확인해 주십시오. (점검 대상: `/etc/yum.repos.d/rhel-priv.repo`) 2. 루트 파일 시스템에 1MB 이상의 공간이 남아있는지 확인해 주십시오. 3. /etc/fstab의 `/`, `/boot` 항목이 UUID 기반으로 설정되어 있고 오류가 없는지 확인해 주십시오. #### 점검 스크립트 다운로드 변환 대상 서버에서 점검 스크립트 r2k_validate를 다운로드해 주십시오. 주의 점검 스크립트는 변환 지원이 가능한 OS에서만 동작합니다. - 변환 지원 가능 OS: RHEL 8.10 (RHV 환경) ``` # root 계정이 아닌 경우 sudo로 진행 # wget http://init.gov-ncloud.com/server/linux/r2k-migration/r2k_validate # chmod +x r2k_validate # ./r2k_validate ``` 점검 결과는 화면에 출력되며, 최종 결과는 `/tmp/r2k-validateResult.log`에도 기록됩니다. ### 점검 결과 확인 및 문제 조치 방법 스크립트를 실행하여 원본 서버 OS의 변환 적합성을 점검한 결과에 따른 조치 방법을 안내합니다. #### 점검 결과 판정 기준 | 표시 | 의미 | 조치 | | --- | --- | --- | | `[OK]` | 정상 | 조치 불필요 | | `[WARN]` | 변환 단계에서 자동으로 조치되는 항목 | 변환 진행 가능. 필요 시 사전 조치 | | `[FAIL]` | 변환 불가 항목 | 반드시 조치 후 재점검 | #### 점검 결과 문제 없음 유효성 검증 결과가 정상(SUCCESS)으로 확인되면 점검 결과 문제가 없는 상태입니다. ``` [root@rhel8-host ~]# ./r2k_validate Mon Oct 26 10:00:00 AM KST 2026 Execute ./r2k_validate - start r2k convert for rhel 8.10 : v0.1.2 [OK] checkExistFile : /etc/dnf/dnf.conf exists [OK] checkImmutable : /etc/dnf/dnf.conf is mutable [OK] checkExistFile : /etc/yum.repos.d exists [OK] checkImmutable : /etc/yum.repos.d is mutable [OK] checkExistFile : /etc/default/grub exists [OK] checkImmutable : /etc/default/grub is mutable [OK] checkExistFile : /etc/fstab exists [OK] checkImmutable : /etc/fstab is mutable [OK] checkExistFile : /etc/resolv.conf exists [OK] checkImmutable : /etc/resolv.conf is mutable [OK] checkExistFile : /etc/sysconfig/network-scripts exists [OK] checkImmutable : /etc/sysconfig/network-scripts is mutable [OK] checkExistFile : /etc/NetworkManager/system-connections exists [OK] checkImmutable : /etc/NetworkManager/system-connections is mutable [OK] checkExistFile : /etc/rc.d/rc.local exists [OK] checkImmutable : /etc/rc.d/rc.local is mutable [OK] checkExistFile : /etc/udev/rules.d exists [OK] checkImmutable : /etc/udev/rules.d is mutable [OK] checkRepo : gov repo found (repo.gov-ncloud.com) [OK] checkFinResidue : no fin-ncloud.com residue [OK] checkOvirtAgent : ovirt-guest-agent not installed [OK] checkQemuAgent : qemu-guest-agent 6.2.0-49.module+el8.10.0+... matches target 6.2.0 [OK] checkMissingPkgs : all required packages installed (vim python3 cloud-utils-growpart) [OK] checkVdoRule : /etc/udev/rules.d/69-vdo-start-by-dev.rules not present [OK] checkDiscardRule : /etc/udev/rules.d/99-discard.rules present [OK] checkSpace : enough disk space (6986236 KB) [OK] checkFstab : / fstab is valid [OK] checkFstab : /boot fstab is valid Execute ./r2k_validate - end SUCCESS ``` #### 문제별 확인 및 조치 방법 (FAIL) 유효성 검증 결과 FAIL이 있을 경우, 문제별 결과 확인 및 조치 방법은 다음과 같습니다. 1. **supportOS**: 지원하는 OS 및 버전인지 확인해 주십시오. - FAIL 로그 ``` [FAIL] supportOS : unsupported OS Version (8.9) [FAIL] supportOS : unsupported OS (centos) ``` - 확인 방법 ``` [root@rhel8-host ~]# grep -E '^(ID|VERSION_ID)=' /etc/os-release ID="rhel" VERSION_ID="8.9" ``` - 조치 방법 - 지원 OS는 RHEL 8.10입니다. 마이너 버전이 다른 경우 RHEL 8.10으로 업데이트한 후 다시 점검해 주십시오. - RHEL 이외의 OS는 변환 대상이 아닙니다. 2. **checkExistFile**: 설정 파일 및 디렉터리가 존재하는지 확인해 주십시오. - FAIL 로그 ``` [FAIL] checkExistFile : /etc/dnf/dnf.conf does not exist ``` - 확인 방법 ``` [root@rhel8-host ~]# ls /etc/dnf/dnf.conf ls: cannot access '/etc/dnf/dnf.conf': No such file or directory ``` - 조치 방법 - base 이미지와 동일한 파일(또는 디렉터리)을 생성해 주십시오. 3. **checkImmutable**: 설정 파일 및 디렉터리에 immutable 속성이 설정되어 있지 않은지 확인해 주십시오. - FAIL 로그 ``` [FAIL] checkImmutable : /etc/fstab is immutable ``` - 확인 방법 ``` [root@rhel8-host ~]# lsattr /etc/fstab ----i----------------- /etc/fstab ``` - 디렉터리는 `lsattr -d <디렉터리>`로 확인해 주십시오. - 조치 방법 ``` [root@rhel8-host ~]# chattr -i /etc/fstab [root@rhel8-host ~]# lsattr /etc/fstab -------------------- /etc/fstab ``` - immutable 속성을 해제해 주십시오. 4. **checkRepo**: 디폴트 repo 주소가 내부(gov) repo를 바라보는지 확인해 주십시오. - FAIL 로그 ``` [FAIL] checkRepo : /etc/yum.repos.d/rhel-priv.repo does not exist [FAIL] checkRepo : no baseurl found in /etc/yum.repos.d/rhel-priv.repo [FAIL] checkRepo : some repo urls are not ncloud internal ``` - 확인 방법 ``` [root@rhel8-host ~]# grep -v '^#' /etc/yum.repos.d/rhel-priv.repo | grep baseurl baseurl=http://mirror.example.com/... ``` - 조치 방법 ``` [root@rhel8-host ~]# grep -v '^#' /etc/yum.repos.d/rhel-priv.repo | grep baseurl baseurl=http://repo.gov-ncloud.com/... ``` - rhel-priv.repo가 없는 경우 base 이미지와 동일한 파일을 생성해 주십시오. - repo 파일을 열어 baseurl이 내부 repo(repo.gov-ncloud.com)를 바라보도록 수정해 주십시오. 5. **checkSpace**: 루트 파일 시스템에 1MB 이상의 용량이 남았는지 확인해 주십시오. - FAIL 로그 ``` [FAIL] checkSpace : not enough disk space (528 KB) ``` - 확인 방법 ``` [root@rhel8-host ~]# df | grep '% /$' /dev/mapper/rhel-root 10475520 10474992 528 100% / ``` - 조치 방법 - 루트 파일 시스템의 여유 용량이 1MB 이상이 될 수 있도록 불필요한 파일을 삭제해 주십시오. (예: `dnf clean all`) 6. **checkFstab**: /etc/fstab의 `/`, `/boot` 항목이 UUID 기반이며 실제 마운트된 장치와 일치하는지 확인해 주십시오. 추가 디스크 항목은 점검 대상이 아닙니다. - FAIL 로그 | FAIL 로그 | 원인 | | --- | --- | | `[FAIL] checkFstab : / fstab is not UUID-based` | `/` 항목이 UUID가 아닌 장치명으로 설정됨 (`/boot`도 동일) | | `[FAIL] checkFstab : / fstab UUID not resolvable` | fstab에 적힌 UUID에 해당하는 장치가 없음 | | `[FAIL] checkFstab : / fstab device mismatch` | fstab의 UUID 장치와 실제 마운트된 장치가 다름 | | `[FAIL] checkFstab : fstab has neither / nor /boot` | fstab에 `/`, `/boot` 항목이 모두 없음 | - 확인 방법 ``` [root@rhel8-host ~]# grep -v '^#' /etc/fstab | awk '$2=="/" || $2=="/boot"' /dev/sda2 / xfs defaults 0 0 [root@rhel8-host ~]# findmnt -n -o SOURCE --target / /dev/sda2 ``` - 조치 방법 ``` [root@rhel8-host ~]# blkid -s UUID -o value /dev/sda2 # /etc/fstab UUID= / xfs defaults 0 0 ``` ``` [root@rhel8-host ~]# findmnt --verify Success, no errors or warnings detected ``` - 실제 장치의 UUID를 확인하여 /etc/fstab의 `/`, `/boot` 항목을 UUID 기반으로 수정해 주십시오. - 수정 후 `findmnt --verify` 수행 시 `/`, `/boot`에 error가 없도록 해주십시오. #### WARN 항목 확인 및 조치 방법 WARN은 변환 단계에서 자동으로 조치되는 항목이므로 변환을 진행할 수 있습니다. 변환 전에 미리 조치하려는 경우 아래 방법을 참고해 주십시오. 1. **checkOvirtAgent**: KVM 환경에서 불필요한 ovirt-guest-agent 설치 여부를 확인합니다. - WARN 로그 ``` [WARN] checkOvirtAgent : ovirt-guest-agent installed → will be removed on convert ``` - 확인 방법 ``` [root@rhel8-host ~]# rpm -q ovirt-guest-agent-common ovirt-guest-agent ``` - 조치 방법 - 별도 조치가 필요하지 않습니다. 변환 시 자동으로 제거됩니다. 2. **checkQemuAgent**: qemu-guest-agent의 설치 여부와 버전(6.2.0)을 확인합니다. - WARN 로그 ``` [WARN] checkQemuAgent : qemu-guest-agent not installed → will be installed (6.2.0) on convert [WARN] checkQemuAgent : qemu-guest-agent <현재 버전> differs from target 6.2.0 → convert will switch ``` - 확인 방법 ``` [root@rhel8-host ~]# rpm -q qemu-guest-agent ``` - 조치 방법 - 별도 조치가 필요하지 않습니다. 변환 시 6.2.0 버전으로 설치 또는 교체됩니다. 3. **checkMissingPkgs**: 필수 패키지(vim, python3, cloud-utils-growpart)의 설치 여부를 확인합니다. - WARN 로그 ``` [WARN] checkMissingPkgs : missing packages: vim python3 → convert will install ``` - 확인 방법 ``` [root@rhel8-host ~]# rpm -q vim python3 cloud-utils-growpart ``` - 조치 방법 - 별도 조치가 필요하지 않습니다. 변환 시 누락된 패키지가 자동으로 설치됩니다. 4. **checkVdoRule**: RHV 환경에서 사용되던 udev rule(69-vdo-start-by-dev.rules)의 존재 여부를 확인합니다. - WARN 로그 ``` [WARN] checkVdoRule : /etc/udev/rules.d/69-vdo-start-by-dev.rules exists → convert will remove ``` - 확인 방법 ``` [root@rhel8-host ~]# ls /etc/udev/rules.d/69-vdo-start-by-dev.rules ``` - 조치 방법 - 별도 조치가 필요하지 않습니다. 변환 시 자동으로 제거됩니다. 5. **checkDiscardRule**: KVM 환경의 디스크 discard 설정 rule(99-discard.rules)의 존재 여부를 확인합니다. - WARN 로그 ``` [WARN] checkDiscardRule : /etc/udev/rules.d/99-discard.rules missing → convert will add ``` - 확인 방법 ``` [root@rhel8-host ~]# grep discard_max_bytes /etc/udev/rules.d/99-discard.rules ``` - 조치 방법 - 별도 조치가 필요하지 않습니다. 변환 시 자동으로 추가됩니다. 6. **checkFstab (장치명 직접 지정)**: /etc/fstab에 /dev/sd*, /dev/vd* 장치명이 직접 지정된 항목이 있는지 확인합니다. KVM 환경에서는 장치명이 달라질 수 있어 UUID 사용을 권장합니다. 이 항목은 자동 조치되지 않습니다. - WARN 로그 ``` [WARN] checkFstab : raw device entries (/dev/sd*|/dev/vd*) detected in fstab ``` - 확인 방법 ``` [root@rhel8-host ~]# grep -E '^\s*/dev/(sd|vd)[a-z]+' /etc/fstab /dev/sdb1 /data xfs defaults 0 0 ``` - 조치 방법 ``` [root@rhel8-host ~]# blkid -s UUID -o value /dev/sdb1 # /etc/fstab UUID= /data xfs defaults 0 0 ``` ``` [root@rhel8-host ~]# grep -E '^\s*/dev/(sd|vd)[a-z]+' /etc/fstab [root@rhel8-host ~]# ``` - /etc/fstab을 수정하여 해당 항목을 UUID 기반으로 변경해 주십시오.