コンテンツへスキップ

Orange PiでNAS環境を構築する

先日にOrange Pi PCを使って3Dプリンタサーバを構築しました。なかなか便利ですが、スペック的に3Dプリンタだけに使うのはもったいない気がします。そこで、よくあるパターンではありますがNASとしても機能するようにようにしてみました。

 

環境

OrangePi PCは3Dプリンタサーバを構築したときのものです。そこに加えてSambaをインストールすることでNAS運用出来るようにしたいと思います。

ストレージは大昔のPATA HDDとUSB-HDDアダプタを押入れのダンボールから発掘してきました(動くかちょっと不安だった)。128GByteと今からすると小さいですが家庭内では十分使えるはずです。

  • OrangePI PC(Allwinner H3)
    • CPU:Allwinner H3(Coretext-A7 4core)
    • Memory:DDR3 1GByte(VRAMと共用)
    • Storage:MicroSDカードスロット
    • Network:100BASE-TX
    • VIDEO:HDMI x1
    • USB:UXB2.0 Host x2, USB1.1 Host x1, USB2.0 OTG x 1
  • OS:ARMBIAN (Debian8 jessie) 3.4.112-sun8i
  • ストレージ:USB-HDDアダプタ(GL811E搭載)+Seagate 128Gbyte HDD(PATA)  *10年くらい前?
OrangePi PC
OrangePi PC

 

HDDラック(USB-HDDアダプタ)
HDDラック(USB-HDDアダプタ)

Orange Pi PCにUSB-HDDを接続する

HDDの初期化

NASにするのにそこそこ容量のあるストレージがなくては話になりません。私は物が捨てられない性格でして倉庫に大昔使っていたPC関連の品々が沢山眠っています。その隅っこに昔使っていたHDD(PATA 128GByte)とUSB-HDDアダプタが転がっていたので、今回はそれを使うことにしました。

作業内容としては以下のようになります。

  1. USB-HDDの動作確認
  2. パーティションを切りなおしてext4でフォーマット
  3. マウント

USB-HDDの動作確認

何事もなければ、単にHDDとアダプタを繋いでUSBケーブルを接続するだけのはずです。lsusbでUSB-HDDアダプタが認識していることを確認します。


$ lsusb
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 002: ID 05e3:0702 Genesys Logic, Inc. USB 2.0 IDE Adapter [GL811E]
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

上記の"Genesys Logic, Inc. USB 2.0 IDE Adapter [GL811E]"(古い!)がそれです。認識しているようです。

が、古いアダプタが祟ったのかこの後にトラブルが発生しました。接続すると一応は認識しますが、HDDに何かファイルを書き込むとやたらと遅い。ログを見ると以下のようなエラーが発生していました。


Dec 1 03:39:27 localhost kernel: [ 985.080056] usb 4-1: reset high-speed USB device number 2 using sunxi-ehci


どうやらUSB2.0関連のエラーのようでリセットがかかっているようです。色々と試行錯誤した結果、USBケーブルをフェライトコア付きのものに変えるとエラーが収まりました。今までフェライトコアに意味あるのかと思っていましたが、効くところでは効くのですね。

ちょっと不安ですが、ここではひとまず動作したということで先に進みます(いずれもっと細かいところまでエラー原因を追いたいですが)。

エラーの原因を特定しようと試みたものの頓挫
エラーの原因を特定しようと試みたものの頓挫

 

パーティションの切りなおしとフォーマット

このHDDは以前にPCにつないでいたときのままなので、以前のデータが残ったままになっています。これを初期化してすべて削除します。

個々の手順については以下のページが分かりやすいです。

(1)接続しているHDDのデバイスを確認


~$ ls -l /dev | grep sd
brw-rw---- 1 root disk 8, 0 Dec 2 14:12 sda
brw-rw---- 1 root disk 8, 1 Dec 2 14:12 sda1

(2)fdiskでパーティションをすべて削除
昔にWindowsをインストールして使っていた頃のパーティションが残っていました。
これを削除します。


kiri@orangepipc:~$ sudo fdisk /dev/sda

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): p
Disk /dev/sda: 111.8 GiB, 120034123776 bytes, 234441648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd8397612

