2013-10-11

라즈베리파이를 NAS 타임머신으로 사용하기

#### 이 방법은 추천하지 않습니다. 재미로만 해 보시고, 중요한 백업은 하지 마세요. 한달에 한번 꼴로 에러가 납니다. hfsp가 netatalk로 제대로 구현이 안 되어 무결점 보장이 안 되는 것 같습니다. 되도록이면 USB방식의 외장하드를 사용해서 백업하세요 ####

라즈베리파이를 타임머신 NAS로 사용하기. 애플 순정 AFP를 사용하는 방법이라 안정성이 훌륭하다.

Screen Shot 2013 10 11 at 12 20 45 PM

맥에서 외장 하드를 포맷한다. 이미 되 있으면 안 해도 된다. Mac OS Extended (Journaled) 이나 case sensitive를 추천하는데, 대소문자를 구분한다고 한다. 하지만 귀찮아서 그냥 하던 대로 저널로 했다.

맥에서 하드를 분리하고, 파이에 하드를 꼽는다. 레포를 업데이트하고 필요한 것을 설치한다.
sudo apt-get update
sudo apt-get install hfsplus hfsutils hfsprogs


타임머신 마운트 할 디렉토리를 만든다.
sudo mkdir /mnt/TimeMachine

마운트 하는 방법이 2가지가 있는데, 수동으로 마운트 하는 방법으로 하겠다. 방법1은 편하지만, 해당 하드가 없으면 fstab에서 인식을 못해서 부팅이 안 된다. 그러므로 방법1을 건너뛰고 방법2로 가길 바란다.

### 방법1, 자동마운트, 하드가 없으면 부팅이 안됨 (비추천, 그러나 소개한다)

UUID를 확인한다. 애플은 모든 기기마다 UUID를 부여한다. 이게 있어야 애플에서 추천하는 AFP 방식으로 타임머신을 사용할 수 있다.
sudo blkid

확인한 UUID를 입력한다.
sudo nano /etc/fstab

맨 끝에다 추가한다.
UUID="여기에UUID입력" /mnt/TimeMachine hfsplus rw,force,exec,auto,users 0 3

### 방법2, 수동으로 마운트 하는 방법. 귀찮지만 하드가 없어도 부팅이 된다. (길지만 추천하는 방식이다)

수동 마운트 방식이다. /dev/sda2는 상황마다 다르니 sudo blkid로 확인한다.
sudo mount -o force /dev/sda2 /mnt/TimeMachine/

하드에 문제가 없는지 확인하는 방식.
sudo fsck.hfsplus /dev/sda2

언마운트하는 방법
umount -f /dev/sda2

자 방법을 알았으니 스크립트를 수동으로 추가해 보자.
sudo nano /etc/init.d/부팅시-추가할-스크립트-이름

내 스크립트다. jong-TimeMachine이라는 이름의 스크립트다. /dev/sda2는 상황에 맞게 바꾼다.
#! /bin/sh
# /etc/init.d/jong-TimeMachine

### BEGIN INIT INFO
# Provides: mount
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Simple script to start a program at boot
# Description: A simple script from www.stuffaboutcode.com which will start / stop a program a boot / shutdown.
### END INIT INFO

# If you want a command to always run, put it here
# Carry out specific functions when asked to by the system
case "$1" in
start)

echo "..............................."
echo "mounting hfsplus TimeMachine..."
echo "..............................."
# mount hdd
sudo mount -o force /dev/sda2 /mnt/TimeMachine/

echo "..............................."
echo "checking hfsplus TimeMachine..."
echo "..............................."
# check hdd
sudo fsck.hfsplus /dev/sda2
;;

stop)
echo "................................."
echo "unmounting hfsplus TimeMachine..."
echo "................................."
# kill application you want to stop
umount -f /dev/sda2
;;
*)
echo "Usage: jong-TimeMachine {start|stop}"
exit 1
;;
esac

exit 0
저장하고 나온다. Ctl-o, Ctrl-x

이제 실행 가능하게 퍼미션을 추가한다.
sudo chmod 755 /etc/init.d/jong-TimeMachine

