前段:Intel NUC7PJYH を Linux で使い続けた記録 3:J5005 内蔵 GPU を叩き起こす!
Intel NUC7PJYH で少電力・省エネなファイルサーバーを作ろう。
ファイルサーバーは samba で構築
samba の情報はいくらでも転がってるから、設定方法は割愛
NUC7PJYH 特有の設定は無い
重要なのは samba の設定ではなくて、少電力なのだ!(後述)
ハードウェア構成
ファイルサーバー用ストレージとして、3.5インチ HDD 2台がつながっている。(not RAID)
どちらも 5400rpm 低速回転
読み書き速度より、低電力・低発熱を念頭にした設計
USB 3.0 接続で、↓みたいなのを利用 (同じモデルは古いからもう売ってない)
HDD をスピンダウンさせろ!
24時間 HDD が回転し続けるのはどう考えても問題がある。
NUC7PJYH の J5005 CPU が少電力 (TDP 10w) なのに、HDD がフル回転してたら意味がない。
使っていない HDD は少電力待機状態にしたい。
HDD のスピンアップ/ダウンを頻繁にすると故障しやすくなる、ということを念頭に置きつつ。
利用状況・環境によるので、実装は各自判断を。
ネタ元:8.USBHDDの定期的なスピンダウン方法 - RaspberryPiで各種サーバー作り! - ある阪大生の物置小屋
↑を完璧にパクり (猛烈に感謝!)、HDD 2台の設定を行う。
HDD スピンダウンさせるスクリプトを設置
#!/bin/bash
get_dev() {
while [ true ]; do
disk=`ls -l /dev/disk/by-uuid | grep $1`
if [ "$disk" ]; then
break
fi
count=$interval
sleep 10
done
echo `echo "$disk" |sed -E 's/^.+\///'`
}
if [ $# -lt 2 ]; then
echo "not enough arguments supplied."
echo "hdd_spindown.sh [UUID] [INTERVAL]"
exit 0
fi
uuid=$1
interval=$2
count=$interval
up=1
while [ true ]; do
sleep 10
disk=`get_dev $uuid`
count=$(($count-10))
newstate=`grep " $disk " /proc/diskstats`
if [ "$state" = "$newstate" ]; then
if [ $count -lt 0 ]; then
count=$interval
if [ $up = 1 ]; then
sync
state=`grep " $disk " /proc/diskstats`
# hdparm を利用するとき
hdparm -fy /dev/$disk > /dev/null 2>&1
# sdparm を利用するとき
#sdparm --command=stop -r /dev/$disk > /dev/null 2>&1
up=0
fi
fi
else
count=$interval
state="$newstate"
up=1
fi
doneパスが通ったところ (私は ~/.local/bin/ ) に、
hdd_spindown.sh などの名前を付けて保存$ chmod 700 ~/.local/bin/hdd_spindown.sh コマンド実行して、パーミッションを 700 に
接続してある HDD の「名前」と「UUID」を調べる
HDD の「名前」
$ systemctl list-units | grep -F /media/ コマンドで得られるので、メモしておく
media-HOGEHOGE-ST8000DM004_75001.mount loaded active mounted /media/HOGEHOGE/ST8000DM004_75001
media-HOGEHOGE-WD30EZRZ_27001.mount loaded active mounted /media/HOGEHOGE/WD30EZRZ_27001
↑の頭の *****.mount って文字列
HDD の「UUID」
$ blkid コマンドで得られるので、メモしておく
/dev/sdb2: LABEL="ST8000DM004_7500" BLOCK_SIZE="512" UUID="70AA3332AA32F466" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="**********"
/dev/sdc1: LABEL="WD30EZRZ_2700" BLOCK_SIZE="512" UUID="A8028694028666E2" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="**********"
systemd (systemctl) で運用するための準備
[Unit] Description=hdd spindown st8000dm004 After=(調べた *****.mount って文字列) [Service] ExecStart=/home/HOGEHOGE/.local/bin/hdd_spindown.sh (調べた UUID) 480 > /dev/null 2>&1 KillMode=process Type=simple Restart=no [Install] WantedBy=multi-user.target
上記 UUID の次にある
480 という数字が、HDD スピンダウンするまでの時間 (秒)上記内容のファイルを保存
/etc/systemd/system/my_hdd_spindown_st8000dm004.service などの名前でHDD は 2台あるので、もう1つファイルを同様の手順で保存
/etc/systemd/system/my_hdd_spindown_wd30ezrz.service などの名前で$ chmod 644 /etc/systemd/system/my_hdd_spindown_st8000dm004.service コマンド実行して、パーミッションを 644 に$ sudo chown root:root /etc/systemd/system/my_hdd_spindown_st8000dm004.service コマンドでユーザーを root に$ chmod 644 /etc/systemd/system/my_hdd_spindown_wd30ezrz.service も同様にユーザーとパーミッションを変更
systemd (systemctl) で実行・監視状態に
エラーが出ないことを祈りつつ・・・
HDD 監視を開始 & 今後も PC 起動時から常駐させる。
$ sudo systemctl enable my_hdd_spindown_st8000dm004.service
$ sudo systemctl enable my_hdd_spindown_wd30ezrz.service
稼働状況を確認してみる。
$ sudo systemctl status my_hdd_spindown_st8000dm004.service
$ sudo systemctl status my_hdd_spindown_wd30ezrz.service
あとは指定した時間が経ったとき HDD が止まるかを見届けるのみ。
HDD なので、回転音やヘッドが落ちる音でわかるはずだ。
Good Luck !
次は、長く電源を入れっぱなし使い続けているから、どうしても必要になる「掃除」のお話
続き:Intel NUC7PJYH を Linux で使い続けた記録 5:ホコリ掃除
コメント