先日に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年くらい前?
Orange Pi PCにUSB-HDDを接続する
HDDの初期化
NASにするのにそこそこ容量のあるストレージがなくては話になりません。私は物が捨てられない性格でして倉庫に大昔使っていたPC関連の品々が沢山眠っています。その隅っこに昔使っていたHDD(PATA 128GByte)とUSB-HDDアダプタが転がっていたので、今回はそれを使うことにしました。
作業内容としては以下のようになります。
- USB-HDDの動作確認
- パーティションを切りなおしてext4でフォーマット
- マウント
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につないでいたときのままなので、以前のデータが残ったままになっています。これを初期化してすべて削除します。
個々の手順については以下のページが分かりやすいです。
- Qiita - USB外付けHDDをext4にフォーマットする手順
http://qiita.com/ikuwow/items/c5832fd823e869825c80
(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を停止するには以下の記事が参考になります。
- blacknikka - RaspberryPi外付けUSB HDDを停止して省電力
http://blog.bnikka.com/raspberrypi/raspberrypi-spindown.html
USB-HDDアダプタのspin-down可否については以下のサイトが参考になりました。"lsusb"コマンドでUSBデバイスを表示するとデバイス名が表示されるので、上手くいかない方は非対応リストに該当していないか確認してみてください。
- NSLU2-Linux - SpinDownUSBHarddisks
http://www.nslu2-linux.org/wiki/FAQ/SpinDownUSBHarddisks
$ 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環境からファイルなりを転送して正常に読み書きできることを確認して作業完了です。
所感
あっさり簡単に動きました、と書きたかったのですが変なところで詰まりました。まさかUSBケーブルによって動いたり動かなかったり、回転停止が未対応だったりするとは思わなかったです。古い機器を使うときは要注意ですね。
NAS環境そのものは問題なく動いています。ただ、HDDが回りっぱなしというのが少し(省エネ的に)気になります。新しいのを買えば解決するとは思いますが、そこまでするのもちょっとという気持ちがあり踏ん切りがつきません。いっそのこと、常時稼働が当たり前な何かを組み込んでみようかな(本末転倒?)。
参考
この記事は以下の内容を参考に記載させていただきました。
- Qiita - USB外付けHDDをext4にフォーマットする手順
http://qiita.com/ikuwow/items/c5832fd823e869825c80 - 旅モバ - USBハードディスクをLinuxで使うときの注意点
http://www.tabimoba.net/entry/20120628/1340858085#.WEIsBuaLTRY - UNIXLife - fstabの設定
http://unixlife.jp/linux/system/fstab.html - askubuntu - What do the fstab mount options 'errors=remount -ro' mean?
http://askubuntu.com/questions/707118/what-do-the-fstab-mount-options-errors-remount-ro-mean - NSLU2-Linux - SpinDownUSBHarddisks
http://www.nslu2-linux.org/wiki/FAQ/SpinDownUSBHarddisks - プログラマー社長の「日々発見」 - Unit samba.service is masked のエラー
http://blog.livedoor.jp/kmiwa_project/archives/1045361601.html - openmediavault - OMV 3.0.12 SAMBA modules error (audit, recycle bin)
http://forum.openmediavault.org/index.php/Thread/12943-OMV-3-0-12-SAMBA-modules-error-audit-recycle-bin/