OsiriXを用いたPACSバックアップシステム(3)

さてあとはデータをまとめてBD-Rに書き出すだけである。WIindowsではBDドライブについてきたPowerBackupというソフトにスケジューラがあったのでこのスケジューラを利用して書き出しを行っていた。この点Macの方が簡単である。Cronで前エントリのディレクトリ切り替えを行いこれに引き続いて書き出し処理をすればいいだけだからだ。問題は…Windowsでもそうだったのだけど、コマンドラインでBD-Rに書き出す方法である。検索してみるとhdiutilというコマンドがあるらしい。これでディスクイメージの制作もできるのでディスクイメージの作成と焼き付けを行う。

もしこのメディアをMacでしか扱わないのであればdmg形式で作成すればよい。自動的に圧縮がかかるのでBDRをドライブに入れれば(反応はおそいものの)OsiriXでそのままアクセスできる。

ウチの場合、このメディアが必要になるときと言うのは何らかの原因でメインサーバが壊れたりストレージが消失した状況で、相当に混乱している可能性がある。なんだかんだといってもMacが多数転がっているわけではないので必ず読めることを優先してiso形式にした。またメディア不良で書き込みエラーの可能性もあるので手動作業でもできるように引数でデータベースディレクトリを選択できるようにした。圧縮にはzipを使っているがこの一時ファイルはすぐに削除。デイスク

#!/bin/csh
#引数処理ルーチン
switch ($#argv)
case 0:
set source="DICOM2"
echo "DICOM2 is the sourcefile"
breaksw

case 1:
switch ($1)
case 1:
set source ="DICOM"
breaksw
case 2:
set source="DICOM2"
breaksw
case 3: set source = "DICOM3"
breaksw
case 4:
set source = "DICOM4"
breaksw
case 5:
set source = "DICOM5"
breaksw
default :
set source = "DICOM2"
breaksw
endsw
breaksw
default :
set source="DICOM2"
breaksw
endsw

set workdirectory = "/Volumes/DATA"
cd $workdirectory
set currentdate = ` date +'%Y%m%d%H%M%S'`
set targetname = $currentdate".iso"
set targetzip = ${workdirectory}"/temp/"${currentdate}".zip"
if ( ! -d ./temp ) mkdir temp
set targettar = ${workdirectory}"/temp/"${targettar}
echo $targetzip "を作成します"
zip -qr9 $targetzip $source
##making iso image
hdiutil makehybrid -o $targetname temp -iso -udf -udf-volume-name $currentdate

set devicename = `hdiutil burn -list | grep "USB" | tail -n 1 | sed -e "s/^.//"`
echo $targetname "をBD-Rに書き込みます"
#echo "BD-Rは"$devicename"です”
#hdiutil burn -device "${devicename}" $targetname
drutil burn $targetname
echo "BD-R 書き込み終了しました。"

@ isonumber=`ls *.iso |wc -l `
echo "ISO file count=" $isonumber
ls -la *.iso
while ($isonumber >5)
set deletefilename = ` ls *.iso |sort | head -n 1`
echo "delete file name is " $deletefilename
rm $deletefilename
echo $deletefilename"を削除しました"
@ isonumber = $isonumber - 1
end
echo "テンポラリファイルを削除します"
rm -drf ./temp
drutil tray close

実際の焼き付けにはデバイス指定がhdiutilではかなり複雑なのだけどdrutilを使うと簡単なのでこちらを使うように変更した。

あとは2つのスクリプトをweeklyとでも名付けたスクリプトにまとめてcrontabに登録すればよい。