MoOde 4.0(Beta12) Pulse Audioを設定する

当サイトのオーディオ環境は基本MoOde Audioに集約しています。

MoOde AudioにPulse Audioを設定しておけば他のPi(raspbian)からもリモートスピーカーとして利用できてごきげんな環境になります。(基本Pulse Audioが走る環境であれば利用可能と思いますがほかのOS,環境は試していません)

但し、MoOde AudioのMPDはPulse Audioに対応していないのでMoOde PlayerとPulse Audioの同時使用はできません。(Pulse Audio使用の際はMoOde Playerを停止)

Pulse Audioの基本はユーザー単位で起動することになります。システムデーモンとして起動する解説もあります(具体的な設定方法は試してないのでわかりません)がMoOde AudioではPulse起動中はPlayerから音が出なくなるため不可になります。

Pulse Audioは設定次第で多様な使い方ができますがMoOde Audioをリモートスピーカーとして利用するには以下の点だけチェックしておけば簡単に利用できます。
1.MoOde Player再生中ならば停止
2.MoOde AudioにsshログインしてPulse Audioスタート ($ pulseaudio –start)
3.クライアントはpavucontrolを起動しておく
4.アプリケーションはpulseaudioスタート確認後起動

設定

ここでは便宜上MoOde Audioをpluseサーバー、リモートスピーカーを利用する側をpulseクライアントとしておきます。

pluseサーバーの設定(MoOde Audio)

pulseaudioのインストール

# apt install pulseaudio

pulseaudioを起動して利用可能なカードを調べます。

$ pulseaudio --start

入力ソース
$ pacmd list-sources | grep -e device.string -e 'name:'
        name: <alsa_output.usb-Apple_Computer__Inc._Speakers_p4000-00.analog-stereo.monitor>
                device.string = "1"
        name: <alsa_output.platform-soc_sound.analog-stereo.monitor>
                device.string = "0"

出力ソース
$ pacmd list-sinks | grep -e 'name:' -e 'index'
    index: 0
        name: <alsa_output.usb-Apple_Computer__Inc._Speakers_p4000-00.analog-stereo>
  * index: 1
        name: <alsa_output.platform-soc_sound.analog-stereo>

$ pulseaudio --kill

当サイトでは2枚のカードが刺してあります。i2sカードも認識しています。Osで認識しているカードはpulseaudioでも認識しているはずです。

ユーザーのホームディレクトリに.config/pulseができているので新たに設定ファイルを作成
~/.config/pulse/client.conf

autospawn = no
daemon-binary = /bin/true

default.paには許可するネットワークとデフォルトのカードを記載(ネットワーク帯は自環境に合わせて)
デフォルトのカードはどちらを指定しても動作は変わらないようですがi2sカード(ES9023 DAC)を記載しておきました。
~/.config/pulse/default.pa

.include /etc/pulse/default.pa

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/24 auth-anonymous=1

set-default-source alsa_output.platform-soc_sound.analog-stereo.monitor
set-default-sink alsa_output.platform-soc_sound.analog-stereo

pluseクライアントの設定(Pi3)

Pi3のstretchではpulseaudioはデフォルトでインストールされています。
ホームディレクトリには.config/pulseがあるはずです。
client.confを新たに作成、default-serverにMoOdeのアドレスを指定
~/.config/pulse/client.conf

autospawn = no
daemon-binary = /bin/true
default-server = 192.168.0.111

pavucontrolのインストール

# apt install pavucontrol

設定は以上で完了ですがカードにi2sデバイスを使用している場合はインプット、アウトプットボリュームが最初は100%に設定されているはずです。
必ずアンプの電源を切っておくかボリュームを絞って置くようにしておきます。

接続してみる

クライアントのPi3はpavucontrol(PulseAudio 音量調節)を起動しておきます。
moodeにログインして$ pulseaudio –startを実行

こんな画面になっていれば接続成功

ここでアウトプットボリュームが100%なっていれば適正なところまで下げておきます


