foltia+nasでバックアップを自動化する
foltia ANIME LOCKERの動画ファイルのバックアップ環境を作ります。
やりたいこととか
foltiaサーバーの動画ファイルをnasに自動バックアップする
foltiaサーバーにある動画ファイルを一定間隔で自動的にバックアップします。今回はmp4ファイルとtsファイルが対象です。nasに保存しておけば外出先でも参照できますし、NASがraidで冗長化されていれば動画ファイルの損失も防げます。
エンコード後のtsファイルは使い道がないので定期的に削除する
NASにバックアップ後、一定時間たったら削除していきます。放置するとあっという間に溜まってしまいます。
基本的にmp4ファイルを使うことはあってもエンコード後のtsファイルを残しておく事に特に意味は無いので、一定間隔で削除します。
これらの作業を手で行うのはめんどくさいので、自動化します。
また、当記事ではNASはDS216Jでの設定例を紹介します。多機能な上エントリーモデルなため安価ですし、おすすめです。
nasにバックアップ用ディレクトリを用意
私の場合、tsファイルとmp4ファイルをそれぞれバックアップするようにしています。
バックアップディレクトリのマウント設定
DS216Jの場合、NAS側のバックアップディレクトリに、NFS権限を許可しておく必要があります。
①「DSMメニュー」→「コントロールパネル」→「ファイルサービス」→「NFS」→「NFSを有効にする」にチェック
②「コントロールパネル」→「共有フォルダ」→目的の共有フォルダで右クリック、編集→「NFS権限」→「作成」
私の場合、192.168.79.51がfoltiaに当たるので、画像の一列目を設定します。(2列目の設定の意図は忘れた)
foltiaサーバーに対してマウント許可の設定をします。
foltiaからNAS側のディレクトリが見れるようにします。
foltia側でsshログインし、mkdirでバックアップ先のディレクトリと同名の以下ディレクトリを作成
1 2 |
/mnt/backup/mp4 /mnt/backup/ts |
下記コマンドでNASのディレクトリをマウント。
1 2 |
mount -t nfs -o rw 192.168.79.50:/volume1/video/capture/ts /mnt/backup/ts mount -t nfs -o rw 192.168.79.50:/volume1/video/capture/mp4 /mnt/backup/mp4 |
192.168.79.50はNASのIPアドレスで、/volume1/video/capture/tsはNAS側のビデオファイルの物理パスです。
あらかじめ確認しておいてください。検証してませんが、NASのRAIDの組み方によってはここのパスは変わってくると思います。
試しにNAS側のディレクトリにファイルか何か入れてみて、foltia側から覗いて反映されてれば成功。
ただし、このままではfoltiaを再起動するとマウントした設定がリセットされるので、設定ファイルに記憶させます。
su -でルートユーザーになります。
/etc/fstabをviで編集。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# # /etc/fstab # Created by anaconda on Wed May 30 15:49:47 2012 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # LABEL=foltiaroot / ext4 defaults 1 1 LABEL=foltiaboot /boot ext4 defaults 1 2 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 LABEL=foltiaswap none swap sw 0 0 LABEL=foltiaswap none swap sw 0 0 /dev/tank/tv /home/foltia/php/tv xfs rw,suid,dev,exec,auto,user,async,inode64 1 2 192.168.79.50:/volume1/video/capture/ts /mnt/backup/ts nfs defaults 0 0 192.168.79.50:/volume1/video/capture/mp4 /mnt/backup/mp4 nfs defaults 0 0 |
下2行を追記して保存。
試しに再起動してみてマウントが外れてないか確認。
これでfoltia -> NASへのマウントは終了です。
NASへのバックアップ設定
バックアップ用のコマンドをシェルにしておいて、cronで実行させます。
わかりやすく、用途別に用意します。
・ファイルを作成
1 2 3 4 |
touch /usr/local/bin/backup_anime_mp4.sh touch /usr/local/bin/backup_epg_mp4.sh touch /usr/local/bin/backup_keyword_mp4.sh touch /usr/local/bin/backup_ts.sh |
・実行権限を付与
1 2 3 4 |
chmod 755 backup_anime_mp4.sh chmod 755 backup_epg_mp4.sh chmod 755 backup_keyword_mp4.sh chmod 755 backup_ts.sh |
私の場合はそれぞれこんな感じです。
backup_anime_mp4.sh・・・アニメMP4用
1 2 3 4 5 |
#!/bin/sh rsync -avuR --copy-links --inplace /home/foltia/php/DLNAroot/02*/*/*/*/MP4-HD /mnt/backup/mp4/ exit 1 |
backup_epg_mp4.sh・・・epg録画MP4用
1 2 3 4 5 |
#!/bin/sh rsync -avuR --copy-links --inplace /home/foltia/php/DLNAroot/03*/*/*/MP4-HD /mnt/backup/mp4/ exit 1 |
backup_keyword_mp4.sh・・・キーワード録画MP4用
1 2 3 4 5 |
#!/bin/sh rsync -avuR --copy-links --inplace /home/foltia/php/DLNAroot/04*/*/*/*/MP4-HD /mnt/backup/mp4/ exit 1 |
backup_ts.sh・・・tsファイル用
1 2 3 4 5 |
#!/bin/sh rsync -avu --copy-links --inplace --exclude='*.MP4' /home/foltia/php/DLNAroot/01*/20*/*/ALL/ /mnt/backup/ts/ exit 1 |
ポイントとしては、-avuRのRフラグです。Rは再帰コピーを表していて、mp4ファイルの場合はディレクトリ構造ごとコピーするイメージです。
・tsファイル
・mp4ファイル
まぁ、運用の仕方によるんですが、私の場合はtsファイルは一時保存、mp4は永久保存というポリシーで運用しているので、tsファイルは1か所で集中管理、mp4ファイルはディレクトリ構造事コピーされたほうが管理的に都合がよいです。
後の記事になりますが、NAS側のtsファイルは一時的に保存してあとで消す運用を考えてます。
一応、それぞれのコマンドが正しく動くかどうかは確認しておいたほうがいいです。
各コマンドのフラグに「–dry-run 」を追加して空打ちできます。
1 |
rsync --dry-run -avu --copy-links --inplace --exclude='*.MP4' /home/foltia/php/DLNAroot/01*/20*/*/ALL/ /mnt/backup/ts/ |
バックアップタスクを日時で設定
一日1回、指定の時間になったらバックアップを始めるようにします。
crontab -e でcronを編集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# backup anime mp4 0 6 * * * sh /usr/local/bin/backup_anime_mp4.sh 2>>/var/log/cron-err.log # backup keyword mp4 10 6 * * * sh /usr/local/bin/backup_keyword_mp4.sh 2>>/var/log/cron-err.log # backup epg mp4 20 6 * * * sh /usr/local/bin/backup_epg_mp4.sh 2>>/var/log/cron-err.log # backup ts files 30 6 * * * sh /usr/local/bin/backup_ts.sh 2>>/var/log/cron-err.log # delete old ts files 0 7 * * * find /home/foltia/php/tv/ -name '*.m2t' -mtime +5 -delete 0 7 * * * find /home/foltia/php/DLNAroot/ -name '*.ts' -mtime +5 -delete |
10 6 * * *
のところが時間指定です。↑は毎日6:10分になったら実行する。という感じです。
録画中にもし実行したらどうなるのか?という懸念がありそうですが、おそらく、大丈夫です。
foltiaを運用してる人なら知ってると思いますが、foltiaは、録画及びエンコードが終わってから、
/home/foltia/php/tv/以下に録画方法及び番組毎に振り分けられたシンボリックリンクを作成します。
なので、中途半端に録画データがコピーされる、ということはないはず。
2>>/var/log/cron-err.log
一応、エラーがあったらログ吐くようにしてます。初めのうちはあったほうがいいかもしれません。
# delete old ts filesの箇所、これは、更新日が5日以上のtsファイルを探して
削除するというものです。tsファイルを残しておくとHDDを逼迫するので、削除するようにしています。
とりあえず今日はここまで。
最近のコメント