rekordboxのデータベース+楽曲ファイルを高速に同期する(Windows)

paypayガチャやりたくて昔から欲しかったDJコントローラ買うか~~と思い立ちビックカメラへいったものの、そもそも売り場が無かったのでガチャできませんでした。その後、DJコントローラ買う気満々の気分になってしまったのでamazonDDJ-400買いました(アホ)。
どこかの現場でDJプレイするわけではないのですが、手元にあるノートPCでも楽曲データの同期を取れるようにしたメモです。

目的

やりたいこと

f:id:moccai:20190203205411p:plain

  • メインPCでQUE打ち、プレイリスト管理を行う
  • 外付けドライブ上のデータを直接編集しない。*1
  • メインPCで行った作業をサブPCへ引き継ぐ
    • サブPCで実施した情報のメインPCへの同期(以下、逆同期)は考えない
  • サブPCへの同期はrekordbox DB*2、楽曲ファイルを引き継ぐ
  • rekordboxの設定ファイルは同期対象外

公式で記載されている同期方式

forums.pioneerdj.com

公式記載の方式で同期を行う場合、サブPCへの同期には以下の手順を実施する。

  1. メインPC側でのバックアップ(rekordbox機能)
  2. メインPCからサブPCへのファイルコピー(OS機能)
  3. サブPC側でのリストア(rekordbox機能)

バックアップ処理はrekordbox DBや楽曲ファイルの容量にもよるが全量バックアップとなるためかなりの時間がかかる。
→本稿はこの処理を短縮するのが目的です。

全体構成

上記を実現するための構成

ハードウェア構成

  • メインPC
  • サブPC
  • 外付けドライブ

サブPCのディスク容量の関係上、今回は外付けSSD(これを買った)にrekordbox DB、楽曲ファイルをコピーする。

ソフトウェア構成

f:id:moccai:20190203210553p:plain

  • WindowsOS上で稼動するrekordbox ver5.4.2
  • メインPC上の楽曲ファイルはPC内のファイルをインポート(ネットワーク共有されたファイルではない)
  • rekordbox DB、楽曲ファイルを外付けドライブへの差分コピー対象とする
  • 外付けドライブからサブPCへのファイルコピーは実施しない
  • サブPCは外付けドライブ上のrekordbox DB、楽曲ファイルを参照する

ディレクトリ構成

当方の環境では以下のディレクトリ設定としています。各自読み替えて下さい。

  • メインPC
    • rekordbox DB: I:\
    • rekordbox xml : I:\PIONEER\rekordbox\rekordbox.xml
    • 楽曲ファイル:I:\My Documents\マイミュージック
  • サブPC(G:\ は外付けドライブ)
    • rekordbox DB : G:\
    • rekordbox xml : G:\PIONEER\rekordbox\rekordbox.xml
    • 楽曲ファイル:G:\My Documents\マイミュージック

実装方式

【メインPC】rekordbox xmlの保存場所変更

「rekordbox.xml」というファイルは実在しておらず、なぜ参照しているのか全く意味が分からないですが、不都合があっても困るのでとりあえず場所を変えます。*3
変更先としては、rekordbox DBの格納されているディレクト*4と同じ所にすると同期の手間が省けます。

以下の設定値を変更する

  • 環境設定>詳細>データベース>rekordbox xml>インポートされているライブラリ
    • デフォルト値:C:\Users\\AppData\Roaming\Pioneer\rekordbox\rekordbox.xml
    • 変更後:I:\PIONEER\rekordbox\rekordbox.xml

またAppData内のファイルを変更後の場所へコピーします。

  • コピー元:C:\Users\\AppData\Roaming\Pioneer\rekordbox\
  • コピー先:I:\PIONEER\rekordbox\

【メインPC】rekordboxデータベースの保存先変更

楽曲ファイルが保存されているドライブと同じ場所にデータベース保存場所を変更します。

以下の設定値を変更する

  • 環境設定>詳細>データベース>データベースの管理>ドライブを選択
    • デフォルト値:C:
    • 変更後:I: ※楽曲データが保存されているドライブを選択する

【メインPC】ファイルの同期

以下のディレクトリを同期対象とします。

  • コピー元(メインPC)
    • rekordbox DB: I:\PIONEER
    • 楽曲ファイル:I:\My Documents\マイミュージック
  • コピー先(G:\ に外付けドライブをマウント)
    • rekordbox DB: G:\PIONEER
    • 楽曲ファイル:G:\My Documents\マイミュージック

差分同期にはrobocopyを利用し、以下のオプションを利用します。

