コンテンツへスキップ

めざましじゃんけん結果画像検出システム

Darknet導入や機械学習など、各種記事を記載して来ました。
最初の全体像を記載した投稿に、各記事へのリンクを増やしております。

フジテレビ|めざましじゃんけん結果画像検出システム

気の向くままに、記載していたのですが、一番内容が薄そうな内容が未だに残ってました。
今回のタイトルの通り、WindowsへOpenCVをインストールです。

特に、独自でコンパイルなどは、実施しておらず、pip3やAnaconndaで導入します。

pip install opencv-python

以上です。簡単で良いですね。
OpenCVも奥が深いライブラリです。

いずれ、今までの学習履歴も記載したいですが、以下書籍は分かりやすかったです。機械学習やOpenCVぐらい大きなライブラリーは、書籍で全体像を勉強し、細部をWEBで調べる方法で習得を勧めてます。今まで、購入した技術書でハズレはないかな。

created by Rinker
¥3,630 (2024/11/24 17:23:35時点 Amazon調べ-詳細)

TP-LINK TL-ER6020でのNAT構成

PPoE2セッション構成とし、NAT可能なWANポートを2つへと構成変更を行いました。
今までのネットワーク構成は、以下のようにNAT可能なPPoE接続は1セッションであったので、Synology の外部サーバー公開とRaspberry Piの外部サーバ公開は、外部向け公開ポートを分けて、アクセス/処理の振り分けを行っておりました。

ダブルWAN構成(PPoEの2セッション構成)

TP-Link の TL-ER6020は複数WANポートをサポートしているので、このような構成でのNATも簡単に設定出来ます。今回利用しておりませんが、WAN1とWAN2両方で、WEBリクエストの着信を待ち、公開サーバーへフォワードすることも可能です。

以下が、ER6020のVirtual Server(NAT)設定となります。

  • Synology ポート80(http) WAN2を利用
  • Synology ポート443(https) WAN2を利用
  • Synology ポート53(DNS) WAN2を利用
  • Raspberry Pi ポート80(http) WAN1を利用
  • Raspberry Pi ポート443(https) WAN1を利用

TP-Link VPNルーター PPTP L2TPVPN TL-ER6020

Raspberry Pi 3B+ 高温対策

プログラムのコンパイルなど4コアすべてを使った高負荷処理でなくても、結構高めの動作温度が気になっておりました。80°C近くになっている時間もありました。

夏も終盤ですが、8月末にRaspberry Pi 3B+にファンを導入しました。小さな基盤なので、ファンも小さかったです。

想像以上の効果でした、導入前が日次平均60°C付近が、導入後50°C付近と10°C以上の効果がありました。

以下が、平均温度の推移です。

Raspberry Pi 3B+の温度制御

Raspberry Pi 3B+には、2段階の温度制御が実装されています。

  • temp_soft_limit
  • temp_limit

temp_soft_limit

Raspberry Pi 3B +のみに導入されています。60°C以上になると、CPUスピードコントロールが実施されます。CPUクロックスピード調整システムが作動し、温度調整が設定されます。この温度では、クロック速度は1400MHzから1200MHzに低下する。デフォルト値は60°Cとなっております。

temp_limit

/boot/config.txtにtemp_limit=75と記載します。
この場合、70°Cからスロットリングが始まり、CPUクロックが標準の1.2GHzから段階的に600MHzまで低速化、75°C以下を保てるようになります。
スロットル時の最低CPUクロックも同様にarm_freq_min=400などと、さらに低く設定できます。

設定省略時(デフォルト)は、85℃となります。80°Cからスロットルを絞り、85°Cを越えないように制御します。

Raspberry Pi 3B+にデュアルファンをインストール

Raspberry Pi 3B+ デュアルファン Raspberry Pi Cooling Dual Fanを取り付けた際の写真を載せておきます。

綺麗に梱包されておりました。ファンを設置するシールもしっかりとした商品が同梱されています。

少し見ずらいですが、赤と黒のケーブルを接続し、ファンをボードに設置します。

Raspberry Pi デュアルファン

固定グローバルIPとv6プラスとNAT可能なPPoEセッションの3セッション環境

関連記事:日曜日(9月8日)投稿記事

IPv6網のNGN(次世代ネットワーク)を利用したIPoE方式である「V6プラス」と従来のPPoE2回線を接続する3セッション構成を実現します。

以前に、V6プラスとPPoE1回線の2セッション構成を記事にしているので、そちらも参照ください。「v6プラス」とNAT(PPoE接続)の同時利用環境の構築方法
今回は、PPoEを2セッションをTP-LINKのTL-ER6020で構築する方法を記載します。