再生タブはアプリケーションの音量調整ができます。再生を開始してから現れます
こちらも100%なっていれば下げておきます。以降この値は記憶されます
このようにミキシングも可能ですが複数のアプリケーションを立ち上げるとPiのスペック上音が途切れがちになりますね
pulseaudioは大抵のアプリケーションが対応していると思います。stretchのmplayerも特にao pulseを指定しなくてもpulseサーバーが検出できれば自動で接続、できなければ自マシンのalsaに振り分けられます。
またmoode自身もpulseクライアントとして実行可能です。


カードが複数あれば出力先を切り替えることができます。

pulseaudioは再生中またはこのpavucontrolが起動している間は起動していますが再生終了、またはpavucontrolを閉じた時にはpulseaudioをkillします。
またpulseaudio –killは実行したユーザーのみが有効です。root権限で強制終了するにはkillall pulseaudioを実行します。

以上のようにpulseaudioを起動するのにログインしてpulseaudio –startしなければいけないのが難点ですがi2sカードでもradikoが再生できます。
MPDはpulseaudioを経由しないので音質に影響を与えません。もちろんmoode player再生時はpulseaudioはkillですね。

当サイトもpulseaudio導入以前はカード2枚を物理的に切り替えていました。(^▽^;)
まあこれはこれでいろいろ応用が効くので良しということにしておきます。

参考サイト
PulseAudio – ArchWiki
PulseAudio/サンプル – ArchWiki

Raspberry Pi MoOde 4.0 Beta12を導入してみる

当サイトのRPi1Bのmoode audioもファイルサーバーを分離したことで身軽になりました。またMoOdeも4.0からまた無償化されたことも嬉しいですね。
ということで当サイトもトライしてみました。
MoOde 4.0ではソースコードとレシピのみ配布されていて自分でビルドしなければいけないようです。

当初ソースをダウンロードしてレシピに従いトライしてみましたがレシピではip設定ファイルをデフォルトに上書きしたり途中からはブラウザ上から設定しなければいけないなど当サイトのネット環境ではssh接続を維持、継続することが面倒で結局挫折してしまいました。

そこで少し作戦を変更してネット接続設定ファイルを書き換え不可にして最終段階で解除する方向で行ってみることにしました。当然ですがレシピとは若干順番が違ったりとかするので自己責任ですね。
実行方法としてはSTEP1のimgファイルの作成方法、STEP2のソースファイルのダウンロードを省いている以外はレシピ通りの実行をしています。

環境

当サイトのPi1Bは稼働しながらなのでzero(w)でインストール、カードを作成して最後にPi1Bに挿し替えます。
Raspberry Pi 3 ベースイメージ作成 sshクライアント
Raspberry Pi zero(w) インストール、ビルド
Raspberry Pi 1B 作成したカードでMoOde Audioとして運用

以下、その記録です。(参考程度に願います)

STEP 1 – Modify Raspbian Lite and create a new, base image

Image Builderというイメージ作成スクリプトもありますが今回はレシピの通りloopデバイスから作成してみました。

raspbian-stretch-liteはmoodeaudio_beta12.imgというファイル名でコピーしておきこれを基に変更を加えていきます。

loopデバイスはkpartxで作成することにして作業用のPi3にインストールしておきます。

$ sudo apt install kpartx

kpartxの実行

$ sudo kpartx -va moodeaudio_beta12.img
add map loop0p1 (254:0): 0 85045 linear 7:0 8192
add map loop0p2 (254:1): 0 3534848 linear 7:0 94208

実行するとpcmanfmにbootとrootfsが現れます。(pcmanfmに場所が出ない時は設定、配置を触っていると出てくると思います)

クリックするとパスワードを求められます。

マウントは/media/pi/以下にオートマウントされます。
kpartxはオフセット値を指定しなくても自動で計算されpcmanfmに即時反映されるので見通しが良くなります。
編集は/media/pi/以下にマウントされたファイルをターミナルから編集していきます。自マシンのディレクトリ構成と全く一緒になるのでディレクトリの位置を間違えないように!


