Synology NAS NFS/SCP転送したメディアファイルの自動インデックス化

メディアサーバー機能

Synology NAS にはメディアサーバー機能が提供されており、NAS に保存した音楽、動画、画像データを DLNA/UPnP 対応デバイスや Synology 提供マルチメディア アプリケーションから閲覧や再生をすることができます。

DLNA/UPnP 対応デバイスとは、古くは Sony PlayStation 3、今ではネット接続できるTVやゲーム機、BDプレイヤー等の DLNA/UPnP クライアント機能が搭載されているデバイスです。

メディアファイルのインデックス化

メディアサーバーを介してメディアファイルを参照するためには、 まずメディアサーバー に対象ファイルを認識させる必要があり、この処理をインデックス化といいます。

通常、インデックス化対象の共有フォルダに対して、PC や Synology 提供マルチメディアアプリケーション(例:DS photo からの写真アップロード)からメディアファイルを格納した場合は自動的にインデックス化が行われます。

ただし、NFS または SCP によるファイル転送、SSH/Telnet 接続によるファイル操作、NAS 内で動作するアプリケーションによるファイル操作( 例:Dockerコンテナにmountした共有フォルダ内のファイル操作 )ではインデックス化が行われません。

管理画面の操作

このため、オンラインマニュアルではインデックス化の手段として、管理ソフト「DiskStation Manager」(以降、DSM)にて

[コントロール パネル] > [サービスにインデックスを付けています] > [メディアインデックス付け]  >  [再インデックス] の実行

の手動操作が案内されています。

NFS または SCP プロトコルでインデックス化したフォルダに追加したメディア ファイルは、自動的にスキャンされません。 そのようなファイルインデックス化を行うには、[再インデックス]をクリックします。

DiskStation Manager – メディアインデックス付け > マルチメディア ファイルの再インデックス化方法:

synoindex コマンド

DSMの操作以外に、 SSH/Telnet 接続によるターミナル操作からも再インデックスを実行できます。

インデックスを操作するコマンドとして synoindex コマンドが提供されています。コマンドの各種オプションは「-h」オプションで確認できます。

$ /usr/syno/bin/synoindex -h
Usage:
synoindex [OPTIONS]

Index Options:
    -h, --help
        this help text
    -A dirpath
        add a dir
    -a filepath
        add a file
    -D dirpath
        delete a dir
    -d filepath
        delete a file
    -N new_dirpath old_dirpath
        rename a dir
    -n new_filepath old_filepath
        rename a file
    -R [all|media|photo|music|video|thumb|dirpath]
        all:     reindex all dirpath that registered in each package
        media:   reindex dirpath that registered in MediaIndex package
        photo:   reindex photo dirpath
        music:   reindex music dirpath
        video:   reindex video dirpath
        thumb:   check converted video of each video file
        dirpath: reindex this specific dirpath
    -R user:{user_name}
        reindex personal photo dirpath
    -R share:{share_name}
        reindex share dirpath
    -R [type_music|type_video|type_photo]
        reindex dirpath that registered with specific type in MediaIndex

Package Index Options:
    -P [MediaIndex|{package_name}] {index_option}
        index operation only apply on this package
    -p [MediaIndex|{package_name}] {index_option}
        index operation apply all packages except for this package

File Index Options:
    -f {index_option}
        index operation apply on file index
    -U photo
        update photo images
  • 「-R [all|media|photo|music|video|thumb|dirpath]」は再インデックス
  • 「-a filepath」はインデックスにファイル追加
  • 「-n new_filepath old_filepath」はインデックス済みファイルのパス変更

メディアファイルが既にインデックス化されているかの確認手段として 「-g filename -t [video|music|photo|playlist]」オプションがDSM旧バージョンの synoindex では提供されていましたが 、現在はオプションが廃止されています。当オプションを説明しているサイトまたは使用しているシェルスクリプトは現在の仕様を考慮されていない可能性がありますのでご注意ください。

インデックス化が行われないファイル操作でもインデックスに反映させる対策として、DSMのタスクスケジューラから

  • synoindex -R video
  • synoindex -R music
  • synoindex -R photo

のコマンドを定期実行することにより、メディアファイルの自動インデックス化を実現する方法が考えらます。しかし「-R」オプションはインデックスの作り直しが行われるので処理負荷や処理時間の弊害があります。

ベストプラクティス:Synoindex Watcher の導入

公開サイト:Synoindex Watcher – Automated media index updates

有志が作成している自動メディアインデックス更新ツールです。

前述の Synology が提供するインテックス操作と異なり、どのような手段からのファイル操作でもリアルタイムにインデックスが自動更新されます。

アプリケーションは Python で書かれており、Linuxカーネルの inotify を用いてインデックス化対象の共有フォルダを監視し、変更を検知する度に synoindex が適切に実行されます。

インストール方法

公開サイト( 2020/2/16時点 )のインストール説明を参照し、作業を実施しています。

1.準備作業

  • パッケージセンターでPython3をインストール
  • configファイル、ログファイルの格納先を決めておく(以降の説明では、共有フォルダ「extensions」( volume1 配下)、サブディレクトリ「 scripts/synoindexwatcher 」を作成した環境)

2.コマンド実行

$ wget https://bootstrap.pypa.io/get-pip.py -qO - | sudo python
$ sudo python -m pip install --upgrade synoindexwatcher
$ python -m synoindexwatcher --generate-config | sudo tee /volume1/extensions/scripts/synoindexwatcher/synoindexwatcher.conf

3.設定ファイル更新

/volume1/extensions/scripts/synoindexwatcher/synoindexwatcher.conf

[GLOBAL]
blacklist=^\.|^\@|\.tmp$
whitelist=
logfile=/volume1/extensions/scripts/synoindexwatcher/synoindexwatcher.log ←デフォルトは/var/log/synoindexwatcher.log
loglevel=INFO ←動作確認時はDEBUGで

[/volume1/music] ←必要に応じて

[/volume1/photo]

[/volume1/video]

4.起動時実行設定

当方の環境では init-script を自動生成する「–generate-init」オプションが正常に動作しませんでした。

$ python -m synoindexwatcher --generate-init --config=/volume1/extensions/scripts/synoindexwatcher/synoindexwatcher.conf | sudo tee /usr/local/etc/rc.d/S99synoindexwatcher.sh
ERROR:root:An uncaught exception occurred
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/synoindexwatcher/__main__.py", line 218, in <module>
    start()
  File "/usr/lib/python2.7/site-packages/synoindexwatcher/__main__.py", line 157, in start
    print(files.generateInit(sys.argv))
  File "/usr/lib/python2.7/site-packages/synoindexwatcher/files.py", line 35, in generateInit
    args.remove("--rebuild-index")
ValueError: list.remove(x): x not in list

このため、DSMのタスクスケジューラに synoindexwatcher を登録し、ブートアップ時に自動起動しています。

[コントロール パネル] > [タスクスケジューラー]  >  [作成] – [トリガーされたタスク] – [ユーザー指定のスクリプト]

トリガーされたタスク > ユーザー指定のスクリプト

  • タスク:synoindexwatcher (任意)
  • ユーザー:root
  • イベント:ブートアップ
  • ユーザー指定のスクリプト: python -m synoindexwatcher –config=/volume1/extensions/scripts/synoindexwatcher/synoindexwatcher.conf