TP-LINK TL-ER6020によるダブルWAN構成(ダブルPPoE構成)

 

構成概要

複数のインターネット接続回線を準備すると、それぞれの回線をActive-Activeで運用するのか、ネットワークトラフィックを分散させ全体のネットワーク性能を向上させるのか、それともActive-Stanbyとし、片方(片系)の障害時に、バックアップ回線を使うのか、様々な運用が考えられます。
今回は、外部(インターネット側)からのアクセスに注目し、構成例を示します。

  • PPoE接続1(WAN1)へのアクセスを、Synologyへ
  • PPoE接続2(WAN2)へのアクセスを、Raspberry Piへ

この構成を実現するTP-LINK TL-ER6020の設定方法を公開します。

TP-LINK TL-ER6020設定

  1. WANポート数を設定します
  2. ルーティングを設定するために、SynologyとRaspberry PiのIPアドレスにTL-ER6020内で利用するIPアドレス名を設定し、IPアドレス名を用いてIPグループの設定を行います
  3. IPグループを用いてルーティングの設定をします

以上で、SynologyとRaspberry Piが異なるネットワークゲートウェイを用いて、サーバー公開可能となります。

WANポート追加

「Network」「WAN」メニューの「WAN Mode」タブでWANポート数を設定出来ます。今回は、WANを2ポートに設定しています。

IPグループ設定

ルーティング設定に向けて、IPグループ設定を行います。IPグループ設定に向けて、IPアドレスに管理名を設定します。
「Performances」「IP Group」メニューの「IP Adress」タブでSynologyとRaspberry PiのIPアドレスにIPアドレスの名前を設定します。

設定したIPアドレスの名前を用いて、IPアドレスのグループを作成します。「Performances」「IP Group」メニューの「IP Group」タブでSynologyとRaspberry Pi向けのIPグループをそれぞれ作成します。

ルーティング設定

「Transmission」「Routing」メニューの「Policy Routing」タブでSynologyとRaspberry Pi向けのルーティングを作成します。
以下の例では、SynologyがWAN2を利用し、Raspberry PiがWAN1を利用する設定となっております。

TL-ER6020のハードウェアバージョンについて V1 V2

ハードにV1とV2があります。V1を販売しているサイトが多いので、購入時に注意が必要です。

V1では、WANポート2ポート固定。V2では、WANポート数も変更出来ます。
WEBで販売されているサイトのほとんどが、写真や説明がV1のサイトが多いです。楽天のTP-LINKが直接運営しているサイトにメールでV2出荷であるか確認を行い、購入しました。
当初V2を切り替えた理由は(実は、V2の前はV1を利用しておりました)、Apple製品のVPNにもオフィシャルファームウェア対応でした。V1時代は、海外の開発コミュニティに公開されているファームを自己責任でインストールし、運用しておりました。
V2は、WANポート数が設定で変更可能、Apple製品のVPNにもオフィシャルファームウェアで対応していたりと、ER6020を購入するならV2一択です。購入時にはご注意を!

TP-Link VPNルーター PPTP L2TPVPN TL-ER6020

ブートディスク変更

少し前には、ハードディスクHDDのブートディスクからSSDのブートディスクへの交換が頻繁に行われていたと思います。古いパソコンもブートディスクをHDDからSSDに変更すると、PCそのものが別物になったように感じるぐらい爆速PCになります。
多くの人がブートディスクを移行した際に、大容量のHDDから容量が小さくなったSSDへの移行が行われたと思います。
ひと昔ならば、ブートディスクは100GBもあれば十分だったのですが、数年利用すると、必要容量の大きくなった各種開発ツールなどのソフトウェア群に、特にクラウド利用の各種アプリが利用するユーザー個人データの肥大化。ドキュメントフォルダーや写真フォルダーを別ドライバーに指定していたとしても、ブートディスクが肥大化します。

 

HDDからSSD、SSDからSSDへのブートディスクの変更手順は、同じ手順となります。
今回は、200GBより少し大きなSSDから大容量SSDへのブートディスクの変更を行います。

一度、ブートディスクが容量不足となり、容量不足の赤色表示になると、日常的にディスク容量の開放、アプリケーションの削除、新規アプリケーションのインストール場所変更など、ストレスが発生する運用が続くと思います。

SSDも大容量化、低価格化が進んでおります。現在のSSDの転用先などをうまく見つけ、ブートディスクの大容量SSD導入を行い、ストレスのないWindows環境を整えましょう。