この方法は通常のRaspbianのインストールする際のディスク作成にも有効です。

作成次第で非常にインストールの作業効率が上がります。

編集

/media/pi/boot/ssh 空ファイルの作成
$ cd /media/pi/boot
$ sudo touch ssh
/media/pi/boot/cmdline.txtの編集
$ sudo sed -i "s/init=.*//" cmdline.txt
$ sudo sed -i "s/quiet.*//" cmdline.txt
$ sudo sed -i "s/^/net.ifnames=0 /" cmdline.txt
Remove Auto-Resize
$ sudo rm /media/pi/rootfs/etc/init.d/resize2fs_once

MoOdeソースファイルもダウンロードしているのでここで含めてしまいます。

$ sudo cp -r rel-stretch /media/pi/rootfs/home/pi

固定ipアドレスの設定(自環境に合わせて)

/media/pi/rootfs/etc/dhcpcd.conf 末尾に追記(interface nameは指定しない)

static ip_address=192.168.0.111/24 (重複しないアドレスを)
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

有線であれば以上だけでOKです。作業用マシンにWiFi設定があるならコピーが早いです。
作業用マシンにWiFi設定がある場合

$ sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /media/pi/rootfs/etc/wpa_supplicant/wpa_supplicant.conf

新たに編集するなら

country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="YourSSID"
scan_ssid=1
psk="YourPASSWORD"
}

編集が終了したらpcmanfmからbootとrootfsをアンマウントしてloopデバイスを片付けます。(imgのあるディレクトリまたはフルパスで)pcmanfmからは見えなくなります。

$ sudo kpartx -d moodeaudio_beta12.img

編集したimgファイルをカードに書き込みます。(SDカードのデバイス名を確認して)

$ sudo dd if=moodeaudio_beta12.img of=/dev/sda bs=1M

当サイトではkpartxからloopデバイスを作成しましたがlosetupまたはImage Builderで作成したカードを照らし合わせて該当箇所を変更してもOKです。
Image Builderの使い方はこちらのページが参考になると思います。WITH A CHRISTIAN WIFE

作成したカードをzero(w)に挿し込んで起動します。

sshクライアントのPi3は/etc/hostsに名前を登録しておきます。
一応レシピに沿った形で記載していますがhostnameがmoodeになるのはstep3からになります。
imgファイルの段階でmoodeにしておいたほうが楽です。

/etc/hosts
192.168.0.111   moode

Pi zero(w)にssh接続

$ ssh pi@moode or ssh pi@192.168.0.111(pwd=raspberry)

ip設定ファイルを書き換え不可にする

無事ssh接続できたならこの時点で設定ファイルを書き換え不可にしてしまいます。

$ sudo chattr +i /etc/dhcpcd.conf
$ sudo chattr +i /etc/wpa_supplicant/wpa_supplicant.conf

STEP 2 – Expand the root partition to 3GB

STEP 2からは少し手抜きをして実行してみたいと思います。最初に試した時点で実行コマンドがかなり多いのでテキストファイルに書き出しておきました。
ファイルはcpするなりscpするなりしてpiディレクトリに置いておきます。(imgファイル編集の時点で作成してもOK)
コマンドラインからテキストファイルを実行していきます。
$ sh step02.txt


MoOdeのレシピを見ながら実行していきます。

$ sudo reboot は手作業で実行したほうがいいでしょう。

STEP 3 – Install core packages

$ sh step03_1.txt
$ sudo reboot
$ sh step03_2.txt

STEP 4 – Install enhanced networking

$ sh step04.txt
$ sudo reboot

STEP 5 – Install Rotary encoder driver

$ sh step05.txt

STEP 6 – Compile and install MPD

$ sh step06.txt
$ sudo reboot

STEP 7 – Create moOde runtime environment

