한달이 넘게 블로그 방치 중이었던 나 자신을 반성한다. ㅠㅠ

라즈베리파이로 NAS 구축하는 거 설명하기 위해서 당초 계획했던 포스팅은 이 글 포함 3개가 남았고, 원래대로였다면 7월 안에 다 끝낼 예정이었는데.

나름 졸업준비를 위해서 일이 바빴다는 핑계를 대보기로 한다... 한동안 글을 안쓰다보니 뭐 어떻게 설명을 시작했는지도 가물가물할 정도네.


# 주의사항


이번 포스팅에서도 해야할 건 사실 몇 개 없지만, 나는 이 과정에서 하드웨어적인 문제로 많은 돈과 시간을 쏟았다.


2.5인치 외장하드 물렸을 때는 알 수 없는 이유로 전원이 제대로 공급되지 않아 usb 허브도 두어개 샀고 y자 케이블도 물려보는 등 여러 수단을 써 봤는데 결국은 2.5인치는 포기했다.

자체 전원 어댑터로 전력을 공급받는 3.5인치 외장하드를 사다가 꽂았더니 언제 문제가 생겼었나 싶게 한번에 성공해버렸다.

(사실 2.5인치 외장하드도 케이스까지 갈아본 건 아니어서 케이스와의 상성이 안좋았을 가능성이 남아있긴 하다.)


만약 외장하드를 새로 사다가 꽂을 예정이라면, 되도록이면 전력 공급과 데이터 보관의 안정성 모두를 위해 3.5인치를 추천하는 바이다. 어차피 NAS 구축하는 이유가 일일이 외장하드 안들고 다니고 집에 박아두고 쓰려는 건데..



# ntfs-3g 설치


이 부분은 윈도우에서 사용하던 ntfs 방식의 외장하드를 라즈베리파이에서도 그대로 이용하기 위해 필요한 절차이다.

외장하드에 다른 포맷으로 데이터를 저장하고 있다면 이 부분은 과감히 스킵하면 된다.


$ sudo apt-get install ntfs-3g


(나는 왜 자꾸 sudo 입력할 부분에 sudp 라고 오타를 내는지 모르겠다...)


이거는 뭐 설치만 해두면 된다.



# 외장하드 접근 위치 확인


드디어 외장하드를 라즈베리파이에 연결이 다 끝났다면, 외장하드에 접근할 경로를 확인하기 위해서 다음 명령어를 쳐보자.


$ sudo fdisk -l


(글씨체 때문에 잘 구별이 될지 모르겠는데 소문자 L이다. 복붙이 가능하면 그냥 복붙해서 쓰자.

PuTTY 프로그램에서 붙여넣기 하려면 커서 활성화 된 상태에서 마우스 오른쪽 클릭하면 된다.)



fdisk 명령어를 쳐보면 위 캡쳐화면같이 나온다.

위쪽의 /dev/mmcblk0 이거는 라즈베리파이의 주 저장장치인 SD 카드의 파티션이다. 여기서는 볼 필요가 없으니 넘어간다.


아래쪽의 /dev/sda 이 부분이 따로 연결시켜준 외장하드를 나타내고 있다. 아마존에서 큰맘먹고 15만원이나 주고 산 나의 크고 아름다운 5테라짜리 외장하드가 잘 잡히고 있다. 음하하하.

여기서 중요한 부분은 이 외장하드 디스크가 /dev/sda 로서 잡혀있다는 것이고, 이 안에 있는 파티션은 하나밖에 없는데 Device Boot 아래에 /dev/sda1 이라는 이름을 부여받았다는 것이다. 


덧.

만약 외장하드 하나의 내부를 여러 개의 파티션으로 쪼갰다면 /dev/sda1 뿐만이 아니라 /dev/sda2, /dev/sda3, .... 등의 이름이 더 떴을 것이다.

fdisk 명령어와 출력 결과에 대해서 더 자세히 알고 싶다면 https://www.linux.co.kr/home/lecture/index.php?cateNo=&secNo=&theNo=&leccode=10799 참조.


