출처: 라즈베리파이4 usb(SSD)로 부팅시키기 : 네이버 블로그 (naver.com)
안녕하세요. 오늘은 라즈베리파이 보드 중 최신버전인 라즈베리파이4를 SD카드가 아닌 USB나 SSD와 같은 외부 저정장치를 통해 부팅하는 방법에 대해 알아보도록 하겠습니다.
이 방법은 라즈베리파이4에서만 동작하고 그 이전버전은 이 방법으로 적용이 안되는 데요.(다른 방법을 써야 합니다.) 그 이유는 라즈베리파이가 4버전으로 출시되면서 내부에 512KB의 용량을 가진 eeprom을 새롭게 탑재했기 때문입니다.(이전 버전에는 없었다고 합니다.) 이 eeprom에 부트로더용 펌웨어를 수정해 주면 sd카드 뿐 아니라 USB나 SSD등의 외부 저장장치를 통해 라즈베리파이를 부팅시킬수가 있는데요. 얼마전 라즈베리파이재단에서 베타버전을 공개해서 한번 설치를 해 봤습니다., 2020년 6월 15일에 stable버전으로 출시해서 포스팅을 수정했습니다. 2020년 9월 3일에 stable버전이 정식 버전(critical)으로 업데이트되어 다시 수정했습니다.
그런데 외부 저장장치로 부팅을 하면 뭐가 더 좋은 걸까요?
몇가지 좋은 점이 있는데요. 첫번째는 속도의 향상입니다.
ssd 속도
SD카드는 빨라야 최대 50MBps 정도의 속도를 가지는 정도인데 반면 SSD는 판매되고 있는 것들만 해도 이미 500MBps 정도되니 속도가 10배이상이나 빠릅니다. 따라서 라즈베리파이를 부팅하는 속도나 데이터를 읽고쓰는 속도를 높일 수 있습니다.
둘째로는 안정성입니다. SD카드는 수명이 다른 저장장치에 비해 짧은 편이라서 언제든 사용중에 데이터가 날라갈 수 있는데요.(중요한 자료는 백업을 해 둡시다.!) USB나 SSD는 SD카드보다는 수명이 긴 편이기 때문에 안정성면에서 더 좋다고 볼 수 있습니다.
그럼 이제 USB로 라즈베피라이를 부팅할 수 있는 방법에 대해서 알아볼까요?
라즈베리파이의 부팅
우선 간략히 라즈베리파이4의 부팅과정을 살펴보도록 하겠습니다.-
라즈베리파이4의 부팅과정은 아래의 단계를 따르게 됩니다.
BCM2711
1. BCM2711 SoC에 전원인가
2. 부팅롬이 부트로더 리커버리파일(recovery.bin)이 SD카드에 있는지 확인, SD카드에 리커버리 파일이 있으면 실행해서 EEPROM을 초기화하고 리커버리파일이 없으면 EEPROM에서 메인부트로더를 읽어들임
3. 메인 부트로더는 부팅순서설정(BOOT_ORDER CONFIGURATION) 항목을 확인해서 어떤 저장장치(SD카드, 네트워크, USB저장장치)로 부팅할 지 결정
4. 지정된 저장장치의 start*.elf파일로 부팅과정이 넘어간 뒤에 다시 커널을 불러옴으로써 부팅이 완료 됩니다.
위 과정 중에 EEPROM의 메인부트로더의 부팅순서 항목에 USB저장장치가 포함되도록 변경해 주면 USB로 부팅을 하는 것이 가능해 지는 것인데요. 현재 설정된 기본 부트로더는 USB부팅이 지원이 안되기 때문에 최신버전의 부트로더를 설치해서 USB부팅이 가능하도록 설정값을 바꿔 주는 것입니다.
진행 과정중 또는 의도치 않게 EEPROM의 펌웨어에 오류가 생겨 부팅이 안되는 경우가 발생할 수 있는데요. 그럴 때는 리커버리파일을 SD카드에 구워서 전원을 인가해주면 EEPROM을 초기화 할 수 있으므로 걱정하시지 않아도 됩니다.
EEPROM의 펌웨어 업데이트
우선 진행하기에 앞서 라즈베리파이를 터미널 모드로 진입해 주어야 하는데요. 라즈베리파이 OS 라이트 버전을 통한 설치 및 접속방법은 아래 포스팅을 참고하시면 됩니다.
라즈베리파이 4 시작하기(초기 설정-hdmi케이블 불필요)
라즈베리파이4 시작하기라즈베리 파이4를 시작하기 위해서는 원래 라즈베리파이를 USB키보드와 마우...
blog.naver.com
펌웨어 업데이트를 위한 단계는 아래와 같습니다.
1. 패키지 목록을 최신화 해줍니다. |
아래의 두 명령어를 입력해서 우선 라즈베리파이의 패키지를 최신화 하고 업그레이드 해줍니다.
sudo apt update sudo apt upgrade
(라즈베리파이 OS를 설치하고 처음 업그레이드를 하거나 오랫동안 패키지 업그레이드를 안했다면 시간이 꽤 걸릴 수 있습니다.)
2. rpi-eeprom 명령어를 통해 eeprom의 펌웨어 버전 확인 및 업데이트 |
라즈베리파이4의 eeprom은 rpi-eeprom이라고 부르는 패키지를 통해 펌웨어를 관리하고 업데이트할 수 있습니다. 이 패키지를 통해 현재 eeprom에서 사용중인 펌웨어의 버전을 확인 할 수 있는데요. 아래 명령어를 통해 확인 할 수 있습니다.(라즈베인OS에 이 패키지가 기본적으로 내장되어 있습니다.)
pi@raspberrypi:~ $ sudo rpi-eeprom-update
최신버전의 eeprom 펌웨어 버전과 현재 내가 사용중인 업데이트 버전이 다르다면 아래 처럼 UPDATE AVAILABLE이라는 문구가 뜨게 됩니다.(2020년 9월 21일 기준 최신버전은 "Thu 3 Sep 12:11:43 UTC 2020") 입니다.
pi@raspberrypi:~ $ sudo rpi-eeprom-update BCM2711 detected Dedicated VL805 EEPROM detected *** UPDATE AVAILABLE *** BOOTLOADER: update available CURRENT: Fri 31 Jul 13:43:39 UTC 2020 (1596203019) LATEST: Thu 3 Sep 12:11:43 UTC 2020 (1599135103) FW DIR: /lib/firmware/raspberrypi/bootloader/critical VL805: update available CURRENT: 000137ad LATEST: 000138a1
실제 펌웨어를 업데이트 하기 위해서는 아래 명령어를 입력하면 됩니다.
pi@raspberrypi:~ $ sudo rpi-eeprom-update -a
명령어를 입력하면 아래와 같은 메시지가 뜨는데요. 재부팅하라는 메시지가 마지막에 나옵니다.
pi@raspberrypi:~ $ sudo rpi-eeprom-update -a BCM2711 detected Dedicated VL805 EEPROM detected BOOTFS /boot *** INSTALLING EEPROM UPDATES *** BOOTLOADER: update available CURRENT: Fri 31 Jul 13:43:39 UTC 2020 (1596203019) LATEST: Thu 3 Sep 12:11:43 UTC 2020 (1599135103) FW DIR: /lib/firmware/raspberrypi/bootloader/critical VL805: update available CURRENT: 000137ad LATEST: 000138a1 BOOTFS /boot EEPROM updates pending. Please reboot to apply the update.
위 명령어가 입력되면 라즈베리파이에서는 내부적으로는 sd카드의 /boot 파티션 내에 아래사진과 같이 새로운 부트로더 파일을 생성되게 됩니다.
3. 라즈베리파이 재부팅 |
이제 라즈베리파이를 아래 명령어로 재부팅 해주어야 합니다.
sudo reboot
재부팅시에는 부팅롬이 위 2단계에서 생성되었던 sd카드의 boot파티션에서 recovery.bin을 인식해서 eeprom을 초기화 하고 새로운 부트로더이미지파일을 eeprom에 쓰게 됩니다. 그리고 위에서 생성되었던 3개의 파일은 다시 boot파티션에서 사라지게 됩니다.
4. 재부팅된 라즈베리파이의 부트로더의 버전 확인 및 라즈비안 종료 |
이제 부트로더의 업데이트가 제대로 되었는지 확인하기 위해 재부팅된 라즈베리파이의 터미널에서 위에서 입력했었던 rpi-eeprom-update명령어를 다시 입력합니다.
pi@raspberrypi:~ $ sudo rpi-eeprom-update BCM2711 detected Dedicated VL805 EEPROM detected BOOTLOADER: up-to-date CURRENT: Thu 3 Sep 12:11:43 UTC 2020 (1599135103) LATEST: Thu 3 Sep 12:11:43 UTC 2020 (1599135103) FW DIR: /lib/firmware/raspberrypi/bootloader/critical VL805: up-to-date CURRENT: 000138a1 LATEST: 000138a1
위와 같이 최신 펌웨어 버전과 내 범웨어 버전이 일치하고 up-to-date라고 뜨면 제대로 업데이트가 완료 된 것입니다.
그리고 USB부팅이 지정되었는지 확인하기 위해 아래와 같이 "vcgencmd bootloader_config"를 입력해 보면 BOOT_ORDER 항목에 0xf41 이 입력되어 있는데요. 이 값은 SD카드외에 USB를 부팅순서에 추가한다는 의미입니다.(SD카드로만 부팅되도록 설정되어 있을 때에는 0x1로 지정되어 있습니다.)
pi@emperorbear:~ $ vcgencmd bootloader_config [all] BOOT_UART=0 WAKE_ON_GPIO=1 POWER_OFF_ON_HALT=0 DHCP_TIMEOUT=45000 DHCP_REQ_TIMEOUT=4000 TFTP_FILE_TIMEOUT=30000 ENABLE_SELF_UPDATE=1 DISABLE_HDMI=0 BOOT_ORDER=0xf41
제대로 업데이트가 되었다면 이제 아래 명령어를 통해 라즈비안을 종료시킵니다.
pi@raspberrypi:~ $ sudo shutdown -h now
그다음 전원을 분리하고 sd카드는 분리시켜 줍니다.
* 만약 EEPROM 업데이트 이후에도 BOOT_ORDER가 변경되지 않았다면 부팅순서 설정만 수동으로 변경시켜 주면 됩니다. 아래 명령어를 입력해서 eeprom의 설정변경 탭을 연 뒤에 BOOT_ORDER의 설정값을 0xf41로 변경시켜 줍니다.
sudo -E rpi-eeprom-config --edit
아래 명령어로 재부팅 이후에 위 "vcgencmd bootloader_config"명령어를 통해 부팅순서 설정값이 변경되었는지 확인합니다.
sudo reboot
5. 외부저장장치(USB, SSD)에 라즈베리파이 OS(이미지파일) 굽기 |
이제 처음에 SD카드에 설치할때 했던 방법과 동일하게(Etcher 등의 이미지라이팅 프로그램을 사용해서) 라즈베리파이 OS를 USB에 구워줍니다. SD카드에 구울 때와 방법은 동일하게 하되 설치할 대상 드라이브를 사용할 USB로 지정하면 됩니다.
ssh나 와이파이 설정이 필요하신 분들은 sd카드 설정때와 동일하게 USB디스크의 boot 파티션에 설정을 해 주시면 됩니다.(아래 포스팅 참고)
라즈베리파이 4 시작하기(초기 설정-hdmi케이블 불필요)
라즈베리파이4 시작하기라즈베리 파이4를 시작하기 위해서는 원래 라즈베리파이를 USB키보드와 마우...
blog.naver.com
6. USB로 부팅하기 |
이제 라즈베리파이에서 기본에 꽂았던 SD카드를 제거하고 새로 라즈베리파이 OS를 설치한 USB를 꽂고 전원을 인가합니다. 제대로 진행이 되었다면 usb로부터 부팅이 진행되게 됩니다.
USB에서 부팅이 됩니다. 예~~~
이제는 집에 굴러다니는 USB로 라즈베리파이 부팅시킬 수 있겠죠? ㅎㅎㅎ
*참고로 외국의 포럼에 ssd의 경우에는 잘 되는 모델이 있고 안되는 모델이 있다고 하니 참고하셔야 할 것 같습니다. 그리고 외장하드 중 전원을 많이 필요로 하는 경우에는 잘 동작하지 않을 수 있기 때문에 그런경우 외부저장장치에 별도로 전원을 인가시켜 주어야 합니다.
참고자료
[참고자료]
- 라즈베리파이 공식 매뉴얼: https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711_bootloader_config.md
Pi 4 Bootloader Configuration - Raspberry Pi Documentation
documentation > hardware > raspberrypi > bcm2711_bootloader_config
www.raspberrypi.org
- https://www.tomshardware.com/how-to/boot-raspberry-pi-4-usb
How to Boot Raspberry Pi 4 From a USB SSD or Flash Drive
A new firmware update lets you use any USB device to boot a Pi 4.
www.tomshardware.com
'언어 > 라즈베리파이' 카테고리의 다른 글
UART configuration (0) | 2021.02.21 |
---|---|
[리눅스]우분투 apt-get 패키지 설치 및 제거, 업그레이드 방법 (0) | 2021.02.20 |
라즈베리파이 SD card 이미지 복제하고 재설치하기 (0) | 2021.02.18 |
How to build app for Raspberry Pi from Windows 7 (0) | 2021.02.12 |
Backing up an OS Image and convert to Berryboot. Ubuntu Mate download Links. Raspberry Pi 4 (0) | 2021.02.10 |