2015/06/28

Raspberry pi をメディアおよびバックアップファイルサーバ的に使う

Raspberry pi

Rspberry pi にUSBハードディスクを接続して,Mac の time machine のディスクと したり,Linux マシンのバックアップディスクとしたり,UPNP メディアサーバとしたり する計画.

Insttall

本体のインストール.今回はRASPBIANで.

  1. micro SD にコピーするイメージを https://www.raspberrypi.org/downloads/ から ダウンロード.
  2. ダウンロードしたイメージファイルを解凍して,micro SD にコピー. https://www.raspberrypi.org/documentation/installation/installing-images/linux.md
  3. micro SD カードをスロットに挿して起動.イーサネットケーブルを接続.IP アドレスがDHCPによって設定されるはずなので,(当てずっぽうに)ssh で接続.
  4. Raspberry pi の設定.raspi-config
  5. デフォルトエディタの設定.sudo update-alternatives --config editor
  6. Firmware のアップデート.再起動 sudo rpi-update
  7. sudo apt-get update; sudo apt-get upgrade 必要なら再起動.
  8. ユーザの設定. uid と gid もなんかうまくやっておくと,あとでNFSを使うときに便利かも.

HDD の接続と設定

USB HDDを接続して,mount する設定.

まず,ディスクの UUID を調べる.

$ sudo lsblk
/dev/mmcblk0p1: SEC_TYPE="msdos" LABEL="boot" UUID="15CD-3B79" TYPE="vfat" 
/dev/mmcblk0p2: UUID="13d368bf-6dbf-4751-8ba1-88bed06bef77" TYPE="ext4" 
/dev/sda1: LABEL="time_machine" UUID="b25dd4f7-9c17-4d3a-8dd2-3837a6f6acc6" TYPE="ext4" 
/dev/sda2: LABEL="backup" UUID="eae3badb-d4f3-4fd7-922a-0e1d437f8006" TYPE="ext4" 
/dev/sdb1: LABEL="MEDIA" UUID="AFB6-9DF4" TYPE="vfat" 

マウントポイントを作成して,/etc/fstab の編集.

UID=AFB6-9DF4  /mnt/media vfat codepage=932,iocharset=utf8,uid=1000,gid=1000 0 0
UUID=b25dd4f7-9c17-4d3a-8dd2-3837a6f6acc6 /backup/time_machine ext4 defaults 0 0
UUID=eae3badb-d4f3-4fd7-922a-0e1d437f8006 /backup/linux ext4 defaults 0 0

netatalk

Mac OS から接続したり,Time Machine ディスクとして使うための設定.

sudo apt-get install netatalk

/etc/netatalk/AppleVolumes.default を編集.

/mnt/time_machine "Time machine" options:tm allow:tanahiro
/mnt/media "media"

NFS

Linux からディスクをマウントするため.

サーバ

Rasbperry pi にNFSサーバをインストール.

sudo apt-get install nfs-common nfs-kernel-server

/etc/exports を編集.

/backup/linux linux(rw,sync,no_sbtree_check)

ブート時にサービスを起動させる.

sudo update-rc.d rpcbind enable
sudo update-rc.d nfs-common enable
sudo update-rc.d nfs-kernel-server enable

クライアント

サービスのインストール.

sudo apt-get install nfs-common

/etc/fstab の編集.

raspi:/backup /backup nfs defaults 0 0

参考

MiniDLNA (UPNP/DLNA)

サービスのインストール.

sudo apt-get install minidlna

コンフィグレーションファイル, /etc/minidlna.conf の編集.

media_dir=V,/mnt/media

コンフィグレーションファイルのリロード.

sudo service minidlna force-reload

参考

HDD の回転数

ついでに,HDD が使われていない時に回転を止めるようなスクリプト.

sdparm

ツールのインストール.

sudo apt-get install sdparm

スクリプト

INTERVAL 秒ことにディスクの状態をチェックして,もし変化がなければ spindown.

#!/bin/sh

if [ $# -lt 2 ]; then
  echo "usage: usbhdd_spindown.sh [UUID] [INTERVAL]"
  exit 0
fi

disk=`findfs UUID="$1"`
if [ -z $disk ]; then
  echo "could not find UUID $1"
  exit 0
fi
disk=`echo "$disk" | sed -e "s@/dev/@@"`

interval=$2

state=`grep " $disk " /proc/diskstats`
count=$interval
sleep_time=20
up=1

while [ true ]; do
  sleep $sleep_time
  count=$(($count - $sleep_time))
  newstate=`grep " $disk " /proc/diskstats`

  if [ "$state" = "$newstate" ]; then
    if [ $count -lt 0 ]; then
      count=$interval

      if [ $up -gt 0 ]; then
        sync
        state=`grep " $disk " /proc/diskstats`
        sdparm --readonly --command=stop /dev/$disk > /dev/null 2>&1
        up=$?
      fi
    fi
  else
    count=$interval
    state="$newstate"
    up=1
  fi
done

/etc/inittab に起動時に実行するように記述.

# spindown usb hdd
USR0:2:once:/usr/local/bin/usbhdd_spindown.sh AFB6-9DF4 120

参考1 参考2