Daily

오드로이드 H2 NAS NVMe 500GB + 우분투 20.04 업그레이드 과정

awesometic 2020. 4. 19. 21:13
반응형

H2 + NVMe 500GB + 우분투 20.04 LTS

오랫동안 사용하던 제 H2 NAS를 업그레이드 할 때가 된 것 같습니다 ㅎㅎ

H2에 꼽기 위한 NVMe 도 준비해놓고 우분투 20.04 LTS가 출시되기만을 기다리고 있었어요.

주문했던 NVMe는 WD Blue SN550 500GB (http://prod.danawa.com/info/?pcode=10120452&cate=11335288) 제품 입니다.

제가 주문한 제품은 최대 속도가 읽기 2400MB/s, 쓰기 1750MB/s인데, 보통 초고속 NVMe의 속도인 읽기/쓰기 3000MB/s보단 느립니다. 하지만 어차피 H2의 M.2는 PCIe 2.0 x 4만 지원하기 때문에 최대 속도가 2GB/s로 제한되어 있으므로 굳이 3GB/s NVMe를 달 필요는 없습니다. 오히려 가격, 전력, 발열을 신경쓴다면 저런 보급형 제품이 적당해요. 요샌 500GB 보급형 NVMe는 10만원 아래입니다. :)

그리고, 기존의 18.04 LTS로도 몇 년은 더 업데이트 받을 수 있겠지만, 기왕 NVMe 설치할 거 최신 우분투에 5.4 커널이 기분이 좋기 때문에 20.04 LTS를 새로 설치하려 합니다 ㅎㅎ

백업

일단 전 도커로 모든 서비스를 굴리고 있습니다. 도커를 중지시킨 다음 시스템을 백업했습니다.

docker-compose down
awesometic@awesometic-nas:~ $ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
awesometic@awesometic-nas:~ $

전 cp나 mv보단 rsync로 백업하는 걸 추천드립니다.

sudo rsync -avh /opt/docker/ /media/nas/main/data/backup/200419/docker/

NVMe 설치

오랜만에 H2 케이스를 집어 뜯어서 구매한 NVMe를 장착합니다.

다시 조립 후 BIOS에서 잘 인식되나 확인해봤습니다.

잘 잡히네요 :)

우분투 20.04 설치

일단 우분투 20.04 LTS 베타를 다운받아 USB로 구웠습니다.

우분투 20.04 다운로드 링크: https://releases.ubuntu.com/20.04/

그리고 H2에 USB를 꼽아 진행했습니다. USB로 부팅하기 위해 바이오스에서 바꿔줘도 되고, 부팅 중 F7 키를 눌러 부트 디바이스를 정해줘도 됩니다.

일단 전 랜 포트별로 관리하고 있진 않기 때문에 그냥 두 개의 랜포트를 본딩시켜 줬습니다. 하나의 2개의 1GBits 랜을 하나의 랜처럼 사용하는 건데, 구현 방법이 여러 가지가 있지만 소프트웨어 구현 방식인 Balance-rr 로 진행했어요. 소프트웨어 구현이다 보니 다른 방식에 비해선 조금 느리지만, 그래도 1.5 GBits 이상은 나와줄 겁니다.

사실 또, 이 본딩 셋업 자체가 나중에 하기엔 조금 귀찮습니다. 최신 우분투에 맞는 가이드를 찾는 것부터가 좀 고생했던 기억이 나네요. 그래서 그냥 설치할 때 제공되는 인터페이스로 하는 게 가장 편합니다.

제일 중요한 부분이네요. :) 새로 설치한 NVMe로 설치 디바이스를 잡아줍니다.

리눅스 서버 설치도 보통의 리눅스 설치와 크게 다르진 않습니다. 중간에 OpenSSH 기본 설치와 live patch 만 체크시켜 준 후 쭉 진행했습니다.

알아서 소프트웨어 업데이트 확인/설치합니다. 그리고 재부팅 후, NVMe의 우분투로 쭉 부팅하면 됩니다.

시스템 설정

패키지 설치

일단 가장 기본적인 패키지들을 설치했습니다.

sudo apt install zsh neovim tmux htop iotop iftop iperf3 iozone3 inxi neofetch shellcheck

그리고 제 개인 설정파일들도 적용했어요.

다음으로 도커를 설치했습니다.

도커 설치 가이드: https://docs.docker.com/engine/install/ubuntu/

근데 아마 apt update할 때 이런 에러가 나타날 거예요.

awesometic@awesometic-nas:~ $ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
Ign:1 https://download.docker.com/linux/ubuntu focal InRelease
Get:2 http://kr.archive.ubuntu.com/ubuntu focal InRelease [265 kB]
Err:3 https://download.docker.com/linux/ubuntu focal Release
  404  Not Found [IP: 13.225.105.42 443]
