[Gentoo] パケットライト
偶然に見つけた HOWTO Packet Writing on CD-RW - Gentoo Linux Wikiに書いてある手順をほぼそのまま実行してみました.
まずはカーネルのコンパイルから.gentoo-dev-sources-2.6.10-r6 には既にパケットライト用のパッチが当たっているようなので,改めてカーネルにパッチを当てる必要はありませんでした.
Device Drivers ---->
Block Drivers ---->
<*> Packet writing on CD/DVD Media (EXPERIMENTAL)
(8) Freebuffers for data gathering
[ ] Enable write caching
File Systems ---->
CD-ROM/DVD Filesystems ---->
<*> UDF Filesystem Support
次はモジュールの設定を編集し,デバイスノードの作成を行います.
# vim /etc/modules.d/aliases alias block-major-97 pktcdvd # mknod /dev/pktcdvd0 b 97 0
udftools のインストールを.
# emerge udftools
2005 年 3 月 10 日現在にインストールされたバージョンは 1.0.0b-r4 で,パッチは不要でした.
fstab の編集も行います.現在使用しているカーネルは 2.6.10 で,HOWTO Packet Writing on CD-RW - Gentoo Linux Wiki には,%If you have a 2.6.8 kernel, the line above should be:
とあるので,次のように編集します.
# vim /etc/fstab /dev/pktcdvd/0 /mnt/cdrw udf noauto,noatime,rw,users 0 0 # mkdir /mnt/cdrw # chmod 0777 /mnt/cdrw
リブート後,DVD+RW のフォーマットを試みました.
cdrwtool -d /dev/cdroms/cdrom0 -q
using device /dev/cdroms/cdrom0
832KB internal buffer
setting write speed to 12x
Settings for /dev/cdroms/cdrom0:
Fixed packets, size 32
Mode-2 disc
I'm going to do a quick setup of /dev/cdroms/cdrom0. The disc is going to be blanked and formatted with one big track. All data on the device will be lost!! Press CTRL-C to cancel now.
ENTER to continue.
Initiating quick disc blank
wait_cmd: Input/output error
Command failed: a1 01 00 00 00 00 00 00 00 00 00 00 - sense 05.30.05
blank disc: Illegal seek
can't unlock door
何かエラーが出ますね... ドライブに突っ込んでいるのが DVD+RW だからでしょうか.良く考えてみれば,DVD+RW の場合,dvd+rw-format というコマンドがあるので,そちらを使ってフォーマットすればいいだけでしょう.
... もとい,今回使用した DVD+RW はフォーマット済みですので,このステップは無視することに.
/etc/conf.d/cdrw を次の内容で作成しました.
cdrw_list="/dev/cdroms/cdrom0"
同様に,/etc/init.d/cdrw を次の内容で作成しました.
#!/sbin/runscript
# Copyright 1999-2003 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License v2
# $Header: $
depend() {
need localmount
}
start() {
# Starting with kernel 2.6.8 there is a different syntax
# for the pktsetup program.
kernel_major=$(( `uname -r | cut -d'-' -f1 | cut -d'.' -f2` ))
kernel_minor=$(( `uname -r | cut -d'-' -f1 | cut -d'.' -f3` ))
local i
local minor=0
local retval=0
local last_result=0
if [ ! -e "/dev/pktcdvd" ]
then
/sbin/modprobe -a pktcdvd
fi
for i in ${cdrw_list}
do
ebegin "Enabling CD-RW packet writing on ${i}"
if [ ${kernel_major} -ge 6 ] && [ ${kernel_minor} -ge 8 ]
#then /usr/bin/pktsetup /dev/pktcdvd/${minor} ${i} >/dev/null 2>&1
then /usr/bin/pktsetup ${minor} ${i} >/dev/null 2>&1
#else /usr/bin/pktsetup /dev/pktcdvd${minor} ${i} >/dev/null 2>&1
else /usr/bin/pktsetup pktcdvd${minor} ${i} >/dev/null 2>&1
fi
if [ -b /dev/pktcdvd/${minor} ]
then last_result=0
else last_result=1
fi
retval=$(( ${retval} + ${last_result} ))
minor=$(( ${minor} + 1 ))
if [ ${last_result} -gt 0 ]
then
ewend ${last_result} "Failed to enable packet writing on ${i}"
fi
done
eend ${retval}
}
stop() {
# Starting with kernel 2.6.8 there is a different syntax
# for the pktsetup program.
kernel_major=$(( `uname -r | cut -d'-' -f1 | cut -d'.' -f2` ))
kernel_minor=$(( `uname -r | cut -d'-' -f1 | cut -d'.' -f3` ))
local i
local minor=0
local retval=0
local last_result=0
for i in ${cdrw_list}
do
ebegin "Disabling CD-RW packet writing on ${i}"
umount /dev/pktcdvd/${minor} >/dev/null 2>&1 || true
if [ ${kernel_major} -ge 6 ] && [ ${kernel_minor} -ge 8 ]
#then /usr/bin/pktsetup -d /dev/pktcdvd/${minor} >/dev/null 2>&1
then /usr/bin/pktsetup -d ${minor} >/dev/null 2>&1
#else /usr/bin/pktsetup -d /dev/pktcdvd${minor} >/dev/null 2>&1
else /usr/bin/pktsetup -d pktcdvd${minor} >/dev/null 2>&1
fi
if [ -b /dev/pktcdvd/${minor} ]
then last_result=1
else last_result=0
fi
retval=$(( ${retval} + ${last_result} ))
minor=$(( ${minor} + 1 ))
if [ ${last_result} -gt 0 ]
then
ewend ${last_result} "Failed to disable packet writing on ${i}"
fi
done
eend ${retval}
}
スクリプトを実行してみます.
# chmod 0755 /etc/init.d/cdrw
# /etc/init.d/cdrw start
* Enabling CD-RW packet writing on /dev/cdroms/cdrom0...
* Failed to enable packet writing on /dev/cdroms/cdrom0 [ !! ]
[ !! ]
うーむ,走りません.
試しに,最初に作ったブロックデバイススペシャルファイルを消去してみたところ,正常にスクリプトが起動しました.
# rm /dev/pktcdvd0 * Enabling CD-RW packet writing on /dev/cdroms/cdrom0... [ ok ]
デバイススペシャルファイルが自動作成されているので,major 番号を確認してみると...
# ls /dev/pktcdvd0 brw-rw---- 1 root root 254, 0 3月 10 11:33 /dev/pktcdvd0
97 じゃないじゃないですか.まあいいか.
ということで早速 DVD+RW のパケットライトを試してみます.
% mount /mnt/cdrw % touch /mnt/cdrw/hoge touch: cannot touch `hoge': 許可がありません % umount /mnt/cdrw
では,root ではどうでしょうか.
# mount /mnt/cdrw # touch /mnt/cdrw/hoge touch: cannot touch `/mnt/cdrw/hoge': 入力/出力エラーです
ぬぅ,まだまだ先は長いようです.
トラックバック
トラックバック URI: https://www.pakunet.jp/hoge/trackback/2005031001
トラックバックはありません.