/MIR ディレクトリ ツリーをミラー化します (/E および /PURGE と同等)
/COPYALL ファイル情報をすべてコピーします
/R:5 リトライ回数
/W:5 リトライ時待ち時間

コマンド的にはこんな感じです。
適当な.batで保存して管理者権限でコマンドプロンプトを立ち上げ、実行します。

robocopy "I:\PIONEER" "G:\PIONEER" /MIR /COPYALL /R:5 /W:5
robocopy "I:\My Documents\マイミュージック" "G:\My Documents\マイミュージック" /MIR /COPYALL /R:5 /W:5 

【サブPC】rekordbox xmlの保存場所変更

ファイルが存在しなくても設定値としては変更できるので、とりあえず変更しておきます。

以下の設定値を変更する

  • 環境設定>詳細>データベース>rekordbox xml>インポートされているライブラリ
    • デフォルト値:C:\Users\\AppData\Roaming\Pioneer\rekordbox\rekordbox.xml
    • 変更後:I:\PIONEER\rekordbox\rekordbox.xml

【サブPC】rekordboxデータベースの保存先変更

同期が完了した外付けドライブをメインPCから取り外し、サブPCへ接続します。
rekordbox DBは外付けドライブへコピーしているため、サブPCから外付けドライブ上のDBファイルを参照するように変更します。

以下の設定値を変更する

  • 環境設定>詳細>データベース>rekordbox xml>インポートされているライブラリ
    • デフォルト値:C:\Users\\AppData\Roaming\Pioneer\rekordbox\rekordbox.xml
    • 変更後:I:\PIONEER\rekordbox\rekordbox.xml


以上でメインPC→サブPCへ同期できたはずです。

コピー時間について

初回同期(全量同期)

試験のために事前コピーしたのもあるのでスキップされてるファイルもあるが、181GB 11898ファイル で1時間半くらい。

  開始: Thu Jan 31 22:47:31 2019
  終了: Fri Feb 01 00:24:31 2019

                  合計     コピー済み      スキップ       不一致        失敗    Extras
   ディレクトリ:      1752      1361       391         0         0         0
     ファイル:     14864     11898      2966         0         0         0
      バイト: 181.422 g 141.564 g  39.857 g         0         0         0
       時刻:   1:36:59   1:36:51                       0:00:00   0:00:08

2回目以降(差分同期)

差分がない場合、14000ファイルが16秒で同期完了する

  開始: Fri Feb 01 07:28:06 2019
  終了: Fri Feb 01 07:28:22 2019

                  合計     コピー済み      スキップ       不一致        失敗    Extras
   ディレクトリ:      1752         0      1752         0         0         0
     ファイル:     14864         0     14864         0         0         0
      バイト: 181.422 g         0 181.422 g         0         0         0
       時刻:   0:00:16   0:00:00                       0:00:00   0:00:16

謝辞

差分同期というアイディアを考えて頂いたid:kg-null に感謝申し上げます。
kg-null.hatenablog.com

修正履歴

2019/02/08

robocopy で同期する際、コピー先のタイムスタンプがコピー元より新しくなっているとファイルコピーが行われないバグがあった。
下記オプションを除外した。

/XO 古いファイルを除外します

(おまけ)copy_all.bat

ログファイル出力付き。実行するbatファイルと同じフォルダに「log」ディレクトリを作って下さい。
管理者権限で実行してください。

cd /d %~dp0
@echo off

rem 差分同期するスクリプト

rem コピペ用
rem robocopy "<from>" "<to>" /MIR /COPYALL /R:5 /W:5 /log+:%logfile% /V /NP

rem 実行時刻取得
set yyyymmddhhmmss=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%

rem ログ出力先
set logfile=".\log\%yyyymmddhhmmss%_copyall.log"


rem 以下ファイルコピー
robocopy "I:\PIONEER" "G:\PIONEER" /MIR /COPYALL /R:5 /W:5 /LOG+:%logfile% /V /NP
robocopy "I:\My Documents\マイミュージック" "G:\My Documents\マイミュージック" /MIR /COPYALL /R:5 /W:5 /LOG+:%logfile% /V /NP

pause

*1:外付けドライブ上のデータが消失するとデータが全部飛ぶから無理

*2:プレイリストやCUE情報など

*3:datafile.edb を見るとAppData内を参照しているので、コピーしないと駄目そう…?よくわからない

*4:環境設定>詳細>データベース>データベースの管理 に記されているドライブ内にある「PIONEER」フォルダ