Proxmox 8.0에서 eMMC설치 시 Unable to get device for partition 1 on device /dev/mmcblk0 오류 해결하기

NamYounSu·2023년 7월 10일
0

서론

가상화 플랫폼 중 ESXi, XenServer말고도 Proxmox라는 qemu를 사용하는 플랫폼이 있다. 앞 둘과 다르게 debian기반이라 생각보다 많은 곳에서 설치가 가능한데, 공식적으로는 USB, eMMC, SD카드 등에 설치가 불가하다.

사실 그냥 무시하고 설치하려고 하면

Unable to get device for partition 1 on device /dev/mmcblk0

라는 오류와 함께 설치가 종료된다. 하지만 우리는 언제나 그렇듯 방법을 찾아 낼 것이다.

준비

방법을 적용하기 위해서는 설치 시 Advanced Option으로 접근해서 디버그 모드로 수행해야 하는데. 방법은 아래와 같다.

먼저 부팅이 되면 방향키를 통해 Advanced Option으로 접근한 후, Install Proxmox VE (Graphical Debug Mode) 로 접근한다.

이후 부팅이 시작되면 디버그 모드로 진입하는데 Ctrl + D를 눌러 빠져나온다. 우리는 이 메뉴가 아닌 다음 메뉴가 필요하다.

전체적으로 부팅이 완료되면 루트 콘솔이 기다리고 있다. 모든 작업을 완료한 후 Ctrl + D 를 눌러 설치 프로그램을 시작할 수 있다는 메세지를 잊지 말자

해결 방법 1. 8.0 이전까지의 방법

7.3 버전까지는 이 글에서와 같이 설치 프로그램 자체에 스토리지를 확인하는 방법이 하드 코딩 되어있기 때문에 소스코드를 조금만 수정해주면 된다.

이제 vi나 nano등을 통해 직접 수정하는데, 아래의 위치를 수정한다. 예시는 vi로 편집할때이다.

root@proxmox:/# vi /usr/bin/proxinstall

그럼 소스코드가 등장하는데, 이때 검색 기능을 통해 unable to get device부분을 찾다 보면, 아래와 같은 소스코드를 볼 수 있다.

 } elsif ($dev =~ m|^/dev/[^/]+/hd[a-z]$|) {
     return "${dev}$partnum";
 } elsif ($dev =~ m|^/dev/nvme\d+n\d+$|) {
     return "${dev}p$partnum";
 } else {
     die "unable to get device for partition $partnum on device $dev\n";
 }

이를 아래와 같이 수정해준다.

 } elsif ($dev =~ m|^/dev/[^/]+/hd[a-z]$|) {
     return "${dev}$partnum";
 } elsif ($dev =~ m|^/dev/nvme\d+n\d+$|) {
     return "${dev}p$partnum";
 } elsif ($dev =~ m|^/dev/mmcblk\d+$|) { // 요 elsif를 추가한다
     return "${dev}p$partnum";
 } else {
     die "unable to get device for partition $partnum on device $dev\n";
 }

이후 위에서 설명했듯이, Ctrl + D를 눌러 나가면 정상적으로 설치가 가능하다.

방법 2. 8.0 부터의 방법

하지만 애석하게도 8.0에서부턴 저 파일에 존재하는 방법을 삭제하였다.
그래서 소스코드를 직접 분석한 결과, Block.pm파일이 담당하는 것을 알게 되었다.

각설하고. 8.0 부터는 아래의 위치로 접근하면 된다. 대소문자는 당연히 틀리면 안된다.

root@proxmox:/# vi /usr/share/perl5/Proxmox/Sys/Block.pm

그럼 소스코드가 등장하는데, 이때 검색 기능을 통해 unable to get device부분을 찾다 보면, 아래와 같은 소스코드를 볼 수 있다.

 } elsif ($dev =~ m|^/dev/[^/]+/hd[a-z]$|) {
     return "${dev}$partnum";
 } elsif ($dev =~ m|^/dev/nvme\d+n\d+$|) {
     return "${dev}p$partnum";
 } else {
     die "unable to get device for partition $partnum on device $dev\n";
 }

이를 아래와 같이 수정해준다.

 } elsif ($dev =~ m|^/dev/[^/]+/hd[a-z]$|) {
     return "${dev}$partnum";
 } elsif ($dev =~ m|^/dev/nvme\d+n\d+$|) {
     return "${dev}p$partnum";
 } elsif ($dev =~ m|^/dev/mmcblk\d+$|) { // 요 elsif를 추가한다
     return "${dev}p$partnum";
 } else {
     die "unable to get device for partition $partnum on device $dev\n";
 }

이후 위에서 설명했듯이, Ctrl + D를 눌러 나가면 정상적으로 설치가 가능하다.

후기

8.0 부터는 위치가 달라진 덕분에 잠시 당황하였으나, 꽤 어렵지 않은 위치에 있어 수정이 쉬운 편이였다.

사실 내가 테스트용 시스템으로 활용 한 ODROID-H3같은 경우에는 내장 eMMC를 하드디스크로 에뮬레이션이 가능하나, 그걸 설치 다 하고 알아차렸다.

뭐 그게 오픈소스의 재미인거지 뭐.

참조

Proxmox-forum
Install Proxmox VE on eMMC
proxmox-installer-code

profile
The Power of Dreams

0개의 댓글