본문으로 바로가기

 

 

소개

 

일반적으로 라즈베리파이의 SD Card 메모리의 용량은 16 GB 입니다.

 

이것만으로는 불만족스럽기 때문에 USB 를 활용해서 용량을 증설하고 MongoDB 의 Data path 를 변경하

 

는 법을 소개하고자 합니다.

 

 

사전준비

  • MongoDB 설치

  • USB

 

라즈베리파이(Raspberry Pi) 몽고디비(MongoDB) 설치 / 원격설정 - 에러해결

설치 sudo apt-get install mongodb-server 상태확인 : sudo systemctl status mongodb 서비스 등록 : sudo systemctl enable mongodb (부팅시 자동으로 서비스 시작) 포트확인 : netstat -antp (MongoDB 서비스..

jvvp.tistory.com

 

 

USB 포맷

 

기본적으로 USB 는 FAT 파일 시스템으로 되어있습니다.

$ lsblk -f
NAME   FSTYPE LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINT
sdb                                                                     
└─sdb1 vfat   DATA  FE1A-BD55                                30G     0% /media/pi/DATA
mmcblk0
│                                                                       
├─mmcblk0p1
│      vfat   boot  70A2-8001                             198.7M    21% /boot
└─mmcblk0p2
       ext4   rootfs
                    a1fafd2b-1ef0-4fe8-8ac1-ad33bbb48642    9.1G    32% /

 

FAT 에는 DB Data 를 저장할 수 없으므로 파일시스템을 변경해서 포맷하고자 합니다.

 

먼저 마운트를 해제합니다.

$ sudo mount /dev/sdb1

 

root 와 동일한 파일시스템으로 진행하겠습니다.

$ sudo mkfs.ext4 /dev/sdb1
mke2fs 1.44.5 (15-Dec-2018)
/dev/sdb1 contains a vfat file system labelled 'DATA'
Proceed anyway? (y,N) y
Creating filesystem with 7864064 4k blocks and 1966080 inodes
Filesystem UUID: e31e4d74-3ed0-4dda-9783-59e10b32c358
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

 

디렉터리를 생성하고

$ mkdir /data

 

마운트가 잘되는지 확인해봅니다.

$ mount /dev/sda1 /data

$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/root      ext4       15G  4.6G  9.2G  34% /
devtmpfs       devtmpfs  431M     0  431M   0% /dev
tmpfs          tmpfs     463M     0  463M   0% /dev/shm
tmpfs          tmpfs     463M   13M  451M   3% /run
tmpfs          tmpfs     5.0M  4.0K  5.0M   1% /run/lock
tmpfs          tmpfs     463M     0  463M   0% /sys/fs/cgroup
/dev/mmcblk0p1 vfat      253M   54M  199M  22% /boot
tmpfs          tmpfs      93M     0   93M   0% /run/user/1000
/dev/sda1      ext4       30G   45M   28G   1% /data

 

 

부팅시 항상 마운트되도록 설정합니다.

 

우선 PARTUUID 를 확인합니다.

여기서 USB 의 파티션 /dev/sda1 의 PARTUUID 는 00386234-01 입니다.

$ blkid
/dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="70A2-8001" TYPE="vfat" PARTUUID="a1d72663-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="a1fafd2b-1ef0-4fe8-8ac1-ad33bbb48642" TYPE="ext4" PARTUUID="a1d72663-02"
/dev/sda1: UUID="e31e4d74-3ed0-4dda-9783-59e10b32c358" TYPE="ext4" PARTUUID="00386234-01"

 

설정파일을 열어서 다음과 같이 추가합니다.

$ sudo vi /etc/fstab
proc                  /proc           proc    defaults          0       0
PARTUUID=a1d72663-01  /boot           vfat    defaults          0       2
PARTUUID=a1d72663-02  /               ext4    defaults,noatime  0       1
PARTUUID=00386234-01  /data           ext4    defaults          0       0
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

 

마운트를 해제하고 설정이 잘되었는지 확인해보겠습니다.

부팅하지 않고 mount -a 를 통해 확인할 수 있습니다.

$ sudo umount /dev/sda1

$ sudo mount -a

$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/root      ext4       15G  4.6G  9.2G  34% /
devtmpfs       devtmpfs  431M     0  431M   0% /dev
tmpfs          tmpfs     463M     0  463M   0% /dev/shm
tmpfs          tmpfs     463M   13M  451M   3% /run
tmpfs          tmpfs     5.0M  4.0K  5.0M   1% /run/lock
tmpfs          tmpfs     463M     0  463M   0% /sys/fs/cgroup
/dev/mmcblk0p1 vfat      253M   54M  199M  22% /boot
tmpfs          tmpfs      93M     0   93M   0% /run/user/1000
/dev/sda1      ext4       30G   45M   28G   1% /data

 

여기까지 USB 에 대한 작업은 끝났습니다.

 

 

MongoDB

 

서비스를 중지합니다.

$ sudo systemctl stop mongodb

 

설정파일을 열어 Data path 를 변경합니다.

기본 경로 /var/lib/mongodb 는 주석처리하고 위에서 만든 경로를 지정해줍니다.

$ sudo vi /etc/mongodb.conf
# mongodb.conf

# Where to store the data.
#dbpath=/var/lib/mongodb
dbpath=/data/mongodb

 

 

기존의 데이터를 복사합니다.

$ cp -r /var/lib/mongodb /data

 

소유자와 그룹을 변경해줍니다.

-R 옵션은 하위 파일까지 변경합니다.

$ sudo chown -R mongodb:mongodb mongodb

 

확인

$ ls -l; ls -l mongodb
합계 20
drwx------ 2 root    root    16384  8월 25 03:13 lost+found
drwxr-xr-x 3 mongodb mongodb  4096  8월 25 04:05 mongodb
합계 32772
drwxr-xr-x 2 mongodb mongodb     4096  8월 25 04:04 journal
-rw------- 1 mongodb mongodb 16777216  8월 25 04:05 local.0
-rw------- 1 mongodb mongodb 16777216  8월 25 04:05 local.ns
-rwxr-xr-x 1 mongodb mongodb        0  8월 25 04:03 mongod.lock

 

서비스를 시작하고 상태를 확인합니다.

데이터 디렉터리의 퍼미션 등 문제가 있다면 서비스 상태에 빨간불로 나타납니다.

$ sudo systemctl start mongodb

$ sudo systemctl status mongodb
● mongodb.service - An object/document-oriented database
   Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-08-25 04:09:38 KST; 3s ago
     Docs: man:mongod(1)
 Main PID: 1447 (mongod)
    Tasks: 11 (limit: 2065)
   CGroup: /system.slice/mongodb.service
           └─1447 /usr/bin/mongod --config /etc/mongodb.conf

 8월 25 04:09:38 db systemd[1]: Started An object/document-oriented database.
 8월 25 04:09:39 db mongod[1447]: warning: bind_ip of 0.0.0.0 is unnecessary; listens on all ips by default
 8월 25 04:09:39 db mongod[1447]: all output going to: /var/log/mongodb/mongodb.log

 

 

원격설정

 

다음 설정파일을 열어 다음과 같이 설정하고 재시작합니다.

$ sudo vi /etc/mongodb.conf
# mongodb.conf

...

bind_ip = 0.0.0.0
#bind_ip = 127.0.0.1