EaseUS Todo Backupによるブートディスクのオンラインクローン

EaseUS Todo Backup Free

ダウンロードインストール

Free版をダウンロードし移行対象のWindowsにインストールします。

ディスクシステムクローン

各種WEBの情報もありますが、現時点の最新版だと、システムクローンを選択し、コピー先のディスクを選択するのみの、クローンディスク作成で、問題なくディスク交換が可能でした。
システムクローンでなく、クローンを選択し、後からブートレコードを変更するなどの作業は、一切不要でした。

接続変更

SATAケーブル、通常SATA1のケーブルをコピー元となった現行のディスクから、今回準備した新規SSDに繋ぎ変えを行います。

新しいSSDからOS起動

そのまま電源を入れれば、新しいディスクでOSは立ち上がります。
起動ディスクのサイズが、古いディスクの
「ディスクの管理」より容量拡張を行います。

その他Tips

古いディスクのパーティション削除(回復パーティション)

ディスク管理画面のGUIより削除できないパーティション(回復パーティション)は、コマンドラインでのパーティション開放が必要となります。
以下、パーティション削除に必要なコマンドです。

diskpart

Diskpartコンソールに入り、パーティション操作をしたいDiskを選択します。selectディスクでディスク選択をすると、list diskで選択したディスクにアスタリスク(*)が表示されます。

list disk
select disk 0
list disk

選択したディスクで、削除対象パーティションをselectし、削除コマンドを実行します。

list partition
select partition 3
list partition
delete partition override
list partition

ファイルバックアップ

ディスク交換時のファイル移動も今回紹介した「EaseUS Todo Backup」が便利でした。特に、ドライブ全体をコピーする場合などは、ファイル数なども多くなるので、エクスプローラーでのファイルコピーだと、転送速度も遅いですし、非常に長い時間を要します。100GB程度でもプログラムフォルダなど、システム利用されていたフォルダには数多くのファイルが存在し、エクスプローラーでのファイルコピーには時間を要します。

参考にさせて頂いたサイト

Windowsを起動したままでOK! HDDからSSDに換装して爆速化

WesternDigital(ウエスタンデジタル) WD Blue WDS100T2B0A (SSD/2.5インチ/1TB/SATA)

関連記事

Movidius Neural Compute Stick 2(NCS2)ヒートシンク

予想通り、NCS2の発熱量は大きいです。特に、連続稼働させている状況では、手で触ると、長時間は触り続けられない程高温になっております。
最低限、USBの延長ケーブルで、Raspberry Piやパソコンより距離をとって、設置することは必須となります。

今回、細かなヒートシンク10個入りを購入し、写真のように片面3個、先端部に1個の計7個のヒートシンクを導入しました。
コストをかけずにすぐに導入できる熱対策なのでおすすめです。

導入後、USB接続部分より本体を触っても、触り続けられる温度へと下がっております。

USB接続外部ディスクへヒートシンク

SSD、HDDの発熱は大きいです。物理デバイスであり、高温による機器の寿命など気になります。PCや専用のNAS BOXならば熱処理も施されておりますが、Raspberry PiにSATAとUSBの変換ケースを用いて、利用する際には、この高音となるUSB接続のケースが気になります。
こちらもヒートシンクを導入し、熱対策を行います。
ヒートシンクを貼り付けたのみですが、温度変化を実感出来ます。

導入したヒートシンク(本記事で掲載している商品)

Movidius Neural Compute Stick 2向け2.5インチ外付けUSB
Intel Neural Compute Stick 2

 

 

メインサーバー Synology

  • 動作がもっさりすることがある
  • 特に、一番しっかりしてほしいWEBサーバーの動きがもっさり
    WEB APIのタイムアウトやWEBサイトへのアクセス不通

機種のモデルアップか、自作小型サーバ導入か検討中。

  • Synology DiskStation DS218j 2ベイ
    • 1.3GHzデュアルコアCPU
    • 512MB DDR3メモリ搭載

Shuttle Intel H270 Expressチップセット搭載XH270

