써야지 써야지 하고 마음만 먹었던 글감을 드디어 쓰려고 한다.


라즈베리파이로 NAS 구축하는 글 쓴 이후로 거의 일년 반이 지난 것 같은데.... ㅎㅎ


좀 많이 늦긴 했지만 약속을 지키고자.

사실 쓰려면 금방 썼을 글인데 왠지 모르게 손이 안갔다.



이번에 다룰 주제는 열심히 만든 라즈베리파이를 단순히 파일 저장용으로 쓰는 것이 아니라,

라즈베리파이에 저장된 동영상을 다시 다른 컴퓨터나 폰으로 다운받을 필요 없이 곧바로 재생할 수 있는 스트리밍 서버로 활용하는 것이다.


정말 간단하다.


우선 예시로 사용할 동영상은 pi 계정의 홈 디렉토리에 example.mp4 라는 이름으로 저장되어 있다.





# 데스크탑에서 스트리밍


사용할 프로그램은 다음 팟플레이어이다.

다른 동영상 플레이어에도 웹에 연결하는 기능이 있다면 다 비슷하게 작동하리라 생각한다.


우선 팟플레이어를 열고 아래 사진처럼 '재생목록' 메뉴를 연다.



여기서 +새앨범 버튼을 누른다.



그러면 위와 같은 창이 열리는데, 해당 빈칸을 채워넣기만 하면 된다.


1. 앨범 이름: 원하는대로 ㅎ 나는 pi로 설정

2. FTP/WebDAV/HTTP 주소 선택

3. 프로토콜은 FTP로 그대로 두고, 호스트는 라즈베리파이의 주소.

같은 공유기에 연결되어있다면 내부 IP를 적어도 되고,

아니라면 라즈베리파이가 연결된 공유기의 외부 IP 주소, 또는 DDNS 연결한 주소를 쓰면 된다.

어쨌든 라즈베리파이에 연결하기 위한 주소!

4. 사용자명: FTP 접속 가능한 아이디

5. 비밀 번호: 해당 비밀번호


아마 기억상으로 Passive가 해제되어 있어야 정상 작동했던 것으로 기억한다.

UTP-8과 Passive 설정도 사진에서처럼 설정한다.


그리고 확인을 누르면,



이런 식으로 라즈베리파이 내부 파일목록에 접근할 수 있다.


맨 위에서 PuTTY로 SSH 연결한 터미널에 있던 파일 구조와 동일한 것을 확인할 수 있다.




# 폰에서 스트리밍


큰 차이는 없다. 폰에서도 똑같이 앱 내부에서 FTP 연결을 할 수 있는지를 확인하고

해당 기능을 사용하면 될 뿐.


나는 아이폰 유저이고, 예시로 들 앱은 유료 앱인 nPlayer이다.


사용하는 플랫폼이나 앱이 다르더라도 비슷한 흐름으로 따라하면 될 것 같다.




네트워크 서버에 연결하는 아이콘이다.



우리는 ftp 서버밖에 설정을 안했으니까... ftp를 선택한다.



이렇게 접속할 주소와 아이디, 비밀번호 등을 적어야 한다.



제목은 그냥 서버 목록에 표시될 이름이고, 호스트는 라즈베리파이의 주소.

사용자는 라즈베리파이에서 ftp 이용 가능한 사용자명, 그리고 암호.

중요한게 포트 번호를 21로 지정을 해줘야 한다.


안그러면 제대로 접속이 안되는 걸 방금전에 테스트해봤다.


그러고나면 이렇게 라즈베리파이에 접속해서 네트워크 서버에 있는 파일 목록을 보여준다.

예시 동영상인 example.mp4도 잘 있다.






이렇게 쉽고 편한 방법으로 라즈베리파이를 동영상 스트리밍 서버로 활용할 수 있다.

번거롭게 파일을 여러 컴퓨터에 옮길 필요 없이 라즈베리파이에 접근 가능한 환경에서는 손쉽게 이용할 수 있다.





음.. 아마 다음번 글감은 요즘 핫한 보이스챗 프로그램인 디스코드에서 쓰는 봇이 되지 싶다.

라즈베리파이에 봇 설치하고, 음성채널에 접속시키고, 라즈베리파이를 통해서 24시간 돌아갈 수 있게 설정하는.


최대한 빠른 시일 내에 정리하는 것을 목표로.


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

트랙백  0 , 댓글  0개가 달렸습니다.
secret
한달이 넘게 블로그 방치 중이었던 나 자신을 반성한다. ㅠㅠ

라즈베리파이로 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
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

트랙백  0 , 댓글  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