하지만 'cd /dev/sda' 또는 'cd /dev/sda1' 등을 쳐보면 디렉토리가 아니라면서 접근이 불가능하다. 그러면 어떻게 해야 할까!

이 장치를 라즈베리파이가 인식할 수 있는 디렉토리 중 하나에 연결을 해줘야 하고, 그걸 mount라고 부른다.

(이쯤 되면 그냥 대충 usb 포트에 꽂으면 알아서 드라이브 이름 붙이고 사진 불러오기 할까? 아니면 그냥 폴더 열래? 하고 물어보기까지 하는 윈도우가 그립기도 할 것 같다.)


우선은 외장하드의 경로 중에서 파티션 번호까지 붙은 디바이스 패스 전체를 적어두도록 하자. (위 캡쳐에서는 /dev/sda1)



# 외장하드 마운트


연결은 잘 되어있지만 내가 cd 명령어 쳐서 접근할 수는 없는 외장하드 디바이스를, 이제는 접근 가능한 디렉토리에 연결을 시켜보기로 한다.


우선은 연결시킬 디렉토리가 필요하다. 내가 예전에 캡쳐해둔 짤을 보니 root에 /media/main 이라는 이름으로 디렉토리를 생성했었다. pi 계정의 홈디렉토리 밑에 만들어도 되고 (실제로 지금은 그렇게 사용중) 알아서 대-충 만들자.


$ sudo mkdir /media/main 

(root 디렉토리에 만드느라 sudo 필요했던 듯)


만약 pi 계정 밑에 만들거라면 그냥

$ mkdir external

뭐 이런 식으로 만들어도 무방하다.


연결할 디렉토리를 만들었다면, mount 명령어를 통해 디바이스를 디렉토리 위에 얹는(mount)다.


$ sudo mount -t auto /dev/sda1 /media/main

(mount -t auto <디바이스 패스> <연결할 디렉토리> 형식으로 입력하면 된다.)



만약에 명령어 입력했는데 이 사진처럼 언클린 파일 시스템이라고 뜨면, 윈도우 컴퓨터에 연결했다가 외장하드 뽑을 때 막 뽑아서 그런 거니까 다시 윈도우 컴퓨터에 연결했다가 안전제거 한 후에 다시 라즈베리파이에 물려주면 된다. (라고 구글신님이 말하셨다.)


여기까지 했다면 이제 거의 다 온 거다.

이제 cd 명령어로 방금 마운트 시켜준 디렉토리에 들어가보면 외장하드에 저장된 파일들이 잘 나오는 것을 볼 수 있다. 후후. 또는 이 상태에서 파일을 생성한 다음에 라즈베리파이에서 뽑아서 메인 컴퓨터에 연결해보면 생성한 파일을 확인해볼 수도 있다.



# 외장하드 마운트 자동화


하지만 아직 끝이 난 건 아니다. 지금은 마운트가 잘 돼서 디렉토리 안에 마음대로 들어갈 수 있지만, 라즈베리파이 재부팅이라도 하고나면 마운트가 풀려서 또 일일이 명령어 치고 해줘야 한다. 그러면 당연히 귀찮아질테니 라즈베리파이가 부팅할 때 알아서 마운트하도록 일을 시켜놔야 한다.


관련 내용은 /etc/fstab 파일에 저장되어 있다. 편집기로 열어주자.


$ sudo nano /etc/fstab


라즈베리파이 기능과 관련된 파일이기 때문에 반드시 sudo로 열어줘야 한다. 안그럼 편집해도 저장을 할 수가 없다. /etc/fstab 파일을 열고 나면 위에서 적어둔 디바이스 패스와 마운트한 디렉토리 이름을 가지고 한 줄 추가해주면 된다. 아래 캡쳐파일 참조.


/dev/mmcblk0p1, /dev/mmcblk0p2는 SD카드에 있는 파티션들이다. 건드리면 큰일난다.


그 밑에 있는 /dev/sda1 이게 외장하드의 첫 번째 파티션이고, 나는 지금은 위에서도 말했다시피 외장하드를 pi 계정 밑의 external 이라는 디렉토리에 마운트해서 쓰고 있다. 디바이스 패스, 마운트 경로만 자기가 설정한대로 바꿔주고 나머지는 그냥 그대로 적자.