今のWindowsメインマシンもShuttleを利用しております。マザーボード、電源などは変更していますが、 もうすぐ10年です。Shuttle SG41J1を利用しております。
仕様要件として、Synologyと同様に信頼性が一番高くなります。よって、ディスクのRAID化必須となります。各種ベアボーンが製品化されており、PC自作派には嬉しい時代なのですが、意外とないのが、省スペース筐体での複数SATAサポート。SATA1台とM.2のPCI-ExpressによるSATA構成が多いと思います。

  • Shuttle Intel H270 Expressチップセット搭載XH270
    • 搭載CPU:ソケット1151
    • 対応メモリ:DDR4 2133/2400MHz SO-DIMM ×2 (最大容量32GB)
    • オーディオ機能:5.1チャンネル HDオーディオ
    • ネットワーク機能:有線LAN : 1000BASE-T/100BASE-TX/10BASE-T対応
    • ドライブベイ:4 / 2.5インチ (9.5mm厚まで)
    • 拡張スロット:M.2 Type2242/2260/2280 M key (PCI-Express x4,SATA 6GB/s対応) / M.2 Type2230 AE key (PCI-Express x1,USB2.0対応)
CPUとメモリは、以下ぐらいを選ぶと思います。トータルで7万円ぐらいにはなりますね。
  • INTEL インテル Core i3-9100F
  • Crucial [Micron製] DDR4 ノート用メモリー 8GB x2 
  • Crucial SSD 1000GB MX500 内蔵2.5インチ 7mm MX500 ✕2台

残りのSATA2台分は、容量大きめのSATA HDDを導入すると思います。

intel MM999J4X Core i3-9100F LGA1151(INT-BX80684I39100F)
CFD W4N2400CM-8G Crucial スタンダードモデル DDR4-2400 ノート用メモリ 260pin SO-DIMM 8GB 2枚組

もちろん、Synologyも簡単にサーバー運用が出来るので、おすすめです。

SYNOLOGY シノロジー DiskStation DS218j デュアルコアCPU搭載多機能パーソナルクラウド 2ベイNASキット DS218j[DS218J]

 

東芝REGZAテレビをWEB APIで操作

テレビの状態が知りたいと思い、東芝のレグザ(REGZA)に何かI/F(インターフェース)がないのか、調べてみました。
残念ながら、テレビの状態は分かりませんでした。電源が付いていなければ、なにかのコマンドやネットワーク接続失敗などで、電源ONかOFFぐらいは分かるかなが現時点の結果です。操作系は、Nature RemoのAPIやNature Remo経由のIFTTTが利用しやすいですし、他デバイスと同じ方式で統一した操作が可能など優位点が多いです。東芝はテレビを頑張っているように見えるので、せっかくI/F(インターフェース)があるようなので、今後IFTTT対応をしてほしいです。Google home搭載モデルなどもありますし、今後に期待!
非公式と思われる情報であり、有用となり得る情報なので設定方法や確かめた内容を記事にしておきます。

利用にあたり、REGZA側に2つ設定を行いました。

  1. IPアドレスの指定(IPアドレスが分かれば、設定方法は問わないです)
  2. レグザAppコネクト設定

1.IPアドレスの指定

「(リモコン)設定ボタン」「初期設定」「ネットワーク設定」「IPアドレス設定」

デフォルト設定のIPアドレス自動取得を「しない」に設定変更しました。
その後、ネットワーク設定に合わせて、IPアドレスの設定を行いました。

2.レグザAppコネクト設定

「(リモコン)設定ボタン」「接続機器設定」「外部連携設定」「レグザAppコネクト設定」

API利用時に、ユーザー名とパスワードの認証が必要となります。
Digest認証ダイジェストにんしょう)が利用されているようで、プログラムからの利用時には、Digest認証に対応した方法で利用する必要があります。

東芝テレビ(レグザ:REGZA)のWEB API仕様

http://[REGZA IP]/remote/remote.htm?key=[command_key]

IE、Chrome、Firefoxなど一般ブラウザから動作確認できます。
戻り値は、テキスト出力として数字が返ってきました。
「0」成功 「0以外」失敗。
ブラウザで操作している際に、テレビの音量を上げようとすると「4」というエラー番号も見ることが出来ました。電源ボタンを押した直後に音量操作実施のタイミング。

テレビのIPアドレスが192.168.0.77の場合のコマンドサンプル

  • 音量を上げたいとき
    http://192.168.0.77/remote/remote.htm?key=40BF1A
  • チャンネル「8」ボタンを押す
    http://192.168.0.77/remote/remote.htm?key=40BF08
  • リモコンの「青」ボタンを押す
    http://192.168.0.77/remote/remote.htm?key=40BF73

[command_key]リスト

