LVM - iSCSIターゲットの設計
今回は以下整理を行ってシステムの設計ポリシーをまとめてみました。
対象データ | データの重要性 | データサイズ | 失った場合の影響 | リスク対策 | 共有の必要性 |
---|---|---|---|---|---|
OS | 重大 | 中 | OSが起動しない | ミラー構成/バックアップ | なし |
録画データ編集 | 大 | 大 | 編集データのロスト | 再編集 | あり |
この情報を元に、LVMを利用してディスクの切り出しを行います。今回は物理4ディスクに空きがあったのでスライスを行い、PVを4個用意しました。ここから、OS用のディスクと録画データ編集用のディスクを切り出します。また、共有の必要性からIPによるACLの定義を考えます。今回はiSCSIのターゲットのソフトウェアはCentOSで標準で使えるtgtdを利用しました。
上記設計を元に作業を行います。
録画したtsファイルを編集するマシンを用意
PT2で録画したファイルがかなり溜まっています。そのため、マルチメディアコンテンツを扱いやすいWindows環境で録画データを編集することにします。また、編集した動画をエンコードする環境も用意します。エンコーディングを行っている最中でも録画データの編集が行えるように2ノードを用意します。
編集前のtsファイルは録画サーバからsambaを経由してsmbでファイル読み込みしますが、編集用のマシンとエンコーディングマシンとの間のデータのやり取りをどうするか考える必要があります。
今回は、上記のiSCSI bootを行うことを考えて録画データをiSCSIのディスクを経由してやりとりすることを考えます。ちょっとこのblogネタを書く前にWebを巡回したのですが、iSCSIに対して勘違いしている方がぽろぽろっといたので補足しておきます。
- iSCSIはあくまでネットワーク経由でSCSIのディスクを接続するプロトコルです。
- マシンAとマシンBで同時にSCSIディスクに接続できますが、共有ファイルシステムでない限り、書き込みファイルの内容は保証されません。一般的なファイルシステムには、ファイルキャッシュという機構があるためOS上でのディスクの書き込み=ディスクへの反映とはなりません。
- 残念ながら、NTFSは共有ファイルシステムではありません。そのような利用用途はファイルロックを担保しているSMB(CIFS)やNFSなどのNASを利用ください。
- SCSIには排他制御を行う機構があるのですが、Windows7君(多分XPなども)は「共有ディスクが使われている」と思っていなので排他制御を行いません。よってマシンAからもマシンBからも接続が可能になります。
Intel Gigabit CT Desktop Adapter iSCSI boot対応
Intelの廉価版NICに EXPI9301CT というのがあります。
![インテル Gigabit CT Desktop Adapter EXPI9301CT インテル Gigabit CT Desktop Adapter EXPI9301CT](https://images-fe.ssl-images-amazon.com/images/I/41UxYipp4FL._SL160_.jpg)
インテル Gigabit CT Desktop Adapter EXPI9301CT
- 出版社/メーカー: インテル
- 発売日: 2012/08/16
- メディア: Personal Computers
- 購入: 26人 クリック: 199回
- この商品を含むブログ (15件) を見る
iSCSIというのは、ネットワーク経由でSCSIプロトコルで通信をする規格でして、Ethernet経由でiSCSIのディスク(ターゲットと呼ばれる)にアクセスすることができます。ですのでiSCSIからbootすることができれば、PCから記録メディアを排除し、ネットワークに接続したストレージサーバに集約することができます。
NHK BS1/2の視聴
セットアップした録画環境でしばらく運用していたのですが、いくつか問題が出ました。その際の対応作業についてのメモを記載します。
NHK BS1/2の再生がおかしい
何も考えずに 録画した NHK BS1/2 を再生しても本来録画した番組が見れません。google先生にお伺いしたところ、BS1とBS2はデータ混在の状態で録画されちゃうのでts分割をしないといけないらしいのです。さらに調べたところ、tsファイルから必要なチャンネルの情報を分割する、「tsspliter_lite」というソフトウェアを作成した方がいらっしゃいました。
http://hp.vector.co.jp/authors/VA038175/
これをmakeし、出来上がった tsspliter_liteバイナリを /usr/local/bin にコピーしておきます。
do-recode.sh のカスタマイズ
上記処理はNHK BS1とNHK BS2のみに必要なので、分割も録画後に自動的二行うように以下のようにdo-recode.shをカスタマイズしました。
#!/bin/sh echo "CHANNEL : $CHANNEL" echo "DURATION: $DURATION" echo "OUTPUT : $OUTPUT" echo "TUNER : $TUNER" echo "TYPE : $TYPE" echo "MODE : $MODE" TMPDIR=/var/videoTemp*1 NOW=`/bin/date '+%Y%m%d%H%M%S'` TMPFILE=${TMPDIR}/${NOW}_${TYPE}_${CHANNEL}.ts RECORDER=/usr/local/bin/recpt1 TSSPLTITER=/usr/local/bin/tssplitter_lite NICE=/bin/nice IONICE=/usr/bin/ionice case $CHANNEL in 101|102) $RECORDER --b25 --strip $CHANNEL $DURATION ${TMPFILE} >/dev/null $NICE $IONICE -n 5 $TSSPLTITER ${TMPFILE} ${OUTPUT} ${CHANNEL} >/dev/null break ;; *) $RECORDER --b25 --strip $CHANNEL $DURATION ${OUTPUT} >/dev/null ;; esac
epgrecのセットアップ
録画予約のフロントエンドとしてepgrecを利用します。
epgrec 自体は phpで記載してあるので、Apache、PHPの用意が必要です。また、番組や録画情報はMySQLのDBで管理しているため、そちらのセットアップも必要になります。rpmを確認し、もし入っていないのであれば必要なrpmを追加する必要があります。
私の環境では、epgrecの導入以外に、録画したtsファイルを格納するためのストレージをrecVGから切り出す作業もありましたのでそちらの手順も記載しておきます。
録画データ置き場のファイルシステム
録画データを置く領域は、OSのファイルシステムのような「小さなファイルが大量」にあるのではなく、大規模なサイズのファイルが大量に置くことにになります。そのため、ex3fsではなく、そのほかのファイルシステムを利用することを検討しました。その結果、
- オンラインでのファイルサイズ拡張が容易
- 技術的に十分枯れている
という理由でxfsを利用することにしました。
xfsのインストール
yum を利用して、xfsのパッケージをインストールします。
以下、私の環境の情報。
$ rpm -aq | grep xfs kmod-xfs-0.4-2 xorg-x11-xfs-1.0.2-4*1 xfsdump-2.2.46-1.el5.centos xfsprogs-2.9.4-1.el5.centos xfsprogs-devel-2.9.4-1.el5.centos
mkfs.xfsコマンドを利用してxfsファイルシステムを作成します。
$ mkfs.xfs /dev/recVG/videoLV $ mkdir /var/www/epgrec/video $ mount -t xfs /dev/recVG/videoLV /var/www/epgrec/video $ mkdir /var/www/epgrec/video $ chown apache:apache /var/www/epgrec/video $ echo "/dev/recVG/videoLV /var/www/epgrec/video xfs defaults 1 2" >> /etc/fstab
/etc/fstabにエントリを記載し、起動時に自動マウントが行われるよう設定を行います。
$ cat /etc/fstab | grep xfs /dev/recVG/videoLV /var/www/epgrec/video xfs defaults 1 2
mysql設定
mysqlデータファイルのlvミラー実施
mysqlのデータの耐障害性を高めるためにLVミラーを実施しておきます。
$ lvcreate -m 1 -L 10G -n mysqlVL rootVG $ mke2fs -j /dev/rootVG/mysqlLV $ mount /dev/rootVG/mysqlLV /mnt $ cp -pr /var/lib/mysql/* /mnt $ mv /var/lib/mysql /var/lib/mysql.org $ mkdir /var/lib/mysql $ umount /mnt $ mount /dev/rootVG/mysqlLV /var/lib/mysql $ echo "/dev/rootVG/mysqlLV /var/lib/mysql ext3 defaults 1 2" >> /etc/fstab
以下、私の環境の確認結果
$cat /etc/fstab | grep mysql /dev/rootVG/mysqlLV /var/lib/mysql ext3 defaults 1 2 $ mount | grep mysql /dev/mapper/rootVG-mysqlLV on /var/lib/mysql type ext3 (rw)
databaseの追加作成
http://tadachi.txt-nifty.com/blog/2010/01/centos54epgepgr.html
の手順に従ってDB作成を行いました。
apache設定
httpd.confに 以下の設定を追加しておきました。
Options FollowSymLinks AllowOverride None Order allow,deny Allow from xxx.xxx.xxx localhost DirectoryIndex index.html index.html.var index.php
epgrecソフトウェアセットアップ
epgrecの配布ページ
http://www.mda.or.jp/epgrec/index.php/%E3%83%88%E3%83%83%E3%83%97%E3%83%9A%E3%83%BC%E3%82%B8
のドキュメントに従って作業を行っていきます。
- config.phpの編集
- 初回起動セットアップ
- do-recorde.shのセットアップ
PT2用のサンプルを do-record.sh にコピーします。
- getepgのcron.d登録
/etc/cron.d にgetepgをコピーします。コピー後、念のため cron.dのリロードを行います。
/var/log/messagesを見て、もしパーミッション関連のメッセージが出ていれば修正を行います。
ntpdセットアップ
epgrecでは、予約録画の実行をatコマンドを利用して実行しています。そのため、PCの時計がずれていると録画開始時間がずれてしまいます。PCの時計を正確な時間に合わせるため、ntpdのセットアップを必ず行っておきましょう。
次の日記d:id:tirol_choko:20100610に続く
PT2ドライバのインストール
PT2ドライバのセットアップは
http://tadachi.txt-nifty.com/blog/2010/01/centos54pt2-627.html
を参考に作業を行いました。しかし、CentOS5.5 だと若干手順が異なっていたり、録画ソフトの recpt1 のmake手順が異なりますので補足を記載します。
Mercurialの導入
PT2のドライバはwikipedia:Mercurialを利用しています。残念ながら、 2010/05/30 現在、CentOS5.5 の正規のレポジトリに Mercurialは存在しません。
そこでd:id:radio-keios:20080521
に記載されている手順でyum のレポジトリに rpmforgeを追加し、Mercurialの導入を行いましょう。
以下、yumでMercurialを検索した結果。
$ yum search mercurial Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * addons: www.ftp.ne.jp * base: www.ftp.ne.jp * extras: www.ftp.ne.jp * updates: www.ftp.ne.jp Warning: No matches found for: mercurial No Matches found $ yum --enablerepo=rpmforge search mercurial Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * addons: www.ftp.ne.jp * base: www.ftp.ne.jp * extras: www.ftp.ne.jp * rpmforge: apt.sw.be * updates: www.ftp.ne.jp rpmforge | 1.1 kB 00:00 ============================== Matched: mercurial ============================== mercurial.x86_64 : Fast lightweight source control management system mercurial-hgk.x86_64 : hgk GUI for mercurial tailor.noarch : Translate changesets between version control systems
PT2ドライバのインストール
http://tadachi.txt-nifty.com/blog/2010/01/centos54pt2-627.html
の手順に従って pt1_drv.ko を導入します。
以下、私の環境の確認情報。
$ lsmod | grep pt1 pt1_drv 66988 0
カードリーダーのセットアップ
pcs系のrpmはすべて正規のCentOSレポジトリに存在するので、perl-Gtk2のみrpmforgeからインストールを行います。
以下、私の環境の確認情報。
$ yum --enablerepo=rpmforge search perl-Gtk2 Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * addons: rsync.atworks.co.jp * base: rsync.atworks.co.jp * extras: rsync.atworks.co.jp * rpmforge: ftp-stud.fht-esslingen.de * updates: rsync.atworks.co.jp ============================== Matched: perl-Gtk2 ============================== perl-Gtk2.x86_64 : Perl interface to the 2.x series of the Gimp Toolkit library perl-Gtk2-Ex-Carp.noarch : Perl module implements GTK+ friendly die() and warn() : functions perl-Gtk2-Ex-FormFactory.noarch : Framework for Gtk2 perl applications perl-Gtk2-Ex-PodViewer.noarch : Perl module that implements a Gtk2 widget for : displaying Plain old Documentation (POD) perl-Gtk2-Ex-Simple-List.noarch : Perl module with bindings to Gtk2's complex : MVC list widget perl-Gtk2-Ex-Utils.noarch : Perl module that implements extra Gtk2 Utilities for : working with Gnome2/Gtk2 perl-Gtk2-GladeXML.x86_64 : Perl module to create user interfaces directly from : Glade XML files perl-Gtk2-ImageView.x86_64 : Perl bindings for the GtkImageView widget perl-Gtk2-Notify.x86_64 : Perl interface to libnotify perl-Gtk2-Sexy.x86_64 : Gtk2-Sexy module for perl perl-Gtk2-Spell.x86_64 : Perl module with bindings for GtkSpell with Gtk2 perl-Gtk2-TrayIcon.x86_64 : Interface to the EggTrayIcon library $ rpm -qa | grep perl-Gtk2 perl-Gtk2-1.162-1.el5.rf
録画ソフトウェア(recpt1)のインストール
手順では、r73のrecpt1を利用するに記載されていますが、その場合だと最新ドライバでBS/CSを録画する場合に問題が発生します。よって、最新のドライバに付属の recpt1 を導入します。
以下に、作業手順を手順メモを記載します。
- arib25ライブラリのインストール
$ hg clone http://hg.honeyplanet.jp/pt1/ PT2_old -r 73 $ cd PT2_old/arib25 $ make $ make install
- recpt1のインストール
autoconf を利用するので必要に応じてrpmをインストールしてください。
$ cd ../../PT2/recpt2 $ ./configure --enable-b25 $ make $ make install