sudo -i 〜 logoutの間で実行するコマンドはrootとして実行する必要があります。

$ sudo -i
moode # echo -e 'pi\tALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
moode # echo -e 'www-data\tALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
logout

$ sh step07.txt

STEP 8 – Install moOde sources and configs

$ sh step08.txt
$ sudo reboot

STEP 9 – Alsaequal

$ sh step09.txt

STEP 10 – Optionally squash /var/www

$ sudo -i
moode # echo "/var/local/moode.sqsh  /var/www  squashfs ro,defaults 0  0" >> /etc/fstab
$ logout

$ sh step10.txt
$ sudo reboot

STEP 11 – Optionally install latest Linux Kernel

$ sh step11.txt
$ sudo reboot

STEP 12 – Launch and configure moOde!

http://moode

webブラウザから確認できればOK

特にここで何もしなくても良さそうです。

STEP 13 – Final prep for image

ラストステップになりました。
STEP 12でいろいろ設定しても音が出るようになるのはSTEP 13を実行してからになります。
$ sh step13.txt
通常はここで再起動すればいいのですが当サイトの場合はhostnameやアドレスを変更していたのでPi1Bの設定に戻してから一旦パワーオフします。
$ sudo poweroff

Pi1Bにカードを挿し替えて再度起動
ssh接続をしてここで書込不可にしていたファイルの設定を解除します。(~/.ssh/known_hostsは削除するなりしておきます)

$ sudo chattr -i /etc/dhcpcd.conf
$ sudo chattr -i /etc/wpa_supplicant/wpa_supplicant.conf


Network Config画面から繋がる設定をしてAPPLYボタンをクリックすると正規の設定がdhcpcd.confに書き込まれます。
あとはカードやらなんやら設定をすると無事再生できました。(再起動が必要)
今回はadditional componentsの追加インストールは一切していません。


基本の画面は3.1となんら変わっていませんね。Beta12のロゴがかろーじて見分けが付くくらいでしょうか。
再生音はやはり向上しているように思います。

ほとんど基本の設定、動作しか確認していませんが気になった点としてはアルバムを再生したとき曲間の時間が少しずれていますね。時計が0になる2〜3秒前に次の曲が再生されます。
あとはパーミッションの問題でしょうか?play listのsaveができないようです。


インストール時間はSTEP1のカード作成次第と思いますが順調にいけば3時間位で終わります。(STEP2からは2時間30分)そのうちの1時間半近くはMPDのコンパイルにかかっています。Pi2,Pi3ならもう少し早いと思います。

Raspberry Pi Power Supplyを換装する

Piファイルサーバー、moode audio用に電源を換装してみました。

今回は以前もらってきたスイッチング電源を使用してみました。

ですがよく見ると200V仕様なんですね。(・・;)

以前100Vで使用した記憶があるのでちょっとテストをしてみました。
1Ω40Wセメント抵抗2個を使って実験、設定値は5.3V
1個(5A)、2個直列(2.5A)どちらも0.1V位の電圧降下がありますがなんとか使えそうです。

と言う訳でこのまま100Vで使用していきたいと思います。

ハイパワーケーブルの作成

前回失敗したBコネクタによる電源取り込み1本化に再度チャレンジ

既存のケーブルを切ってコネクタを再加工しました。
Bコネクタは接点部のみ利用します。
Aコネクタは接点部と差込部分の金属シェルを利用
中は樹脂で固めていますがカッターやニッパーなどで外せます。
マイクロBは中華部品を使用
ケーブルは0.75mm平行ケーブルを、マイクロB側には0.5mm平行ケーブルを半田付け
Bコネクタは熱収縮チューブをかぶせるといい感じに差し込めます。
マイクロBは半田付けの後に接着剤で固めておきます。

作成したケーブルで確認

電源はBコネクタでPiに引き込みそこからマイクロBでUSB-ATAアダプタに接続します。
白いケーブルはセリアの100均ケーブル