실행이 되나 테스트를 해보자.
sudo /etc/init.d/jong-TimeMachine start

실행은 start, 멈추는 건 stop이다. stop 해보고 잘 되면 다시 start한다.
sudo /etc/init.d/jong-TimeMachine start
sudo /etc/init.d/jong-TimeMachine stop


시작프로그램에 등록한다.
sudo update-rc.d jong-TimeMachine defaults

시작프로그램에서 제거방법.
sudo update-rc.d jong-TimeMachine remove

라즈베리파이를 재부팅 해보자
sudo reboot

제대로 동작하는지 테스트 폴더를 만든다.
mkdir /mnt/TimeMachine/test

읽고 쓰기 권한이 있는지 확인한다. mount를 실행하여 확인한다. 이런 식으로 결과가 나오는데, rw가 있는지 확인을 해야 한다. 나의 결과는 이렇다.
/dev/sda2 on /mnt/TimeMachine type hfsplus (rw,relatime,umask=22,uid=0,gid=0,nls=utf8)

맥에서 접속하여 사용할 것이기에 맥 사용자에게 소유권을 부여한다.
sudo chown -R pi /mnt/TimeMachine

맥과 라즈베리파이가 통신을 하려면 Netatalk와 Avahi가 필요하다. 필요한 것들을 설치하자.
sudo apt-get install avahi-daemon libavahi-client-dev libdb5.3-dev db-util db5.3-util libgcrypt11 libgcrypt11-dev

소스를 다운받는다. Netatalk 3.0이다. 3.0.1이 아니다.
cd
wget http://sourceforge.net/projects/netatalk/files/netatalk/3.0/netatalk-3.0.tar.bz2


다운받은 소스를 압축을 풀고 해당 폴더로 간다.
tar xvfj netatalk-3.0.tar.bz2
cd netatalk-3.0


컴파일 한다. 짜증나게도 시간이 많이 걸린다. 총 20분 정도 걸리는 듯. 모든 과정 중 가장 짜증 나는 부분이다.
./configure -with-init-style=debian -with-zeroconf
make
sudo make install


타임머신을 맥과 AFP로 공유하기 위해 Netatalk를 설정한다.
sudo nano /usr/local/etc/afp.conf

다음과 같이 바꾼다.
;
; Netatalk 3.x configuration file
;

[Global]
; Global server settings

### host name
hostname = 넷상에서표시될이름을정한다

### pi's static ip address
afp listen = 파이의IP주소를적는다

log file = /var/log/netatalk.log
log level = default:info

[Homes]
basedir regex = /home
cnid scheme = dbd
; Display each user home directory in this format
home name = Home: $u

[Time Machine]
; Our Time Machine volume

### 타임머신으로 쓸 폴더
path = /mnt/TimeMachine

cnid scheme = dbd
file perm = 0660
directory perm = 0770
time machine = yes


서비스를 실행한다. Netatalk와 Avahi서비스를 실행한다. 이미 실행중이라고 나오면 start를 restart로 바꾼다.
sudo /etc/init.d/netatalk start
sudo /etc/init.d/avahi-daemon start


시작프로그램에 Netatalk를 등록한다. 에러메세지 같은 게 나오는데 괜찮다.
sudo /etc/init.d/update-rc.d netatalk defaults

마지막으로 맥과 연결하기. 맥으로 간다. 라즈베리파이와 맥이 같은 네트워크상에 있는지 확인한다. 다시 말하면 같은 공유기에 물려 있어야 한다는 것이다.

맥의 파인더에서 Connect to Server를 누른다. 단축키 Cmd+k
afp://파이의IP주소

팝업창이 뜨며 아이디와 비밀번호를 묻는다. 파이의 id와 비밀번호를 입력한다.

Screen Shot 2013 10 11 at 12 20 00 PM

타임머신으로 가서 Select Disk에 타임머신이 있을 것이다.

Screen Shot 2013 10 11 at 12 19 28 PM



참고:
http://www.appilogue.kr/2844433
http://garmoncheg.blogspot.de/2012/11/time-capsule-for-25.html
http://www.stuffaboutcode.com/2012/06/raspberry-pi-run-program-at-start-up.html