paypayガチャやりたくて昔から欲しかったDJコントローラ買うか~~と思い立ちビックカメラへいったものの、そもそも売り場が無かったのでガチャできませんでした。その後、DJコントローラ買う気満々の気分になってしまったのでamazonでDDJ-400買いました(アホ)。
どこかの現場でDJプレイするわけではないのですが、手元にあるノートPCでも楽曲データの同期を取れるようにしたメモです。
目的
やりたいこと
公式で記載されている同期方式
公式記載の方式で同期を行う場合、サブPCへの同期には以下の手順を実施する。
- メインPC側でのバックアップ(rekordbox機能)
- メインPCからサブPCへのファイルコピー(OS機能)
- サブPC側でのリストア(rekordbox機能)
バックアップ処理はrekordbox DBや楽曲ファイルの容量にもよるが全量バックアップとなるためかなりの時間がかかる。
→本稿はこの処理を短縮するのが目的です。
全体構成
上記を実現するための構成
ソフトウェア構成
- WindowsOS上で稼動するrekordbox ver5.4.2
- メインPC上の楽曲ファイルはPC内のファイルをインポート(ネットワーク共有されたファイルではない)
- rekordbox DB、楽曲ファイルを外付けドライブへの差分コピー対象とする
- 外付けドライブからサブPCへのファイルコピーは実施しない
- サブPCは外付けドライブ上のrekordbox DB、楽曲ファイルを参照する
実装方式
【メインPC】rekordbox xmlの保存場所変更
「rekordbox.xml」というファイルは実在しておらず、なぜ参照しているのか全く意味が分からないですが、不都合があっても困るのでとりあえず場所を変えます。*3
変更先としては、rekordbox DBの格納されているディレクトリ*4と同じ所にすると同期の手間が省けます。
以下の設定値を変更する
- 環境設定>詳細>データベース>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データベースの保存先変更
同期が完了した外付けドライブをメインPCから取り外し、サブPCへ接続します。
rekordbox DBは外付けドライブへコピーしているため、サブPCから外付けドライブ上のDBファイルを参照するように変更します。
以下の設定値を変更する
- 環境設定>詳細>データベース>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