最初にスイッチ電源〜Piを作成したケーブルで接続

起動及び安定稼働にはスイッチ電源の供給は5.5V必要


次にマイクロBケーブルを交換

起動は5.3Vから起動しますが安定稼働には5.35V必要

この辺はスイッチング電源の出力インピーダンスが関わってくるのですが200V仕様のものを無理矢理100Vで使っているので参考になりませんね。

さらなる安定化を

さて起動できることを確認できたのでめげずに対策を図っていきたいと思います。

手持ちのジャンク品にこんなコンデンサが転がっています。
75WV 22000uF
耐圧は今回の用途には超ハイスペックですが賞味期限も切れる頃なのでほかに用途が無ければゴミ箱行きになってしまうのでここで少し活を入れてあげたいと思います。


容量は22000*8パラ = 176000uF


接続はコネクタでUSBポートへ


Pi側にもコンデンサを追加しておきます。
6.3V 3300uF * 5 = 16500uF


USBポートは2列 * 4 = 8ポート
スイッチング電源からの出力とコンデンサとの接続が入ります。


準備ができたので電源を入れてみます。
5.0Vから起動、そして稼働も特に問題ありません。(moode audioも同時起動)
スマホなどを充電すると0.01Vの電圧降下があります。
取り敢えずはUSBコネクタなどの接触抵抗が存在するので5.2Vで運用することにします。

やはりこれだけのコンデンサ容量があるとHDDのスピンアップ時などに対してはコンデンサの低インピーダンスが効いてきます。
またHDD特有のアクセス音がかなり低減しています。通常ファイルの読み書きに対してはモーター音以外はほとんど聞こえません。
Pi、そしてHDDに対してはかなり優しい電源仕様なのかもしれません。

Moode Audio

今回の作業は3.5インチHDDの安定稼働のためなのですがMoode Audioに対しても変化が感じとれます。
パワーアンプ(PAM)の電源は今までどおりなのですが一言でいうと音が澄んだ(不要な音がなくなった)と言うでしょうか。もっともオーディオの世界は何でもありきなので現状悪くならなければ何とでも言えるのですが!
いずれにしてもディジタルオーディオも電源は大事ですね。今回再認識しました。
5Vオーディオも奥が深そうです。

Pi ZERO ファイルサーバー 3.5inchHDDを増設する

最近のHDDは大容量化が進んでいますが同時にそのバックアップも重要になると思います。
使用年数がそれほど経っていなくても決して油断はできません。1TBのディスクのヘッドが飛んでしまった場合などは10TB以上の精神的、経済的ショックそして時間のロスがやってきます。
HDDのケースを開腹しなければいけない事態となれば事実上素人にはお手上げと言っていいと思います。
バックアップはローカルに保存するか外部のクラウドと契約するかの選択になるかと思いますがどちらも一長一短がありますが当サイトとしてはコスト的に且つ特に制限のないローカルに保存することにします。
当サイトもマメにバックアップを取るということができない性分なのでディスクまるごとクローンを取る方向で行ってみたいと思います。

前回試した1TB3.5inchHDDはPi ZEROで問題なく稼働していることからこれに設定を加えていきます。

なんとか電源からの引き込みは1本で済ませられないかUSB Bコネクタと標準ケーブルで接続してみたのですがやはり容量不足で2本仕様になりました。(電源はATX電源)PiにはGPIO端子を介して電源供給
マイクロUSBケーブルもある程度太いものが必要です。電力不足の場合ORICOのLEDはスローな点滅をします。

ORICOケースにはゴム足を貼り付けて熱対策をしています。

マウント

通常の読み書きには今までどおり2.5inchHDDを使用してバックアップに3.5inchHDDを使用するものとします。
/etc/fstabからマウントした場合RaspbianはHDDを認識できないと起動できません。障害時対応のためfstabのoptionにnoautoを指定して、マウントは/etc/rc.localから実行してみました。(マウント位置は適宜に)
2.5inchHDD