ボタン名[command_key]
140BF01
240BF02
340BF03
440BF04
540BF05
640BF06
740BF07
840BF08
940BF09
1040BF0A
1140BF0B
1240BF0C
入力切替40BF0F
消音40BF10
電源40BF12
音声切り替え40BF13
音量↑40BF1A
チャンネル↑40BF1B
画面表示40BF1C
音量↓40BF1E
チャンネル↓40BF1F
ブロードバンド40BF25
クイック40BF27
マルチ画面40BF29
画面サイズ40BF2B
戻る40BF3B
終了40BF3C
決定40BF3D
40BF3E
40BF3F
一時停止(静止)40BF50
40BF5B
40BF5F
CH番号40BF60
サーチ40BF60
ラジオ/データ40BF6D
番組表40BF6E
番組説明40BF71
40BF73
40BF74
40BF75
40BF76
ミニ番組表40BF77
地デジ40BF7A
地アナ40BF7B
BS40BF7C
CS40BF7D
録画40BF86
設定メニュー40BFD0
↑↑40BE20
↓↓40BE21
→→(30秒送り)40BE22
←←(10秒戻し)40BE23
早送りスキップ40BE26
戻るスキップ40BE27
録画リスト40BE28
停止40BE2B
巻き戻し40BE2C
再生40BE2D
早送り40BE2E
レグザメニュー40BE34
タイムシフト40BE35
番組検索40BE36
始めにジャンプ40BE47
イジェクト40BE93
ディスク40BE9E
dデータ43BC14
字幕43BC52

ブラウザで実行した際の画面イメージ

表示されるDigest認証画面

音量を上げるコマンド実行後の結果「0」(成功)

参考にさせていただいたサイトです

REGZAをネットワーク越しに操作する

Raspberry Piのバックアップ

SDカードのみの運用、他のコンポーネントの信頼性も不明瞭なので、とりあえずまるごとSynologyへバックアップを行い、故障などが起きた際に備えます。

Synologyでrsync利用設定

「コントロールパネル」「ファイルサービス」「rsync」タブの「rsyncサービスを有効にする」にチェックを入れます。。設定変更時には「適用」ボタンを押して設定を有効化する必要があります。

Raspberry Piのバックアップ設定(Rsync)

バックアップ対象

現在のボリューム構成は、以下となります。(「df -h」コマンド結果)
/ ルートフォルダ全体をバックアップ対象とし、バックアップから除外するファイルリストをファイルで準備します。「/rsync-exclude.txt」として準備しました。