Hit:4 http://kr.archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:5 http://kr.archive.ubuntu.com/ubuntu focal-backports InRelease
Hit:6 http://kr.archive.ubuntu.com/ubuntu focal-security InRelease
Get:7 http://kr.archive.ubuntu.com/ubuntu focal/main amd64 Packages [974 kB]
Reading package lists... Done
E: The repository 'https://download.docker.com/linux/ubuntu focal Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

도커 저장소가 20.04 focal 배포판을 지원하지 않기 때문인데, 일단 정식 지원하기 전까진 바로 바로 이전 버전인 19.10 disco 저장소에서 받아오도록 합니다.

/etc/apt/sources.list 파일을 직접 수정했습니다.

sudo vi /etc/apt/sources.list

파일 맨 아래 두 줄을 다음과 같이 바꿔주면 됩니다.

deb [arch=amd64] https://download.docker.com/linux/ubuntu disco stable
# deb-src [arch=amd64] https://download.docker.com/linux/ubuntu focal stable

그리고 다시 sudo apt update 하면 정상적으로 패키지 정보를 읽어옵니다. 쭉 가이드 따라서 docker를 설치했습니다.

하드디스크 자동 마운트

이제 설치된 하드디스크들을 인식해 부팅 시 자동 마운트 시킬 차례입니다.

일단 각 파티션들이 마운트될 디렉토리들을 만들어줬습니다.

전 SATA 하드디스크 하나 (/dev/sda), USB 하드디스크 하나 (/dev/sdb), 그리고 직전 시스템이 설치되어 있던 eMMC 하나 (/dev/mmcblk0) 까지 NVMe 외에 3개의 드라이브가 더 존재합니다.

sudo mkdir -p /media/nas/{hdd8tb,hdd1.5tb,emmc128gb}
awesometic@awesometic-nas:~ $ ll /media/nas
total 12K
drwxr-xr-x 2 root root 4.0K Apr 19 11:19 emmc128gb
drwxr-xr-x 2 root root 4.0K Apr 19 11:19 hdd1.5tb
drwxr-xr-x 2 root root 4.0K Apr 19 11:19 hdd8tb

그리고 이전 OS가 깔려있던 eMMC를 btrfs로 포맷했습니다. btrfs가 SSD나 eMMC같은 낸드 플래시 드라이브에 최적화되어 있고, 스냅샷 기능이 있기 때문에 한번 사용해보고 싶었어요. 무엇보다 5.4 커널쯤 되니까 기본 지원이네요. :)

sudo gdisk /dev/mmcblk0

gdisk로 파티션 테이블을 새로 작성해준 후,

sudo mkfs.btrfs -f /dev/mmcblk0p1
awesometic@awesometic-nas:~ $ sudo mkfs.btrfs -f /dev/mmcblk0p1
btrfs-progs v5.4.1
See http://btrfs.wiki.kernel.org for more information.

Detected a SSD, turning off metadata duplication.  Mkfs with -m dup if you want to force metadata duplication.
Label:              (null)
UUID:               92caea1b-a072-4938-8e53-9e97b4c786ee
Node size:          16384
Sector size:        4096
Filesystem size:    116.48GiB
Block group profiles:
  Data:             single            8.00MiB
  Metadata:         single            8.00MiB
  System:           single            4.00MiB
SSD detected:       yes
Incompat features:  extref, skinny-metadata
Checksum:           crc32c
Number of devices:  1
Devices:
   ID        SIZE  PATH
    1   116.48GiB  /dev/mmcblk0p1

btrfs로 포맷했습니다.

이제 각 드라이브의 파티션들의 UUID를 확인해줍니다.

ls -al /dev/disk/by-uuid
awesometic@awesometic-nas:~ $ ls -al /dev/disk/by-uuid
total 0
drwxr-xr-x 2 root root 140 Apr 19 11:28 .
drwxr-xr-x 7 root root 140 Apr 19 10:40 ..
lrwxrwxrwx 1 root root  10 Apr 19 10:41 2079d733-174f-46e0-ac97-8cd042f78d64 -> ../../sda1
lrwxrwxrwx 1 root root  15 Apr 19 10:41 2938-7287 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root  15 Apr 19 11:28 92caea1b-a072-4938-8e53-9e97b4c786ee -> ../../mmcblk0p1
lrwxrwxrwx 1 root root  10 Apr 19 10:41 a0a7f72e-390f-4da1-bf14-7e01c4a86e56 -> ../../sdb1
lrwxrwxrwx 1 root root  15 Apr 19 10:41 cf2dd680-647a-46df-a13b-eb11c28a5a91 -> ../../nvme0n1p2

UUID를 확인했으면 /etc/fstab에서 이 디스크들을 자동으로 읽도록 합니다.

sudo vi /etc/fstab

전 아래처럼 추가했습니다.

/dev/disk/by-uuid/2079d733-174f-46e0-ac97-8cd042f78d64 /media/nas/hdd8tb ext4 defaults,nofail,noatime 0 0
/dev/disk/by-uuid/a0a7f72e-390f-4da1-bf14-7e01c4a86e56 /media/nas/hdd1.5tb ext4 defaults,nofail,noatime 0 0
/dev/disk/by-uuid/92caea1b-a072-4938-8e53-9e97b4c786ee /media/nas/emmc128gb btrfs defaults,nofail,noatime,compress=lzo 0 0