Device Boot Start End Sectors Size Id Type
/dev/sda1 63 234436544 234436482 111.8G 7 HPFS/NTFS/exFAT

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.



Command (m for help): p
Disk /dev/sda: 111.8 GiB, 120034123776 bytes, 234441648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd8397612

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

(3)fdiskでパーティションを作成
特に分割する意味もないので、全領域をひとつのパーティションにします。


$ sudo fdisk /dev/sda

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): n
Partition type
 p primary (0 primary, 0 extended, 4 free)
 e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-234441647, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-234441647, default 234441647):

Created a new partition 1 of type 'Linux' and of size 111.8 GiB.

Command (m for help): p
Disk /dev/sda: 111.8 GiB, 120034123776 bytes, 234441648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd8397612

Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 234441647 234439600 111.8G 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

(4)パーティションをext4形式でフォーマット


$ sudo mkfs.ext4 /dev/sda1
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 29304950 4k blocks and 7331840 inodes
Filesystem UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Superblock backups stored on blocks:
 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
 4096000, 7962624, 11239424, 20480000, 23887872

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

(5)HDDをマウント
問題なくマウントできることを確認します。


$ mkdir /mnt/usbhdd
$ sudo mount /dev/sda1 /mnt/usbhdd

~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mmcblk0p1 29425852 1338040 27774288 5% /
udev 10240 0 10240 0% /dev
tmpfs 204848 4752 200096 3% /run
tmpfs 512112 0 512112 0% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 512112 0 512112 0% /sys/fs/cgroup
tmpfs 512112 0 512112 0% /tmp
tmpfs 102424 0 102424 0% /run/user/1000
/dev/sda1 115379200 192116 109326096 1% /mnt/usbhdd

$ ls -l /mnt/usbhdd
total 16
drwx------ 2 root root 16384 Dec 3 02:58 lost+found

 

マウント設定(fstab)の修正

Linux再起動時にUSB-HDDが自動的にマウントされるように設定します。ここでは各パーティション固有のUUIDを指定してマウントするようにします。

(1)UUIDの確認


$ sudo blkid /dev/sda1
/dev/sda1: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4" PARTUUID="xxxxxxxx-xx"

 

(2)fstabの修正
/etc/fstabにUSB-HDDの設定を追加します。


UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/usbhdd ext4 rw,suid,dev,exec,auto,nouser,sync,noatime 0 0

修正後のfstabは以下のようになりました。


$ cat /etc/fstab
/dev/mmcblk0p1 / ext4 defaults,noatime,nodiratime,commit=600,errors=remount-ro 0 1
tmpfs /tmp tmpfs defaults,nosuid 0 0
/var/swap none swap sw 0 0
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/usbhdd ext4 rw,suid,dev,exec,auto,nouser,sync,noatime,errors=continue 0 0

 

HDDの自動停止

大抵のPCでは暫くディスクアクセスが無いと回転停止(spin-down)するようになっています。夜中など使っていないときに回転停止したほうが省エネですし騒音もありません。しかしUSB-HDDを接続すると自動では回転停止しないため設定が必要になります。

HDDの回転停止は以下のいずれかのコマンドで行います。しかし、USB-HDDアダプタの中には回転停止が不可能なものも存在しており、私のがまさにソレで停止できませんでした。

HDD停止コマンド

  • hdparm -Y <device>
  • sdparm --command=stop --readonly <device>

試しにやってみたところ、私のUSB-HDDアダプタでは以下のようになって停止出来ません。調べてみると"GL811E"というチップが使われているやつ(当時の安価なUSB-HDDは大抵コレだったらしい)はspin-down出来ないらしいです。


$ sudo hdparm -Y /dev/sda

/dev/sda:
 issuing sleep command
SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

$ sudo sdparm --command=stop --readonly /dev/sda
 /dev/sda: ST312002 2A 0811

うまい具合に停止出来た方は、一定時間でHDDを停止するには以下の記事が参考になります。