# blkid /dev/sda1
/dev/sda1: UUID="1d402e29-277b-47a5-90b2-ff3b02e853d6" TYPE="ext4" PARTUUID="c0b17145-01"

/etc/fstab
PARTUUID=c0b17145-01 /home/hda   ext4 defaults,noauto,noatime    0 0

/etc/rc.local
-------------
fi
/bin/mount /home/hda 追記
exit 0

ここで2.5inchHDDを接続した状態で再起動、正常にマウントできることを確認

3.5inchHDD

3.5inchHDDも同様にrc.localからマウントできるはずですが今回はautofsを導入してみました。
参考 Autofs – ArchWiki

# apt install autofs

/etcには以下のファイルが新たに作成されます。
/etc/autofs.conf
/etc/auto.master
/etc/auto.misc
/etc/auto.net
/etc/auto.smb
マウント位置は/home/hd3.5に設定してみました。

# mkdir /home/hd3.5

新たに/etc/auto.hd3.5を作成

# blkid /dev/sdb1
/dev/sdb1: UUID="3c1a930c-6175-4ef7-be64-31d3771e86f6" TYPE="ext4" PARTUUID="d4db4d02-01"

/etc/auto.hd3.5
/home/hd3.5 -fstype=ext4,defaults   :PARTUUID=d4db4d02-01

/etc/auto.masterを編集

/etc/auto.master
#
/- /etc/auto.hd3.5  --timeout=60 追記
+auto.master
autofs 再起動
# systemctl restart autofs

/etc/exportsの編集(クライアントからマウント)

/etc/exports
/home/hda   192.168.0.0/24(rw,async,crossmnt,no_root_squash,no_subtree_check)
/home/hd3.5 192.168.0.0/24(rw,async,crossmnt,no_root_squash,no_subtree_check)
nfs-server 再起動
# systemctl restart nfs-server rpcbind

3.5inchHDDを接続してオートマウントできることを確認します。
ssh接続して$ dfすると3.5inchHDDはまだマウントされていないはずです。
$ ls -la /home/hd3.5を実行するとマウントを開始、ファイルが見えてきます。使用していなければtimeoutで指定した時間後マウントは解除されます。

#メインの2.5inchHDDもオートマウントは可能ですがSMBの設定が面倒なのでやめておきます。

運用

どんなポリシーでバックアップを実行するかはそれぞれですが、今回の2.5inchHDDにはhda1からhda4のディレクトリを作成しているものとします。
hda1,hda2はよく出し入れするファイルや消失しては困るファイル、hda3,hda4は音楽ファイルやOS関連のバックアップなど割と大容量のしかもそれほど緊急性の高くないファイルがあるものとします。
以上からhda1,hda2は書き込んだらlsyncdで随時バックアップ、hda3,hda4はrsyncで深夜にバックアップを実行することとします。

lsyncdのインストール、設定

# apt install lsyncd

# dpkg -l | grep lsyncd
ii  lsyncd    2.1.6-1   armhf   daemon to synchronize local directories using rsync

/etcにディレクトリlsyncdを作成
設定ファイルの雛形が/usr/share/doc/lsyncd/examples以下にあります。その中からlrsync.luaをlsyncd.conf.luaのファイル名で作成したディレクトリにコピー編集します。(書式が古いようです)

# mkdir /etc/lsyncd
# cp /usr/share/doc/lsyncd/examples/lrsync.lua /etc/lsyncd/lsyncd.conf.lua

/etc/lsyncd/lsyncd.conf.lua
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync.
--
settings {
    logfile = "/var/log/lsyncd.log",
        statusFile = "/tmp/lsyncd.stat",
        statusInterval = 1,
}

sync {
    default.rsync,
    source = "/home/hda/hda1",
    target = "/home/hd3.5/hda1",
--    delete = false,
    delay  = 60,
    rsync = {
            archive = true
        }
}