<디바이스 패스> <마운트 경로> auto noatime 0 0


마운트 경로 뒤쪽의 값들은 의미를 까먹었다. 근데 아마 auto는 외장하드에 파일 저장된 형식을 알아서 인식해서 그대로 처리하라는 뜻으로 기억한다. 하하하... 무책임잼..


여기까지 하고나면 라즈베리파이 재부팅해도 알아서 마운트가 되면서 해당 디렉토리에 알아서 연결이 된다. 여기까지만 하고 넘어가도 상관없다.


ftp 설치하고 브라우저에서 접속해보는 것까지 지난 포스팅에서 다 했으므로, 마운트한 디렉토리가 pi 계정으로 접근 가능한 범위에 있다면 브라우저에서 접근했을 때 외장하드 내부 파일들도 다 볼 수 있게 된다. 테스트 해보자.

물론 Filezilla 같은 ftp 프로그램으로도 접근할 수 있다.



# 추가. UUID로 마운트하기


이거는 해도 되고 안해도 되는 내용이다. 귀찮으면 그냥 스킵하자.


사실은 라즈베리파이에 외장하드를 여러개 물린다면, 외장하드를 인식한 순서에 따라서 /dev/sda, /dev/sdb, ... 이런 식으로 이름이 붙게 된다. 이게 만-약에 알 수 없는 이유로 꼬이게 된다면 마운트 위치가 달라질 수 있다.


그래서 /dev/sda, /dev/sdb, /dev/sdc, .... 같은 상대적인 이름 대신 하드웨어 고유의 ID를 가지고 마운트를 할 수도 있다.


$ sudo blkid


이 명령어를 치면 (외장하드가 도록도록 소리를 내고나서) 각 디바이스에 부여된 고유 ID를 확인할 수 있다. UUID=" 어쩌구 저쩌구 " 하는 부분이다. 저 부분을 부분을 복사해서 /etc/fstab 파일을 편집할 때 디바이스 패스 부분에 집어넣으면 꼬일 일이 없다.





UUID=" 어쩌구 저쩌구 " <마운트 경로> auto noatime 0 0


여기까지 해서 외장하드를 라즈베리파이에 꽂아서 내부를 들여다 볼 수 있게 설정했다. 오늘도 스스로를 칭찬하자.


어디서 막혔거나 설명이 이해가 안되는 부분이 있다면 질문 부탁드리며 이번 글을 마친다.


WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

받은 트랙백이 없고 , 댓글  4개가 달렸습니다.
  1. 도움되는 포스팅 감사드립니다.
    마지막으로 UUID로 마운트 할때 마운트가 제데로 되지 않는 현상이 발생하네요. 제가 잘못 한것 같은데 Device pass 대신 UUID 입력하게되면
    3D61-34A1 /home/pi/memory auto noatime 0 0
    이렇게 되는데 라즈베리파이 리붓 이후에 마운트가 되지 않네요.
    • 아 제가 어제 라즈베리파이에 연결되어있던 랜선을 다른 데서 쓰느라고 뽑아놓고 그냥 출근한 바람에 지금 바로 확인이 불가하네요 ㅠㅠ 퇴근 후에 확인해본 뒤에 답변해드리도록 하겠습니다. 제가 설명을 잘못한 것일 수도 있으니..
    • 답변이 늦어서 죄송합니다 ㅠㅠ
      스샷 첨부해서 글 수정했습니다. UUID=" .. " 형식으로 작성해주셔야 제대로 됩니다.
  2. 마운트가 제대로 되었다고 생각하고 재부팅을 했는데 어디서 문제가 생겼는지 파이가 Emergency Mode로 실행되었습니다. 우선 외장하드 연결된걸 모두 빼고, fstab에 새로 쓴 부분을 지우고 저장 한 후, https://www.raspberrypi.org/forums/viewtopic.php?f=56&t=124149 <- 이 사이트에 접속하여 disk 검사를 진행했습니다. 이제 살아났네요 휴..ㅠㅠ 혹시 비슷한 증상 겪으신 분 계시다면 위 링크에서 확인해보세요..
secret