재부팅하고 df -Th 명령어로 자동 마운트가 되었나 확인해봅니다.

awesometic@awesometic-nas:~ $ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  3.8G     0  3.8G   0% /dev
tmpfs          tmpfs     779M  1.4M  777M   1% /run
/dev/nvme0n1p2 ext4      457G  7.0G  427G   2% /
tmpfs          tmpfs     3.9G     0  3.9G   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/nvme0n1p1 vfat      511M  7.8M  504M   2% /boot/efi
/dev/sdb1      ext4      1.4T  584G  722G  45% /media/nas/hdd1.5tb
/dev/mmcblk0p1 btrfs     117G  3.4M  117G   1% /media/nas/emmc128gb
/dev/sda1      ext4      7.3T  5.7T  1.2T  84% /media/nas/hdd8tb
/dev/loop1     squashfs   68M   68M     0 100% /snap/lxd/14133
/dev/loop2     squashfs   94M   94M     0 100% /snap/core/8935
/dev/loop0     squashfs  9.2M  9.2M     0 100% /snap/canonical-livepatch/95
tmpfs          tmpfs     779M     0  779M   0% /run/user/1000

순조롭네요. :)

도커 서비스 복구

이제 도커 서비스를 복구합시다.

하드디스크에 백업해놨던 도커 설정 파일들과 서비스를 한 번에 실행시킬 docker-compose.yml 파일을 다시 rsync로 가져옵니다.

awesometic@awesometic-nas:~ $ sudo mkdir /opt/docker
awesometic@awesometic-nas:~ $ sudo rsync -avh /media/nas/hdd8tb/data/backup/200419/docker/ /opt/docker/

NAS 드라이브들에 대한 심볼릭 링크를 만들어줍니다. 각 프로그램에서 심볼릭 링크로만 접근하게끔 하여 훗날 관리를 좀 용이하게 하기 위해서입니다.

전 main, ext1, ext2 3개로 이름을 지었습니다.

sudo ln -s /media/nas/hdd8tb /media/nas/main
sudo ln -s /media/nas/hdd1.5tb /media/nas/ext1
sudo ln -s /media/nas/emmc128gb /media/nas/ext2
awesometic@awesometic-nas:/opt/docker $ ll /media/nas
total 24K
drwxr-xr-x  1 root       root          0 Apr 19 11:28 emmc128gb
lrwxrwxrwx  1 root       root         19 Apr 19 11:50 ext1 -> /media/nas/hdd1.5tb
lrwxrwxrwx  1 root       root         20 Apr 19 11:50 ext2 -> /media/nas/emmc128gb
drwxr-xr-x  4 root       root       4.0K Nov  4  2018 hdd1.5tb
drwxrwxr-x 13 awesometic awesometic 4.0K Apr  9 11:31 hdd8tb
lrwxrwxrwx  1 root       root         17 Apr 19 11:50 main -> /media/nas/hdd8tb

이제 docker-compose up -d로 도커 서비스들을 실행시켜 줍니다.

sudo apt install docker-compose
cd /opt/docker
docker-compose up -d

물론, 바로 제 모든 서비스들이 정상적으로 작동했습니다. :)

삼바 설정

데스크탑이나 노트북에선 역시 삼바가 가장 파일 관리하기 편합니다.

삼바 설치 후 사용자를 추가합니다.

sudo apt install samba
sudo smbpassword -a awesometic

그리고 설정 파일을 수정해서 삼바를 통해 각 드라이브에 접근할 수 있게 합니다.

sudo vi /etc/samba/smb.conf

맨 아래에 이 내용을 추가해줬습니다.

[NAS - MAIN]
comment = Awesometic's NAS
path = /media/nas/main
valid users = awesometic
writable = yes
create mask = 0755
directory mask = 0755

[NAS - EXT1]
comment = Awesometic's NAS
path = /media/nas/ext1
valid users = awesometic
writable = yes
create mask = 0755
directory mask = 0755

[NAS - EXT2]
comment = Awesometic' NAS
path = /media/nas/ext2
valid users = awesometic
writable = yes
create mask = 0755
directory mask = 0755

마지막으로 삼바 서버를 재시작해줍니다.

sudo service smbd restart

제 데스크탑에서 접근이 제대로 되나 확인해봤습니다.

읽기/쓰기 모두 잘 되네요.

끝으로

다른 몇 가지 설정이 남긴 했지만 일단 이 정도로 하고 마무리 지어야 겠습니다 ㅎㅎ

필요할 때마다 하나씩 하면 될 듯 하네요.

제 오드로이드 H2에 NVMe, 우분투 20.04로 업그레이드하는 과정이었습니다. 필요한 분들께 참고가 되었으면 좋겠습니다 :)

반응형