sync {
    default.rsync,
    source = "/home/hda/hda2",
    target = "/home/hd3.5/hda2",
--    delete = false,
    delay  = 60,
    rsync = {
            archive = true
        }
}

delete = falseをコメントにしています。デフォルトはtrueなのでsourceのファイルを削除した場合targetのファイルも削除されます。delete = falseを有効にすると削除しなくなります。
delayは60秒(default 10)を設定、万一誤って必要なディレクトリを削除した場合バックアップ先のディレクトリも削除してしまいます。60秒あればサーバーにログイン# systemctl stop lsyncdで同期を止めることができます。実際には設定した値+5秒で書込を開始しているようです。
その他のオプションはここで確認できます。 Config Layer 4: Default Config

lsyncd 再起動
# systemctl restart lsyncd

監視するファイル数の設定
大量のファイルがある場合OSの制限に引っ掛かってしまうようです。

$ cat /proc/sys/fs/inotify/max_user_watches
8192

/etc/sysctl.conf
fs.inotify.max_user_watches = 100000 末尾に追加

# sysctl -p
fs.inotify.max_user_watches = 100000

rsyncの設定
userのディレクトリにディレクトリbinを作成、そこにスクリプトを置くことにします。

$ mkdir ~/bin

/home/"user"/bin/backup.sh
#!/bin/sh
sudo /usr/bin/rsync -a --delete /home/hda/hda3/ /home/hd3.5/hda3/
sudo /usr/bin/rsync -a --delete /home/hda/hda4/ /home/hd3.5/hda4/

$ chmod 755 backup.sh

cronから実行

$ crontab -e
# m h  dom mon dow   command
0 2 * * * /home/"user"/bin/rsync.sh 2時に実行

lsyncdもrsyncを利用しています。初回はファイル数、容量が多いとかなりの時間を要します。
2回目以降は差し分けファイルのみの更新になります。コマンドラインからテストディレクトリ、ファイルで十分テストした上で実行するのがいいと思います。

障害対応
HDDも消耗品なのでいつかは壊れます。突然来ることもあります。容量が不足したら必然的に新しいものに交換するのですが間に合っているうちはできるだけ長く使いたいと思っています。(Poor)
と言う訳でいざ障害を考慮してみたいと思います。
上記の設定でPiはUSB-HDDを接続していなくても起動できるはずです。(確認済)
HDDの取り外し(umount)
クライアント側でファイルを使用していないことを確認して -l option でumountします。

# umount -l /home/hda
# umount -l /home/hd3.5

dfで確認、HDDのUSBコネクタを外します。
Pi ZEROをreboot
正常に起動、sshで接続できればPi ZEROは取り敢えずは正常ですね。
次にメインの2.5inchHDDが壊れたという想定でバックアップの3.5inchHDDをメインにします。
2.5inchHDDをコメントにして3.5inchHDDのPARTUUIDを記載します。

/etc/fstab
PARTUUID=c0b17145-01  /home/hda     ext4 defaults,noauto,noatime    0 0
#PARTUUID=d4db4d02-01  /home/hda     ext4 defaults,noauto,noatime    0 0

nfs-server再起動 (3.5inchHDD接続)

# systemctl restart nfs-server rpcbind
# mount /home/hda

クライアント(Pi3)
Pi3でnfs mountで使用していればマウントは外れていますが同様にumountしてから再度mountします。
umountしないと mount.nfs: Stale file handle こんなエラーになります。

# umount -l /home/hda
# mount /home/hda

正常にマウントできました。
あとはPi ZEROサーバー側で不要になったサービスを止めればOKですね。

ATX電源は容量その他問題が無ければ1個にまとめる予定でいます。

Raspberry Pi 3.5インチ USB-HDDアダプタの作成

Raspberry Piで使用する3.5インチ用のUSB-HDDアダプタを作成してみました。
HDDの信頼性としてはやはり2.5インチよりは3.5インチに分があるかな?!
PiでHDDを使うには必要な電力をどう確保するかで決まってくると思います。
当サイトの100均ハブなどではUSBの電源ラインに直接5Vを供給しています。
ここらは自己責任ですね。

3.5インチ用USB-HDDケースも市販されていますが安い物は別に12V電源アダプタを接続するなど今ひとつ使い勝手がよくありません。
当サイトでは3.5インチHDDの丸裸仕様でいきたいと思います。丸裸といってもPiと接続するには最低限SATAからUSBに変換するパンツだけは履かせてあげる必要があります。

今回用意したもの

変換アダプタには前回使用のORICO 2.5インチ HDDケースを今回も採用してみました。(基板のみを使用)

東芝 DT01ACA100 1TB SATA
ORICO 2.5インチ HDDケース
XL6009 4A DC-DC ステップアップコンバータ

アダプタを改造する

SATAの仕様としては2.5インチも3.5インチもコネクタは共通となっています。ORICOの2.5インチ用は12Vの端子がないので直接供給してみることにしました。
シリアルATA wiki

敢えて12V電源を別に用意するのは使い勝手が悪いのでXL6009基板で昇圧します。
ユニバーサル基板にはマイクロB5V入力、XL6009基板を載せ出力(12V)及び、5V,GNDの3本をアダプタの電源コネクターに半田付けします。


電源コネクタは右側15pin、左から1〜15
4 – 6 GND
7 – 9 5V
13 – 15 12V
各3Pinづつ共通のため真ん中のPinを狙って半田付けすればいいですね。
熱が通りにくいので大きめのハンダゴテがいいと思います。


基板合体のため穴を3mmに拡大、電源コネクター側に新たに穴を開けました。
プラスチックスペーサーを入れて合体します。

パーティション作成


電源は5V2Aクラスを用意しました。Pi3に繋いでパーティションを作成します。

ドライブは/dev/sdbで認識できました。fdiskを実行します。

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

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xdc33f138.

Command : n 新たに領域を作成

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (1-4, default 1): 
First sector (2048-1953525167, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-1953525167, default 1953525167): 

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

Command : p 確認

Command (m for help): p
Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 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: 0xdc33f138

Device     Boot Start        End    Sectors   Size Id Type
/dev/sdb1        2048 1953525167 1953523120 931.5G 83 Linux

Command : w テーブルをディスクに書き込み、終了

Command (m for help): w

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

フォーマット

Pi3からはコマンドラインから実行する方法とgpartedを使用する方法があります。
コマンドラインから実行

# mkfs.ext4 /dev/sdb1
mke2fs 1.43.4 (31-Jan-2017)
/dev/sdb1 contains a ext4 file system
	last mounted on Wed Nov 29 00:34:11 2017
Proceed anyway? (y,N) y
Creating filesystem with 244190390 4k blocks and 61054976 inodes
Filesystem UUID: 3c1a930c-6175-4ef7-be64-31d3771e86f6
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
	102400000, 214990848

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

gpartedを使用
インストール # apt install gparted

右上のデバイス選択でHDDを選択
デバイス選択を謝ると悲しい事態が起こることになるので注意
メニューのチェックマークを実行するまでは実行しないので構成を自由に変更したりすることが可能です。


HDDのアクセスLEDは下向きになりますがかなり明るいので充分認識可能です。
フォーマットが終了するとPi3のファイルマネージャーには1TBのディスクが見えてきます。
当初マウントしただけでアクセスLEDがしばらく点滅していたのですがその後は待機時点灯、アクセス時点滅の正常動作になっています。(なにかチェックが入っていたのかもしれません?)


アダプタ自体はかなりコンパクトにそして電源も通常の5V2Aクラスがあればいいので手軽に使用できると思います。
用途としてはファイルサーバー(pi zero)のHDDバックアップ用を想定していますがPiのUSB2.0+(NFS,samba)は速度面では期待できないのでHDDからのダイレクトコピーや非常時のHDD救出用にも活用できそうです。

Top