@raspberrypi:~# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/root 116G 5.8G 105G 6% /
devtmpfs 459M 0 459M 0% /dev
tmpfs 464M 0 464M 0% /dev/shm
tmpfs 464M 14M 450M 3% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 464M 0 464M 0% /sys/fs/cgroup
/dev/mmcblk0p6 253M 40M 213M 16% /boot
tmpfs 93M 0 93M 0% /run/user/1000
tmpfs 93M 0 93M 0% /run/user/1001
@raspberrypi:~# sudo vi /rsync-exclude.txt
@raspberrypi:~#
@raspberrypi:~# sudo cat /rsync-exclude.txt
/proc/*
/sys/*
/dev/*
/boot/*
/tmp/*
/run/*
/mnt/*
/var/tmp/*
/var/log/*
/media/*

rsyncコマンド

今回は、以下のコマンドを利用することにしました。

バックアップ先 /mnt/synology/raspberry_backup (フォルダは事前に作成して置きます)

sudo rsync -aEv --delete-during --exclude-from=/rsync-exclude.txt / /mnt/synology/raspberry_backup/ --log-file=/home/rsync.log
rsync  version 3.1.3  protocol version 31
Copyright (C) 1996-2018 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes, prealloc

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

rsync is a file transfer program capable of efficient remote update
via a fast differencing algorithm.

Usage: rsync [OPTION]... SRC [SRC]... DEST
  or   rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
  or   rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
  or   rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
  or   rsync [OPTION]... [USER@]HOST:SRC [DEST]
  or   rsync [OPTION]... [USER@]HOST::SRC [DEST]
  or   rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect
to an rsync daemon, and require SRC or DEST to start with a module name.

Options
 -v, --verbose               increase verbosity
     --info=FLAGS            fine-grained informational verbosity
     --debug=FLAGS           fine-grained debug verbosity
     --msgs2stderr           special output handling for debugging
 -q, --quiet                 suppress non-error messages
     --no-motd               suppress daemon-mode MOTD (see manpage caveat)
 -c, --checksum              skip based on checksum, not mod-time & size
 -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
     --no-OPTION             turn off an implied OPTION (e.g. --no-D)
 -r, --recursive             recurse into directories
 -R, --relative              use relative path names
     --no-implied-dirs       don't send implied dirs with --relative
 -b, --backup                make backups (see --suffix & --backup-dir)
     --backup-dir=DIR        make backups into hierarchy based in DIR
     --suffix=SUFFIX         set backup suffix (default ~ w/o --backup-dir)
 -u, --update                skip files that are newer on the receiver
     --inplace               update destination files in-place (SEE MAN PAGE)
     --append                append data onto shorter files
     --append-verify         like --append, but with old data in file checksum
 -d, --dirs                  transfer directories without recursing
 -l, --links                 copy symlinks as symlinks
 -L, --copy-links            transform symlink into referent file/dir
     --copy-unsafe-links     only "unsafe" symlinks are transformed
     --safe-links            ignore symlinks that point outside the source tree
     --munge-links           munge symlinks to make them safer (but unusable)
 -k, --copy-dirlinks         transform symlink to a dir into referent dir
 -K, --keep-dirlinks         treat symlinked dir on receiver as dir
 -H, --hard-links            preserve hard links
 -p, --perms                 preserve permissions
 -E, --executability         preserve the file's executability
     --chmod=CHMOD           affect file and/or directory permissions
 -A, --acls                  preserve ACLs (implies --perms)
 -X, --xattrs                preserve extended attributes
 -o, --owner                 preserve owner (super-user only)
 -g, --group                 preserve group
     --devices               preserve device files (super-user only)
     --copy-devices          copy device contents as regular file
     --specials              preserve special files
 -D                          same as --devices --specials
 -t, --times                 preserve modification times
 -O, --omit-dir-times        omit directories from --times
 -J, --omit-link-times       omit symlinks from --times
     --super                 receiver attempts super-user activities
     --fake-super            store/recover privileged attrs using xattrs
 -S, --sparse                turn sequences of nulls into sparse blocks
     --preallocate           allocate dest files before writing them
 -n, --dry-run               perform a trial run with no changes made
 -W, --whole-file            copy files whole (without delta-xfer algorithm)
     --checksum-choice=STR   choose the checksum algorithms
 -x, --one-file-system       don't cross filesystem boundaries
 -B, --block-size=SIZE       force a fixed checksum block-size
 -e, --rsh=COMMAND           specify the remote shell to use
     --rsync-path=PROGRAM    specify the rsync to run on the remote machine
     --existing              skip creating new files on receiver
     --ignore-existing       skip updating files that already exist on receiver
     --remove-source-files   sender removes synchronized files (non-dirs)
     --del                   an alias for --delete-during
     --delete                delete extraneous files from destination dirs
     --delete-before         receiver deletes before transfer, not during
     --delete-during         receiver deletes during the transfer
     --delete-delay          find deletions during, delete after
     --delete-after          receiver deletes after transfer, not during
     --delete-excluded       also delete excluded files from destination dirs
     --ignore-missing-args   ignore missing source args without error
     --delete-missing-args   delete missing source args from destination
     --ignore-errors         delete even if there are I/O errors
     --force                 force deletion of directories even if not empty
     --max-delete=NUM        don't delete more than NUM files
     --max-size=SIZE         don't transfer any file larger than SIZE
     --min-size=SIZE         don't transfer any file smaller than SIZE
     --partial               keep partially transferred files
     --partial-dir=DIR       put a partially transferred file into DIR
     --delay-updates         put all updated files into place at transfer's end
 -m, --prune-empty-dirs      prune empty directory chains from the file-list
     --numeric-ids           don't map uid/gid values by user/group name
     --usermap=STRING        custom username mapping
     --groupmap=STRING       custom groupname mapping
     --chown=USER:GROUP      simple username/groupname mapping
     --timeout=SECONDS       set I/O timeout in seconds
     --contimeout=SECONDS    set daemon connection timeout in seconds
 -I, --ignore-times          don't skip files that match in size and mod-time
 -M, --remote-option=OPTION  send OPTION to the remote side only
     --size-only             skip files that match in size
 -@, --modify-window=NUM     set the accuracy for mod-time comparisons
 -T, --temp-dir=DIR          create temporary files in directory DIR
 -y, --fuzzy                 find similar file for basis if no dest file
     --compare-dest=DIR      also compare destination files relative to DIR
     --copy-dest=DIR         ... and include copies of unchanged files
     --link-dest=DIR         hardlink to files in DIR when unchanged
 -z, --compress              compress file data during the transfer
     --compress-level=NUM    explicitly set compression level
     --skip-compress=LIST    skip compressing files with a suffix in LIST
 -C, --cvs-exclude           auto-ignore files the same way CVS does
 -f, --filter=RULE           add a file-filtering RULE
 -F                          same as --filter='dir-merge /.rsync-filter'
                             repeated: --filter='- .rsync-filter'
     --exclude=PATTERN       exclude files matching PATTERN
     --exclude-from=FILE     read exclude patterns from FILE
     --include=PATTERN       don't exclude files matching PATTERN
     --include-from=FILE     read include patterns from FILE
     --files-from=FILE       read list of source-file names from FILE
 -0, --from0                 all *-from/filter files are delimited by 0s
 -s, --protect-args          no space-splitting; only wildcard special-chars
     --address=ADDRESS       bind address for outgoing socket to daemon
     --port=PORT             specify double-colon alternate port number
     --sockopts=OPTIONS      specify custom TCP options
     --blocking-io           use blocking I/O for the remote shell
     --stats                 give some file-transfer stats
 -8, --8-bit-output          leave high-bit chars unescaped in output
 -h, --human-readable        output numbers in a human-readable format
     --progress              show progress during transfer
 -P                          same as --partial --progress
 -i, --itemize-changes       output a change-summary for all updates
     --out-format=FORMAT     output updates using the specified FORMAT
     --log-file=FILE         log what we're doing to the specified FILE
     --log-file-format=FMT   log updates using the specified FMT
     --password-file=FILE    read daemon-access password from FILE
     --list-only             list the files instead of copying them
     --bwlimit=RATE          limit socket I/O bandwidth
     --stop-at=y-m-dTh:m     Stop rsync at year-month-dayThour:minute
     --time-limit=MINS       Stop rsync after MINS minutes have elapsed
     --outbuf=N|L|B          set output buffering to None, Line, or Block
     --write-batch=FILE      write a batched update to FILE
     --only-write-batch=FILE like --write-batch but w/o updating destination
     --read-batch=FILE       read a batched update from FILE
     --protocol=NUM          force an older protocol version to be used
     --iconv=CONVERT_SPEC    request charset conversion of filenames
     --checksum-seed=NUM     set block/file checksum seed (advanced)
     --noatime               do not alter atime when opening source files
 -4, --ipv4                  prefer IPv4
 -6, --ipv6                  prefer IPv6
     --version               print version number
(-h) --help                  show this help (-h is --help only if used alone)

Use "rsync --daemon --help" to see the daemon-mode command-line options.
Please see the rsync(1) and rsyncd.conf(5) man pages for full documentation.
See http://rsync.samba.org/ for updates, bug reports, and answers

バックアップ実行コマンドと定期実行

バックアップコマンド(rsyncコマンド)

sudo rsync -aEv --delete-during --exclude-from=/rsync-exclude.txt / /mnt/synology/raspberry_backup/ --log-file=/home/rsync.log

crontabを編集

以下のcronジョブを登録します。
午前3時にrysyncコマンドを実行するように登録しました。
「sudo crontab -e」で編集します。

@raspberrypi:~ $ sudo crontab -e
0 3 * * * sudo rsync -a --delete-during --exclude-from=/rsync-exclude.txt / /mnt/synology/raspberry_backup/ --log-file=/home/rsync.log

[参考]cron コマンド

crontabファイルで、cron コマンドの実行を記述する行は、6つのフィールドで形成されています。(システムの crontabファイル(/etc/crontab)は、7つ(分、時、日、月、曜日、ユーザ名、コマンド))、コマンドの実行時間をさまざまな形式で指定することが出来ます。
初めてcrontabファイルを編集した場合には、何も書かれていませんので、以下のフォーマットで記述します。また、各フィールドでは、 '*' を使用することが可能です。

 分 時 日 月 曜日 コマンド
0~59
0~23
1~31
1~12 or jan~dec
曜日0~7 [0,7は日曜日] or sun~sat
コマンド有効なコマンドを記述します。空白を含むことも可能ですが、標準のBourne Shellの書式に従って記述します。

 

参考URL

Raspberry Piから外部ボリューム(NASをNFSマウント)利用

Raspberry Piからも信頼性の高いボリュームを利用したい、より大きなサイズのボリュームを利用したい、Raspberry Piの内容を外部にバックアップしたいなど、外部NASを利用したい利用シーンはたくさんあると思います。
今回は、WEBサーバなど各種サーバー機能のメインマシンであるSynologyのボリュームをNFSマウントし、利用する方法を記事にしておきます。

SynologyでNFS利用に向けた設定

SynologyでNFSを利用可能にする設定

「コントロールパネル」「ファイルサービス」「SMB/AFP/NFS」タブの「NFS」セッションの「NFSを有効にする」にチェックを入れて下さい。チェック後は、「適応」ボタンを押し、設定を反映して下さい。

SynologyでNFS利用設定1

共有フォルダにNFS権限付与

Synologyで作成した共有フォルダに対して、NFS権限の付与を行います。
「コントロールパネル」「共有フォルダ」対象の共有フォルダを選択して「編集」、「NFS権限」「編集」でNFSルールを指定します。
以下の例では、Raspberry Pi1台向け(IPアドレス:192.168.0.200)にNFS権限を付与しています。

SynologyでNFS利用設定2

共有フォルダのNFS権限画面に表示されている「マウントパス」は、実際のマウント時に必要となるので、内容のメモをお願いします。
マウント時のパス:<Synology_IPアドレス>:<マウントパス>
192.168.0.100:/volume1/raspberry

SynologyでNFS利用設定3

Raspberry PiからNASボリュームMount

Raspberry PiからmountコマンドでNASボリュームをNFSマウント

@raspberrypi:~ $ sudo apt-get install nfs-common
[sudo] password for:
nfs-common is already the newest version (1:1.3.4-2.5).
0 upgraded, 0 newly installed, 0 to remove and 26 not upgraded.

@raspberrypi:~ $ sudo showmount -e 192.168.0.100
Export list for 192.168.0.100:
/volume1/raspberry 192.168.0.200

@raspberrypi:~ $ sudo mkdir /mnt/synology

@raspberrypi:~ $ sudo mount -t nfs 192.168.0.100:/volume1/raspberry /mnt/synology

Raspberry Pi起動・再起動時のNFS自動マウント

/etc/fstabにNFSボリュームのマウント情報を記載

@raspberrypi:~ $ cat /etc/fstab
proc /proc proc defaults 0 0
/dev/mmcblk0p6 /boot vfat defaults 0 2
/dev/mmcblk0p7 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
192.168.0.100:/volume1/raspberry /mnt/synology nfs defaults,_netdev 0 0

Raspberry PiのBootオプション変更(NASマウントタイミング変更)

Raspberry PiのBoot Option「Wait for Network at Boot Choose whether to wait for network」を変更します。「raspi-config」を用いて、設定を行います。

@raspberrypi:~ $ sudo raspi-config
  1. 3 Boot Options Configure options for start-up を選択
  2. B2 Wait for Network at Boot Chose whether to wait for network connection を選択
  3. <Yes> を選択
  4. <Ok> を選択

/etc/rc.localに3秒Sleep後マウント

上記の設定後も、起動・再起動時の自動マウントが実行されませんでした。
シスログ(/var/log/syslog)を確認したところ、やはり起動時のマウント時にNASへのネットワークマウントが失敗しておりました。
mount.nfs: Network is unreachable

Jul 9 06:36:22 raspberrypi rpc.mountd[473]: Version 1.3.3 starting
Jul 9 06:36:23 raspberrypi mount[489]: mount.nfs: Network is unreachable
Jul 9 06:36:23 raspberrypi systemd[1]: mnt-synology.mount: Mount process exited, code=exited, status=32/n/a
Jul 9 06:36:23 raspberrypi systemd[1]: mnt-synology.mount: Failed with result 'exit-code'.
Jul 9 06:36:23 raspberrypi systemd[1]: Failed to mount /mnt/synology.

よって、/etc/rc.localに3秒のスリープとマウントコマンドを追加しました。
sleep 3
sudo mount -t nfs 192.168.0.100:/volume1/raspberry /mnt/synology

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

#After Sleep 3, then execute a mount command
sleep 3
sudo mount -t nfs 192.168.0.100:/volume1/raspberry /mnt/synology

exit 0

その他ブートシーケンスに関係すると
(/etc/rc.localにスリープおよびマウントを入れた際には試す必要ないです)

systemd-networkd-wait-onlineを利用し、確実にネットワークの起動後にサービスを起動が出来るようにwaitが入るようです。
systemd-networkdとsystemd-networkd-wait-onlineをenableにします。

@raspberrypi:~ $ sudo systemctl enable systemd-networkd
Created symlink /etc/systemd/system/dbus-org.freedesktop.network1.service → /lib/systemd/system/systemd-networkd.service.
Created symlink /etc/systemd/system/multi-user.target.wants/systemd-networkd.service → /lib/systemd/system/systemd-networkd.service.
Created symlink /etc/systemd/system/sockets.target.wants/systemd-networkd.socket → /lib/systemd/system/systemd-networkd.socket.
Created symlink /etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service → /lib/systemd/system/systemd-networkd-wait-online.service.
@raspberrypi:~ $ sudo systemctl enable systemd-networkd-wait-online