GLAN TANK - DVD焼きマシン化

NASに動画ファイルを置くようにしても、保存しておきたいものはDVDに焼くことになる。でも、Windowsマシンにコピーして焼くのがとてもメドイ。
だから、直接NASから焼けるようにしたら・・・
実験のつもりでやってみたら意外と簡単にできてしまった。

USB接続DVDドライブを用意

LGのスーパーマルチドライブGSA-4163BをRatocのUSBドライブケースRS-U2EC5Xに入れた。
# とりあえずWindowsマシンからドライブを取ってしまったので、買いにいかなくちゃ。。

GLAN TANKに接続

GLAN TANK側は何もいじらずにとりあえず接続。
以下のように認識。

usb 3-1: new high speed USB device using ehci_hcd and address 2
Initializing USB Mass Storage driver...
scsi0 : SCSI emulation for USB Mass Storage devices
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
usb-storage: device found at 2
usb-storage: waiting for device to settle before scanning
Vendor: HL-DT-ST Model: DVDRAM GSA-4163B Rev: A103
Type: CD-ROM ANSI SCSI revision: 00
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 5
usb-storage: device scan complete

ツールをインストール

mkisofsとdvd+rw-toolsをインストール。

# apt-get install mkisofs dvd+rw-tools

DVD-Rを焼く

適当なディレクトリに焼きたいファイルを置いてmkisofsでISOイメージを作成。
-jcharsetでローカルマシンのファイルシステムで使用しているファイル名の文字コードを指定すれば自動的にUnicodeに変換してくれるらしい。

# mkisofs -r -J -joliet-long -jcharset EUC-JP-MS -o <ターゲットディレクトリ>

growisofs(dvd+rw-toolsに含まれる)でDVDに焼く。

# growisofs -Z /dev/sr0=

以上でok。
8倍速対応メディアで2枚ほど焼いてみたが、どちらも平均5.9倍速で焼けた。
ちょっと遅いが、十分実用的。

焼きスクリプト

特定のディレクトリにファイルを置いておけば、ISOイメージ作成・サイズチェック・焼き・ベリファイまで行ってくれるスクリプトを作成。
Samba経由でファイル移動・ファイル名の変更をして、スクリプトを実行するだけで焼ける。かなり便利。

#!/bin/sh

ISOFILE=/tmp/image.iso
TARGET=/share/dvd

check_error()
{
        if [ $1 != 0 ]; then
                echo "$2 error!!"
                exit 1
        fi
}

echo "Start mkisofs..."
mkisofs -r -J -joliet-long -jcharset EUC-JP-MS -o $ISOFILE $TARGET
check_error $? mkisofs

SIZE=`du -b $ISOFILE | awk '{ print $1 }'`
# (一般的なDVD-Rメディアのセクタ数 2,298,496) x 2,048 = 4,707,319,808
if [ $SIZE -ge 4707319808 ]; then
        echo "size BIG!!"
        exit 1
fi

echo "Start writing DVD..."
growisofs -Z /dev/sr0=$ISOFILE
check_error $? growisofs

mount /dev/sr0 /mnt/dvd
check_error $? mount

echo "Start verify..."
diff -r /mnt/dvd $TARGET
check_error $? diff

umount /mnt/dvd
check_error $? umount

rm $ISOFILE
check_error $? rm

exit 0