라즈베리파이 (RPI) Ubuntu에서 M.2 디스로 부팅하기

By | 2023년 01월 01일

대표적인 Single Board Computer(SBC) 인 라즈베라파이 CM4를 구매하여 시스템을 꾸며 보았다. CM4 는 32 GB eMMC Flash memory 가 내장되어 있어 OS (ubuntu) 를 설치할 수 있으나 용량이 적어 다른 앱을 설치하거나 사용 데이타가 커지면 금방 디스크가 차게 된다. 이를 극복하기 위해 캐리어 보드에 M.2 ssd를 설치하고 M.2 디스크에서 부팅하게 하는 방법을 정리하였다.

1. eMMC Flash memory 에 우분투 (ubuntu) 설치

먼저 eMMC에 우분투를 설치한다. Rasberry Pi Manager 를 이용하여 OS를 설치하는 방법에 대해서는 인터넷에 잘 나와있어 여기서는 설명하지 않겠다.

2. M.2 ssd 파티셔닝 하기

아래와 같은 방법으로 M.2 ssd를 파티션 한다.
먼저 디스크를 확인해 보자 '

$ lsblk
   NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
   loop0          7:0    0     4K  1 loop /snap/bare/5
   loop1          7:1    0  57.9M  1 loop /snap/core20/1590
   loop2          7:2    0 151.4M  1 loop /snap/firefox/1671
   loop3          7:3    0 383.8M  1 loop /snap/gnome-3-38-2004/113
   loop4          7:4    0  91.7M  1 loop /snap/gtk-common-themes/1535
   loop5          7:5    0  44.3M  1 loop /snap/snap-store/581
   loop6          7:6    0  40.6M  1 loop /snap/snapd/16299
   loop7          7:7    0   276K  1 loop /snap/snapd-desktop-integration/15
   mmcblk0      179:0    0  29.1G  0 disk 
   ├─mmcblk0p1  179:1    0   256M  0 part /boot/firmware
   └─mmcblk0p2  179:2    0  28.9G  0 part /
   mmcblk0boot0 179:32   0     4M  1 disk 
   mmcblk0boot1 179:64   0     4M  1 disk 
   nvme0n1      259:0    0 465.8G  0 disk

파티션을 위해 다음의 명령을 실행한다.

$ sudo fdisk  /dev/nvme0n1
   Command (m for help): p

   Disk /dev/nvme0n1: 465.76 GiB, 500107862016 bytes, 976773168 sectors
   Disk model: WD Blue SN570 500GB                     
   Units: sectors of 1 * 512 = 512 bytes
   Sector size (logical/physical): 512 bytes / 512 bytes
   I/O size (minimum/optimal): 512 bytes / 512 bytes
   Disklabel type: dos
   Disk identifier: 0xa356d7d1

   Device         Boot Start       End   Sectors   Size Id Type
   /dev/nvme0n1p1       2048 976773119 976771072 465.8G 83 Linux

아래와 같이 기존의 파티션을 지운다.

   Command (m for help): d

   Selected partition 1
   Partition 1 has been deleted.

   Command (m for help): n

그리고 새로운 파티션을 만든다.

  Partition type
     p   primary (0 primary, 0 extended, 4 free)
     e   extended (container for logical partitions)
  Select (default p): p
  Partition number (1-4, default 1): 
  First sector (2048-976773167, default 2048): 
  Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-976773167, default 976773167): 

  Created a new partition 1 of type 'Linux' and of size 465.8 GiB.
  Partition #1 contains a ext4 signature.

  Do you want to remove the signature? [Y]es/[N]o: N

그리고 만들어진 파티션 맵을 기록한다.

  Command (m for help): w

  The partition table has been altered.
  Calling ioctl() to re-read partition table.
  Syncing disks.

다음의 명령을 실행한다.

$ sudo partprobe /dev/nvme0n1

$ lsblk

  NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
  loop0          7:0    0     4K  1 loop /snap/bare/5
  loop1          7:1    0  57.9M  1 loop /snap/core20/1590
  loop2          7:2    0 151.4M  1 loop /snap/firefox/1671
  loop3          7:3    0 383.8M  1 loop /snap/gnome-3-38-2004/113
  loop4          7:4    0  91.7M  1 loop /snap/gtk-common-themes/1535
  loop5          7:5    0  44.3M  1 loop /snap/snap-store/581
  loop6          7:6    0  40.6M  1 loop /snap/snapd/16299
  loop7          7:7    0   276K  1 loop /snap/snapd-desktop-integration/15
  mmcblk0      179:0    0  29.1G  0 disk 
  ├─mmcblk0p1  179:1    0   256M  0 part /boot/firmware
  └─mmcblk0p2  179:2    0  28.9G  0 part /
  mmcblk0boot0 179:32   0     4M  1 disk 
  mmcblk0boot1 179:64   0     4M  1 disk 
  nvme0n1      259:0    0 465.8G  0 disk 
  └─nvme0n1p1  259:1    0 465.8G  0 part 

이제 eMMC에 있는 내용을 M.2로 copy 한다.

$ sudo dd if=/dev/mmcblk0 of=/dev/nvme0n1 bs=4MB

7817+1 records in
7817+1 records out

완료 후 다음의 명열을 실행한다.

$ sudo sync
$ lsblk

  NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
  loop0          7:0    0     4K  1 loop /snap/bare/5
  loop1          7:1    0  57.9M  1 loop /snap/core20/1590
  loop2          7:2    0 151.4M  1 loop /snap/firefox/1671
  loop3          7:3    0 383.8M  1 loop /snap/gnome-3-38-2004/113
  loop4          7:4    0  91.7M  1 loop /snap/gtk-common-themes/1535
  loop5          7:5    0  44.3M  1 loop /snap/snap-store/581
  loop6          7:6    0  40.6M  1 loop /snap/snapd/16299
  loop7          7:7    0   276K  1 loop /snap/snapd-desktop-integration/15
  mmcblk0      179:0    0  29.1G  0 disk 
  ├─mmcblk0p1  179:1    0   256M  0 part /boot/firmware
  └─mmcblk0p2  179:2    0  28.9G  0 part /
  mmcblk0boot0 179:32   0     4M  1 disk 
  mmcblk0boot1 179:64   0     4M  1 disk 
  nvme0n1      259:0    0 465.8G  0 disk 
  ├─nvme0n1p1  259:2    0   256M  0 part 
  └─nvme0n1p2  259:3    0  28.9G  0 part

나의 경우는 500 GB M.2 ssd를 장착했으나 위에 나타난 것 과 같이 약 30 GB 만 사용하고 있어 nvme0n1p2 파티션을 전체 ssd 로 확장해 줄 필요가 있다.

$ sudo reboot

리부팅 된 후 다음의 명령으로 필요한 pkg를 설치한다.

$ sudo apt install raspi-config 
$ sudo raspi-config 

그리고 나타난 메뉴에서 다음을 선택하여 파티션을 확장해 준다 .

6. Advanced Options
A1. Expand Filesystem

그리고
$ sudo reboot

부팅후 다음의 명령으로 root directory와 부팅 디바이스가 변경된 것을 확인하자.

$ lsblk
$ df -h

Reference

  1. Super6C nvme boot settings, youtube

답글 남기기