USB-HDDアダプタのspin-down可否については以下のサイトが参考になりました。"lsusb"コマンドでUSBデバイスを表示するとデバイス名が表示されるので、上手くいかない方は非対応リストに該当していないか確認してみてください。


$ lsusb
.....
Bus 004 Device 002: ID 05e3:0702 Genesys Logic, Inc. USB 2.0 IDE Adapter [GL811E]
.....

 

Orange Pi PCのSambaインストールと設定

気を取り直して、SambaをインストールしてPCやスマートフォンとファイル共有が出来るように設定します。

sambaの設定は以下のようにしました。

  • ワークグループ名:WORKGROUP
  • 共有用ディレクトリ(NAS用途):/mnt/usbhdd/nas
  • ユーザのホームディレクトリ(/home/user)へのアクセス

(1)sambaをインストール


$ sudo apt-get install samba samba-vfs-modules

(2)NAS(共有)用のディレクトリの作成
パーミッションの変更を忘れるとPCから共有ディレクトリにアクセス出来ないのでご注意。


$ sudo mkdir /mnt/usbhdd/nas
$ sudo chmod 777 /mnt/usbhdd/nas

(3)ワークグループ名
sambaの設定ファイル(/etc/samba/smb.conf)を編集します。
PC側のワークグループ名(デフォルトは"WORKGROUP")を変更している場合は以下を書き換えます。


[global]

workgroup = WORKGROUP

(4)共有ディレクトリ設定
以下のように各ユーザディレクトリと共有ディレクトリの設定を追加しました。

 
[homes]
 comment = Home Directories
 path = /home/%u
 browseable = yes
 writable = yes
 create mask = 0700
 directory mask = 0700
 valid users = %U

[NAS]
 comment=USBHDD
 path=/mnt/usbhdd/nas
 public = yes
 read only = No
 writable = Yes

(5)設定の再読み込み
sambaを再起動して設定を読み込めばアクセスが出来るようになります。


$ sudo services samba restart

Orange Pi PCのログインメッセージにもUSB-HDDが表示されるようになります。


$ ssh ORANGEPIPC
 ___ ____ _ ____ ____
 / _ \ _ __ __ _ _ __ __ _ ___ | _ \(_) | _ \ / ___|
| | | | '__/ _` | '_ \ / _` |/ _ \ | |_) | | | |_) | |
| |_| | | | (_| | | | | (_| | __/ | __/| | | __/| |___
 \___/|_| \__,_|_| |_|\__, |\___| |_| |_| |_| \____|
 |___/

Welcome to ARMBIAN Debian GNU/Linux 8 (jessie) 3.4.112-sun8i
System load: 0.74 Up time: 2 hours
Memory usage: 6 % of 1000Mb IP: 192.168.1.36
CPU temp: 37°C
Usage of /: 5% of 29G storage/: 1% of 111G

[ 1 updates to install: apt-get upgrade ]

Last login: Sat Dec 3 03:56:17 2016 from 192.168.1.37

 

動作確認

最後にPC環境からファイルなりを転送して正常に読み書きできることを確認して作業完了です。

NASへの書き込みテスト中
NASへの書き込みテスト中(どうやら問題なさそうです)
OrangePi PCとHDD
OrangePi PCとHDD(こんな感じで収まりました)

 

所感

あっさり簡単に動きました、と書きたかったのですが変なところで詰まりました。まさかUSBケーブルによって動いたり動かなかったり、回転停止が未対応だったりするとは思わなかったです。古い機器を使うときは要注意ですね。

NAS環境そのものは問題なく動いています。ただ、HDDが回りっぱなしというのが少し(省エネ的に)気になります。新しいのを買えば解決するとは思いますが、そこまでするのもちょっとという気持ちがあり踏ん切りがつきません。いっそのこと、常時稼働が当たり前な何かを組み込んでみようかな(本末転倒?)。

 

参考

この記事は以下の内容を参考に記載させていただきました。

公開日 カテゴリー 日常ネタ

sukeについて

自転車で日本一周旅行に出ようとー思い立ったエンジニア。 ガジェット類やセミナーに目がない。 将来は田舎でほっこりとしたいですねー

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください