본문 바로가기
Tech/Physical Computing

RPI5 SD card 부팅 상태에서 NVMe로 이미지 복사해서 전환하기

by redcubes 2025. 2. 16.

하드웨어 준비물

  1. 라즈베리파이 5
  2. M.2 NVMe가 장착 가능한 PCle 인터페이스 HAT(for RPi5)
  3. M.2 NVMe

위 준비물조합 × n개 세트

작업내용

    1. 부트로더 업데이트 및 부팅 순서 설정: NVMe 에 부트 미디어가 있는지 부트로더가 살펴보게 합니다.
      • 부트로더 업데이트: 최신 부트로더를 사용해야 NVMe 부팅이 가능합니다. SD 카드를 통해 라즈베리파이를 부팅한 후, 터미널에서 다음 명령어를 실행하여 부트로더를 업데이트하세요.
        sudo apt update
        sudo apt full-upgrade
        sudo rpi-eeprom-update -d -a


      • 부팅 순서 설정: 부트로더 설정 파일을 편집하여 NVMe를 우선 부팅 장치로 지정해야 합니다. 다음 명령어를 실행하여 설정 파일을 엽니다.
        sudo -E rpi-eeprom-config --edit
        파일에서 BOOT_ORDER 항목을 찾아 0xf416으로 설정합니다. 이 값은 NVMe를 첫 번째 부팅 장치로 지정하는 것을 의미합니다. 수정 후 저장하고 편집기를 종료하세요.
        부팅 순서 설정 시 BOOT_ORDER 값을 0xf41로 설정하여 SD 카드를 우선 부팅 장치로 지정하고, NVMe를 두 번째로 설정하는 것도 고려해 볼 수 있습니다. 이렇게 하면 NVMe 부팅에 문제가 발생했을 때 SD 카드로 부팅하여 문제를 해결할 수 있습니다.
      • sudo -E rpi-eeprom-config --edit 명령어를 실행할 때 "ERROR: rpi-eeprom-update -b timeout"이라는 오류 메시지
        flashrom 패키지 설치 확인:
        rpi-eeprom-config 도구는 flashrom 패키지에 의존합니다. flashrom이 설치되어 있지 않으면 오류가 발생할 수 있습니다. 터미널에서 다음 명령어를 실행하여 flashrom이 설치되어 있는지 확인하고, 설치되어 있지 않다면 설치해 보세요.
        sudo apt update
        sudo apt install flashrom
        
        설치 후, rpi-eeprom-config --edit 명령어를 다시 시도해 보세요.
    1.  
    2. PCIe 포트 활성화: NVMe와 통신할 수 있게 허용해 줍니다.
      • /boot/config.txt 파일을 편집하여 PCIe 포트를 활성화해야 합니다. 다음 명령어를 실행하여 파일을 엽니다.
        sudo nano /boot/firmware/config.txt
      • 파일의 마지막에 다음 줄을 추가하여 PCIe 포트를 활성화합니다.
        dtparam=pciex1
        저장하고 편집기를 종료한 후, 라즈베리파이를 재부팅합니다.
    3. 라즈베리파이의 현재 시스템을 NVMe SSD로 복사하기: NVMe에 부트 미디어를 복사합니다.
        • 디스크 식별:
          • 터미널에서 lsblk 명령어를 실행하여 연결된 디스크와 파티션을 확인합니다.
            lsblk
            
          • 출력 결과에서 NVMe SSD의 디바이스 이름을 확인합니다. 일반적으로 /dev/nvme0n1과 같은 형식입니다.
        • 디스크 복사:
          • dd 명령어를 사용하여 SD 카드의 내용을 NVMe SSD로 복사합니다. 이때, if는 입력 파일(현재 SD 카드), of는 출력 파일(NVMe SSD)을 의미합니다.
            sudo dd if=/dev/mmcblk0 of=/dev/nvme0n1 bs=4M status=progress
            
          • 이 명령어는 SD 카드의 모든 데이터를 NVMe SSD로 복사합니다. 복사 시간은 SD 카드와 NVMe SSD의 속도에 따라 다를 수 있습니다.
          • 노드 4번이 이 단계에서 ssd가 인식되지 않았습니다. 그런 경우에 대해서는 추가로 설명하는 글을 쓸 예정입니다.
        • 파일 시스템 점검 및 복구:
          • e2fsck 명령어를 사용하여 NVMe SSD의 두 번째 파티션(/dev/nvme0n1p2)을 점검하고 복구합니다.
            sudo e2fsck -f /dev/nvme0n1p2
            
          • -f 옵션은 파일 시스템이 깨끗하더라도 강제로 점검을 수행합니다. 이 과정에서 발견된 오류는 수정되며, 사용자에게 수정 여부를 묻는 메시지가 나타날 수 있습니다. 모든 프롬프트에 자동으로 'yes'라고 응답하려면 -y 옵션을 추가할 수 있습니다.
            sudo e2fsck -f -y /dev/nvme0n1p2
            
          • 주의: 파일 시스템 점검 및 복구 작업은 데이터 손실의 위험이 있으므로, 중요한 데이터는 사전에 백업하시기 바랍니다.
        • 파일 시스템 크기 조정: 파일 시스템 점검이 완료되면, resize2fs 명령어를 사용하여 파일 시스템의 크기를 조정합니다.
          sudo resize2fs /dev/nvme0n1p2
          
        • 이 명령어는 파티션의 크기에 맞게 파일 시스템을 확장합니다. 만약 특정 크기로 조정하려면, 크기를 명시적으로 지정할 수 있습니다. 예를 들어, 100GB로 설정하려면 아래와 같이 입력합니다.
          sudo resize2fs /dev/nvme0n1p2 100G
          
          추가 참고 사항: e2fsck 및 resize2fs 명령어는 마운트되지 않은(unmounted) 상태의 파일 시스템에서 실행하는 것이 권장됩니다. 마운트된 상태에서 실행하면 데이터 손상이나 시스템 불안정이 발생할 수 있습니다. 따라서 해당 파티션을 사용 중인 경우, 가능한 한 언마운트한 후 진행하시기 바랍니다. 만약 루트 파일 시스템 등 언마운트할 수 없는 파티션이라면, 시스템을 복구 모드로 부팅하거나 라이브 USB를 사용하여 부팅한 후 해당 작업을 수행하는 것이 좋습니다. 위 내용은 저의 경우엔 동작하지 않아서 추후 SSD부팅해서 raspi-config에서 아래와 같이 확장했습니다.

      1. NVMe SSD의 부트 파티션에 있는 /boot/firmware/cmdline.txt 파일 수정:SD카드용 설정을 NVMe기준으로 변경 
        1. NVMe SSD의 부트 파티션 마운트
            • 먼저, NVMe SSD의 첫 번째 파티션을 임시 디렉토리에 마운트합니다.
          sudo mkdir -p /mnt/nvme_boot
          sudo mount /dev/nvme0n1p1 /mnt/nvme_boot
          • 이제 NVMe SSD의 부트 파티션이 /mnt/nvme_boot 디렉토리에 마운트되었습니다.
        2. PARTUUID 확인
            • blkid 명령어를 사용하여 NVMe SSD의 루트 파티션의 PARTUUID를 확인합니다.
          sudo blkid /dev/nvme0n1p2
          • 출력 결과에서 PARTUUID="xxxx-xxxx" 형식의 값을 확인하고, 앞서 편집한 cmdline.txt 파일의 root=PARTUUID=... 부분에 이 값을 입력합니다.
        3. cmdline.txt 파일 수정
            • 마운트한 디렉토리에서 cmdline.txt 파일을 편집합니다.
          sudo nano /mnt/nvme_boot/cmdline.txt
          • 파일 내에서 root=PARTUUID=... 부분을 찾아, NVMe SSD의 루트 파티션(nvme0n1p2)에 해당하는 PARTUUID로 변경합니다.
        4. 변경 사항 저장 및 마운트 해제
            • cmdline.txt 파일을 저장하고 편집기를 종료한 후, NVMe SSD의 부트 파티션을 마운트 해제합니다.
          sudo umount /mnt/nvme_boot
          이러한 과정을 통해 NVMe SSD의 부트 파티션에 있는 cmdline.txt 파일을 올바르게 수정하여, 시스템이 NVMe SSD에서 부팅되도록 설정할 수 있습니다.
        5. 재부팅 및 확인
            • 모든 과정이 완료되면 라즈베리파이를 재부팅합니다.
          sudo reboot
          • 재부팅 후 lsblk 명령어를 실행하여 시스템이 NVMe SSD에서 부팅되었는지 확인합니다.

 주의사항

  • dd 명령어 사용 시 디바이스 이름을 정확하게 지정하지 않으면 데이터 손실이 발생할 수 있으므로 주의하시기 바랍니다.
  • 중요한 데이터는 사전에 백업해 두는 것을 권장합니다.