ということで、先日購入した ML110G7 上に、ESXi を入れて、DirectPath I/O を使って
今まで動いていた FreeBSD の zfs root の環境を載せて、さらに、クライアントとして、
Windows 7 でこれまた DirectPath I/O を使ってグラボをパススルーして、一台で二役を
させる方法がうまく動き出したので、後々の自分のためのメモ。うまくいくかどうかは
保証できません。猛犬注意。ぬれていて滑ります。
おうちサーバのストレージの容量が逼迫してきたのと、そろそろいくつかHDDが死に始めたのでこれを機にHDDを入れ替えることにした。
おうちサーバのメインの方は RAID Z2 なので、HDDが2台死んでもデータは保存されるので、6台あるHDDを、壊れるたびに 1.5TiBから3TiBのものに
入れ替えていって、ただいま最後のHDDがリビルド中なのである。これが終わると約10TiBの大きな保存庫が完成するのである。
という題名でいろいろいろ書こうと思ったが、結果的には何も面白いことはない。
とりあえず、
しののの - FreeBSD/BigSector HDD
http://homebsd.homeunix.net/~shino/pukiwiki/index.php?FreeBSD%2FBigSecto...
とか
FreeBSD(with ZFS)でWDのAFTなHDDを使う
http://d.hatena.ne.jp/nawolets/20100826/1282844451
を参考にさせていただきました。私のところには上記のページ以上のネタはありませぬ。
PT2 二本刺しで、テレビをがんがん録画しているのだが、例によって例のごとく、あまり見る暇がなくて、そのまま HDD の肥やしになっている。
あたりまえだが、HDD 資源は有限なので、そのうちあふれます。いくら zfs ででかい NAS 作ったとしても1時間当たり5GBものサイズではきついです。
ということで、生ts ファイルを適当に再圧縮して保存することにします。Windows 環境であればいろいろやり方があるのですが、今の時期、そのためだけに
windows 環境を常時起動させておくわけにはいきませんし、できれば自動的に変換かけてくれるとらくちんです。ということで、いろいろ調べて下記の
スクリプトに落ち着きました。
とりあえず、mp4box と ffmpeg を使えるようにしてください。あと、x264も使います。
#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
if [ ! -e $1.mp4 ] ; then
touch $1.mp4
TEMPFILE=`mktemp encXXXXXXXX` || exit 1
ln -s $1 ${TEMPFILE}.ts
ffmpeg -i ${TEMPFILE}.ts -acodec copy ${TEMPFILE}.aac
ffmpeg -i ${TEMPFILE}.ts -threads 4 -deinterlace -s hd720 -aspect 16:9 -r 29.97 -vcodec libx264 -g 300 -b 1600000 -f h264 ${TEMPFILE}.264
mp4box -fps 29.97 -add ${TEMPFILE}.264 ${TEMPFILE}.mp4
mp4box -add ${TEMPFILE}.aac ${TEMPFILE}.mp4
mv -v ${TEMPFILE}.mp4 $1.mp4
rm ${TEMPFILE}.ts ${TEMPFILE}.wav ${TEMPFILE}.aac ${TEMPFILE}.264 ${TEMPFILE}
else
echo "skpping $1"
fi
で、うちの環境では録画ファイルに日付が入るようにしていますので、 cron で毎晩23時に前日の録画を自動的にエンコードするようにしています。
追記:2011-11-26
いろいろ試行錯誤して、現在はこんな形に。
#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin:$HOME/bin
if [ -e /tmp/stop_enc ] ;then
exit
fi
if [ ! -e "$1.m4v" ] ; then
touch "$1.m4v"
TEMPFILE=`mktemp encXXXXXXXX` || exit 1
ln -s "$1" ${TEMPFILE}.ts
ffmpeg -i ${TEMPFILE}.ts -acodec copy -absf aac_adtstoasc -threads 0 -deinterlace -s hd720 -aspect 16:9 -r 29.97 -vcodec libx264 -g 300 -b 1600000 -f mp4 ${TEMPFILE}.m4v
mv -v ${TEMPFILE}.m4v "$1.m4v"
rm ${TEMPFILE}*
else
echo "skpping $1"
fi
/tmp/stop_enc というダミーファイルを作っておくと、エンコードをやめます。
深夜にバッチで、
ls ~/TVrec/`/bin/date -v-1d +%Y-%m-%d`*.ts | sed 's/^/ts2mp4.sh "/g' | sed 's/$/"/g' | sh
みたいなことをやって流しているので、朝まで終わらなかったら適当なところできるためにこんな仕掛けを入れています。
ときどきうまく変換できなかったり、MXみたいに複数ストリームが含まれている場合は、事前に TsSplitter.exe を -SEP オプションつけて wine 上で動かして分割してから処理しています。
あとはサーバにPT2突っ込んで録画も FreeBSD 鯖で行えるようにしたいけど、いつになることやら。
昨年末に PT2 を入手して、今まで friio 二台体制だった地デジ録画環境を更新した。
おかげで正月は映画の録画をしまくりである。特番とかもばしばし録った。
で、当然のことながら、HDDが逼迫するのであーる。
その上、その録画した番組を消費する時間がないのであーる。
ということで、もう使っていないモニタをアームで設置して、サブマシン(ストレージサーバともいう)にくっつけて、仕事中もテレビを流しっぱなしにすることにしたのであーる。
以前と違って、X の設定はとても簡単になったな。
/etc/X11/xorg.conf はこれだけ。
Section "ServerFlags"
Option "AllowEmptyInput" "off"
Option "AutoAddDevices" "false"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "XkbModel" "jp106"
Option "XkbLayout" "jp"
Option "XkbOptions" "ctrl:nocaps"
EndSection
モニタもオンボードのビデオも自動認識してくれて、よきにはからってくれた。
あとは mplayer でtsファイルを関連付けして、synergy 入れてメインマシンとキーボード/マウスを共有できるようにして、ほぼ設定完了。
音源はアフィのページでも紹介している「響音4」を差して、snd_uaudio.ko を
読み込んで終了。
すっげーらくちんになったなあ。
メインのモニタと色のかんじがちょっと違うので違和感があるのだが、まあ、こんなもんと割り切るしかないでしょう。
最近のPCのBIOS更新はWindows上やLinux上から実行することができて、非常にらくちんになっているのだが、うちにはWindowsもLinuxも入っていないマシンというのがある。そして、最近はUSB-DVDドライブでブートして、OSをインストールすることが多く、当然のことながらFDDなんつーものもついていなかったりする。
そこで、CD-ROM ブートするDOS環境を作って、そこからBIOSの更新をかけましょうというのが今回の趣旨です。
前提:
できるかぎり FreeBSD 環境で作りたい。
できるかぎり手間をかけたくない。
できるかぎり Free なソフトで作りたい。
ということで、FreeDOS を使うことに決定。そして、FreeDOS はブータブルなインストールCDがあるので、それに手を加えることにします。
用意するもの:
ネットワークにつながったFreeBSDマシン
1. FreeDOSのインストールCDのイメージを入手する。
http://www.freedos.org/ から、イメージを入手します。
ここでは、ブートさえしてくれればいいので、fdbasecd.isoを拾ってきます。もうひとつ、FDイメージも取得。
http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1....
2. 中のファイルを適当なディレクトリに解凍する。
$ mkdir tmp/freedos
$ sudo mdconfig -a -t vnode -f fdbasecd.iso -u 4
$ sudo mount -t cd9660 -o ro /dev/md4 /mnt/cdrom
$ cp -R /mnt/cdrom/* tmp/freedos
$ chmod -R +w tmp/freedos/*
$ sudo umount /mnt/cdrom
$ sudo mdconfig -d -u 4
3. ブートディスケットのイメージをマウントして書き換える。
$ sudo mdconfig -a -t vnode -f fdboot.img -u 4
$ sudo mount -t msdosfs /dev/md4 /mnt/fd
$ cd /mnt/fd
$ sudo rm -rf driver/ freedos/ fdconfig.sys
$ sudo cp ~/tmp/bios.exe /mnt/fd
この辺は適当に環境に合わせてください。
$ cd
$ sudo umount /mnt/fd
$ sudo mdconfig -d -u 4
4. 書き換えたイメージをコピーする。
このブートCDはisolinux を使っているため、tmp/freedos/isolinux/isolinux.cfg を覗くと、どこにブートイメージがあるか書いてある。
そのファイルをいま修正したイメージと置き換えます。
$ mv tmp/fboot.img tmp/freedos/isolinux/data/fdboot.img
5. 書き換えたファイルともどもisoファイルに変換する。
$ mkisofs -R -D -V "FreeDOS 1.0" -o freedos.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table tmp/freedos
ここで、出来上がったiso イメージをCD-Rに焼くまえに、エミュレータで確認しておきます。今回は VirtualBox 3 を使いました。別にVMWare でも QEMU でも何でもかまいません。VirtualBox を使ったのは FreeBSD の ports にあるから。
6. 適当なiso イメージが焼けるソフトでCD-Rに焼き付ける。
エミュレータで確認して、問題ないと思ったら、実際にCD-Rに焼き付けましょう。
$ sudo burncd -f /dev/acd0 -d data freedos.iso fixate
7. できあがり。。