2010年12月12日
1997年からはじめた身の回りのコンピュータ全体の日記コーナーです。
仕事でソフトウェア開発をやっているので、仕事も趣味もコンピュータです。 そんな生活の中で起こったことや気づいたことを紹介します。
毎日書いてるわけではないのですが、のらりくらりと続いています。
2025年 2024年 2023年 2022年
2021年 2020年 2019年 2014年 2013年
2012年 2011年 2009年 2008年 2007年
2006年 2005年 2004年 2003年 2002年
2001年 2000年 1999年 1998年 1997年
トップページへ戻る
昨年末にSONY の2TB レコーダBDZ-EX200を購入しました。
それまではSHARP の1TB レコーダ DV-ACW60を利用していたところ、 DLNAに対応してないことやHD解像度でファイルをメディアにコピーできないことや1T のHDDがあふれてきたことがありBDZ-EX200 を買い増ししました。
BDZ-EX200 は次のメリットもあり重宝しています。
録画したコンテンツはリビングのPS3 でゲームをしながらその待ち時間に消化しています。
- HDMIが2系統あること
- 1.5倍速の早見機能
- DLNA(DTCP-IP対応によるHD解像度コンテンツ対応)
- PSP等へのおでかけ転送機能
メインの42inch 液晶TV(SHARP LC-42RX1W)にはPS3 の画面を出し、 当初はPSPへ録画番組をおでかけ転送してPSPで再生していました。 ですがPSPへの転送は結構手間がかかるし、 画質が残念なこともあるため近いうちにノートPCを新調してDLNA でネットワーク再生しようと考えていました。
ところが調べているとDTCP-IPをデコードしてAVC圧縮のHD解像度 コンテンツを再生するためにはCore Duo 2GHz 程度のスペックが必要であること、 そのためにノートPCの選択肢がかなり狭くなることが判明しました。
特にスティックタイプのポインティングデバイスを装備した1Kg 以下のノートPCでは選択肢がありません。例えばVAIO Type P 等、CPUが非力です。
結局方針を変え、リビングの42inch 液晶のとなりにもう1台TVを追加購入しました。 2010年2月 発売のSONY の22inch 液晶TV KDL-22EX300 です。 この製品はDTCP-IP対応のDLNAクライアントになり、AVC 圧縮録画した番組も再生可能です。更にHDMIの入力が4系統もあります。 これで有線LAN越しにDLNAで録画コンテンツを見ることができるようになりました。
副産物として、SHARP DV-ACW60 もHDMI で接続してそちらにたまったコンテンツもPS3 プレー中に楽しめるようになりました。 (ノートPCではDV-ACW60 の録画コンテンツは見ることができません. DLNAサーバ機能がないので。)
ところでPS3 もファームウェアv3.0以降でDTCP-IP対応のDLNA クライアントになることができます。
しかしPS3 でBDZ-EX200 にアクセスする場合はBDZ-EX200 がアクティブになっている必要があります。 対して、KDL-22EX300 はWOL(Wake On LAN)でBDZ-EX200 が待機中でもDLNA サーバ機能を起こしてくれます。設置場所が離れている場合はKDL-22EX300 の方がPS3 のDLNA機能より便利です。 ただし、気合を入れて録画番組を消化する場合はPS3 の1.5倍早見機能の方が音声のクオリティが高いので利用することもあります。
ここまでが背景の説明でここから本題となります。
BDZ-EX200 のDLNAサーバはWOL で起動可能ということなので、 それをするプログラムを検討しました。
例によってGUIインタフェースのプログラムは様々なものがあるようですが、 コマンドラインのものが見当たりません。ならばと自作してみたところ、 うまくできました。
作成したWOL プログラムのソースは次のとおりです。
Windows 用にコンパイルしたバイナリも公開します → wolsend.exe
/****************************************************************************** "wolsend.c" Wake On Lan Magic packet sender Ver0.1 2010/05/11 create 1.0 05/13 setsockopt() ・引数に与えたローカルセグメントにあるMACアドレスに対して UDP形式 WOL Magic packet を送信します ・UDPなので、念のために0.1秒間隔で4回送信します ・Linux でもVisual Studio 2005 でもコンパイルできるようにしています ・本プログラムはフリーソフトです. 改造や再配布は自由にどうぞ コンパイル方法: gcc -o wolsend wolsend.c (Visual Studio) cl wolsend.c /link ws2_32.lib 実行方法: wolsend <MACアドレス> 実行例: wolsend 11:22:33:44:55:66 by S.K. (http://www.lares.dti.ne.jp/~seiki/) ******************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #ifdef _MSC_VER #include <winsock2.h> #else #include <sys/socket.h> #include <arpa/inet.h> #endif #define WOLSEND_PORT 9 #define SEND_MAX 4 int wol_send(int sockfd, struct sockaddr *dst_addr, int sockaddrlen, const unsigned char *pbody) { int len = 102; /* strlen() はダメ DATA に0x00 があることがあるため */ int iret = 0; if( (iret = sendto(sockfd, pbody, len, 0, dst_addr, sockaddrlen)) != len ){ if( iret == -1 ) perror("sendto() failed"); return -1; } return 0; } /* * magic packet のデータを作成する * * magic packet は0xFF の連続6byte に続いて16回のMAC Address 繰り返しで * 合計108byte。 * なぜこのようなフォーマットかというと、たまたま他のUDPパケットの * 中身がマジックパケットとバッティングしないように16回も繰り返す * ことで確率を低めているのだと思う。 * * 引数 * mac_addr: XX:XX:XX:XX:XX:XX 形式の文字列 */ unsigned char *make_packet_body(const char *mac_addr) { static unsigned char body[1024]; int index=0; int count=0; int part=0; int bin_mac[6]; if( mac_addr == NULL ){ printf("MAC address is NULL\n"); return NULL; } if( sscanf(mac_addr, "%x:%x:%x:%x:%x:%x", &bin_mac[0], &bin_mac[1], &bin_mac[2],&bin_mac[3],&bin_mac[4],&bin_mac[5]) != 6 ){ printf("MAC address format error: [%s]\n", mac_addr); return NULL; } for(index=0; index < 6; index++){ body[index] = 0xFF; } for(count=0; count < 16; count++){ for(part=0; part < 6; part++) body[index++] = bin_mac[part]; } body[index] = '\0'; return body; } void wsa_cleanup() { #ifdef _MSC_VER WSACleanup(); #endif } int main(int argc, const char *argv[]) { int sockfd, iret; struct sockaddr_in dst_addr; unsigned char *pbody = NULL; int ii = 0; int n_sent = 0; int yes = 1; #ifdef _MSC_VER WSADATA wsaData; WORD wVersionRequired; #endif if( argc < 2 ){ printf("WOL send utility.\n"); printf("give me target MAC address.\n"); printf(" ex) %s 11:22:33:44:55:66\n", argv[0]); exit(1); } pbody = make_packet_body(argv[1]); if( pbody == NULL ){ exit(2); } #ifdef _MSC_VER wVersionRequired = MAKEWORD(1,1); WSAStartup(wVersionRequired, &wsaData); #endif /* 通信先情報構造体を作成 */ memset((void *)&dst_addr, 0, sizeof(dst_addr)); dst_addr.sin_family = AF_INET; dst_addr.sin_addr.s_addr = inet_addr("255.255.255.255"); dst_addr.sin_port = htons(WOLSEND_PORT); if( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) <0 ){ perror("socket call error"); wsa_cleanup(); exit(3); } if( setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (char *)&yes, sizeof(yes)) != 0 ){ perror("setsockopt() error"); wsa_cleanup(); exit(4); } for(n_sent=0; n_sent < SEND_MAX; n_sent++){ iret = wol_send(sockfd, (struct sockaddr *)&dst_addr, sizeof(dst_addr), pbody); #ifdef _MSC_VER Sleep(100); /* 100 msec */ #else usleep(100000); /* 100 msec */ #endif } if( iret != 0 ) printf("Last WOL send error\n"); #ifdef _MSC_VER closesocket(sockfd); #else close(sockfd); #endif wsa_cleanup(); if( iret == 0 ) exit(0); else exit(100); }
おまけ
BDZ-EX200 の改善希望点です。
購入後そろそろ半年になりますが、ハングアップが1回ありました。
- リモコンに録画コンテンツリストを1発で出すボタンがない
クロスメディアバーでいくつか階層をたどってやっと録画コンテンツのリストに たどりつきます。
これまでに入手した3台のレコーダは、 全て録画済コンテンツのリストを出すボタンがありました。
ただ、15秒早送りのボタンは3回押すと45秒になったり、これは便利です。
- クロスメディアバーによる操作画面がしょぼい
HD解像度ではないんじゃないでしょうか。 数万円のマルチメディアプレーヤ並のしょぼさで20 万を超える高級機の画面には程遠いです。
Playstation3 の操作画面は非常にかっこよいのですが。
- PC 用のDLNAクライアントアプリを同梱してほしい
固まったらリセットボタンを押してみろ、とマニュアルに書いてあります(^^;)
第2チューナでもAVC圧縮できる機種が増えてきましたが、本機はAVC 圧縮録画できるのは第1チューナのみの制約です。 この点は不満はなく、私はPSP転送やめてからはDR(圧縮無し)ばかりです。
22inch 液晶TV のKDL-22EX300 の方は、BS で深夜など放送停止チャンネルに一度チャンネルを合わせてしまうと、 他のBSチャンネルに変更しても受信できなくなってしまいます。 そういう時でも、地デジにすると受信できます。 再度BSを見るためには一度電源を切る必要があります。
この4月から5月頭にかけて放送波によるファームウェアアップデートがありましたが、 自動アップデートをONにしていたのにアップデートが起こりませんでした。
正式発売日より前に購入できたので、 ファームウェアが最新ということはないはずです。
起動しないことが1度ありました。コンセントを抜いて入れなおすと起動しました。
それと、電源を入れて放送がみれるようになるまでの時間が短いけどOS が起動するまではDLNAクライアント起動などの操作はできません。 TVというより端末ですな。
ついにHDD 1台の容量が3T Byte を突破しました。HDD の取り扱いでは2.2TB に壁があり、それを超えるサイズのハードディスクに対してはUEFI (Unified EFI)の対応やOS 側の対応が必要であり、取り扱いには注意を要するようです。
私も自作機で3T HDDに挑戦してみました。
UEFI はもともとインテルが設計したEFI(Extensible Firmware Interface) をもとにしていて、現在UEFIの対応はIntel のマザーボードが中心となるそうです。私はMini ITXフォームファクタでATOM D525 をオンボード搭載したマザーボード D525MW を購入しました。
事前の調査でこのマザーボードがUEFIに対応しているという確証は得ることができず、 いちかばちか購入してみたのですが、ちゃんとBIOSメニューにありました。 画面の一番下がUEFI Boot の設定です。
HDD は日立HGST の HDS723030ALA640 で7200rpm の3Tバイト のものです。
インストールするOS はWindows7 Professional 64bit版とLinux です。 UEFIは起動するOSとして、64bit 版のもののみを対象としています。 ATOM D525 は64bit に対応したCPUです。(VTは非対応なのが残念)
SilverStone のMini ITX用ケース SST-SG05B-B をチョイスしたのですが、 3.5inch HDDを固定するシャドーベイ金具の設計がお粗末でHDD の重みでお尻側がたれさがってしまいます。 ヒモで上に吊り上げるようにしてみました。
![]()
![]()
![]()
拡張カードのスロットをふさぐ金具をシャドーベイとHDDの間に挟みこみ、 ヒモで上側のDVD-ROM固定金具に巻きつけてます。
そのほか、電源スイッチに凹凸がなく、プッシュ感がないというか、 電源をやや入れにくいです。 事故で押しちゃうことはなさそうですが。
それと、パワーとHDDアクセスの青色LED 明るすぎです。
その他の機器構成は昔のPCのスペック を参照してください。
BIOS のメニューからUEFI をenable に変更し、SATA をIDEモードではなくAHCI (Advanced Host Controller Interface)モードに変更するとWindows7 Pro 64bit 版は普通にインストールできました。 Cドライブの他に、2つシステムパーティションが自動で作成されました。
最初はマザーボードのSATA をIDE モードにしていると途中でエラーになったんですが、BIOS メニューからAHCIに変更するとうまく入りました。
Windows7 は対応するドライバを持ってないようで、マザーボード付属のCD から入れることでLANと Audio が利用できるようになりました。
SATAのドライバは特に何もしていません。Windows7 が持っていたものです。
3T HDD について、インターネット上で次の2つの情報をよく目にします。
- 2.2T より大きいHDDはAFT(Advanced Format Technology) 形式で物理フォーマットしなければ2.2Tを超える部分を利用できない
- HGST のHDS723030ALA640 は従来の512byte/sector で物理フォーマットされている
この2つの情報を総合すると、日立の3T HDD は自分で物理フォーマットを変更しないと2.2T を越える部分を利用できないように思います。 HGSTのUSのサイトを探したのですがフォーマットをAFT に変更するツールなどは見当たらず、また2.2T より上を利用するための特別な作業に関する記述も見当たりませんでした。
結局、そのまま3T としてWindows7 をインストールすることができました。 不思議な気分です。
Linux は最初CentOS v5.5 64bit 版を入れようとしたのですが、 パーティション設定のステップで「ディスク上のブートパーティションはGPT パーティションスキームを使用しています。ただし、このマシンはGPT を使用してブートできません。」というエラーが発生し、 インストールを継続できなくなってしまいました。
Linux は、カーネルレベルでは3T Byte を超えるストレージに対応しているのですが、 ディストリビューションが採用しているブートローダやインストーラが対応していないと 3Tを超えるHDDを起動ディスクとするようにインストールできないようです。
仕方がないのでFedora 14 の64bit版を入手して試してみたところ、 こちらはうまくインストールできました。
悩ましかったのはブートローダのインストール先の質問で、選択肢はMBR とインストール先パーティションの2つでした。
HDD をGPTスキームで利用しているので、MBR領域はないんじゃないかと思います。 MBR領域に相当するアドレスにブートローダを書き込まれると、 そこにある別のデータが上書きされてしまう心配がありました。 しかしインストール先パーティションの先頭にブートローダをインストールされても、 それを呼び出すものが何もないのでLinux を起動できなくなると思われます。
これらを総合的に判断し、壊れたらWindows7 から入れなおす覚悟でMBR を選択しました。
![]()
結果として正解だったようで、64bit版のFedora14 をうまく共存インストールできました。
ただ、起動の方法がスマートでなく、普通に電源スイッチを入れるとWindows7 が立ち上がります。Fedora14 を起動したい場合は起動の初期のタイミングでF10 キーを押すとBIOSが提供する起動メニューが現れ、そのメニューからHDD を選択するとLinux が起動します。
デフォルトで起動するOSをLinux にする方法が現在わかっていません。
そうそう、BIOSの設定でDVD-ROM ドライブの優先順位をHDDより上にしているのに、 Windows7 を入れた後Linux のインストーラ(DVD-R)が起動せず、HDD からWindows7 が起動するという現象がありました。
Linux のインストーラを起動する時もF10キーで上のBoot Option Menu を出し、 DVD-ROM ドライブを指定することで起動しました。
Windows7 とLinux はそれぞれ300GByte のパーティションを切って入れました。
OSを2つ共存で入れ終わってから、3T HDD上の残りの領域に2.3TByte のNTFS パーティションを作成し、Windows7 とFedora14 から利用することにしました。
Fedora14 では/etc/fstab に次の記述を追加することで、再起動後NTFS への読み書きができるようになりました。Windows7 で作成した日本語ファイル名も普通に見えています。
/dev/sda5 /ntfs ntfs-3g defaults 0 0
Fedora14 にログインすると、clock-applet がHTTP で118.155.230.32 に対してコネクションを張るようです。
このIP アドレスは逆引きすることができません。 なんか怪しい?!
$ netstat -a | grep http tcp 0 0 XXXXX.localdomain:53079 118.155.230.32:http ESTABLISHED $ su パスワード: # fuser -a -v -u -n tcp 53079 USER PID ACCESS COMMAND 53079/tcp: YYYYY 1806 F.... (YYYYY)clock-applet
デスクトップに表示される時計は、クリックするとカレンダーとともに、 設定した場所の天気や気温を表示できるようです。
その情報を取得しているのかもしれません。
時計を右クリックして設定で天気の表示と気温の表示をはずしてログインし直すと、 コネクションを張らないようになりました。
2003年に購入したVictor のノートPC InterLink MP-XP7310 のHDDを40GByte から100GByte のものに換装して利用していましたが、この100G HDD の利用が6年を超えたので故障する前にと、320Gバイトのものに交換しました。
![]()
新しいHDD はWESTERN DIGITAL のWD3200BEVE で、 SATAではないPATAインタフェースの2.5inch HDD では流通している最大容量のものになります。
2004年12月05日の記事の手順 で今回も交換できました。
交換したWD3200BEVE ですが、動作音がかなりうるさいです。 6年前の製品からの換装なので、WindowsXP の起動はとても速くなったように感じます。
簡単なベンチマークをしてみました。
2004年12月に実施した、換装前の100G HDDでの結果を再掲します。
★ ★ ★ HDBENCH Ver 3.40 beta 6 (C)EP82改/かず ★ ★ ★ M/B Name Processor 1000.04MHz[GenuineIntel family 6 model 9 step 5] VideoCard Intel(R) 82852/82855 GM/GME Graphics Controller Resolution 1024x600 (32Bit color) Memory 777,008 KByte OS 5.1 (Build: 2600) Service Pack 2 Date 2004/12/07 22:59 Intel(R) 82801DBM Ultra ATA Storage Controller - 24CA プライマリ IDE チャネル TOSHIBA MK1031GAS Intel(R) 82801DBM Ultra ATA Storage Controller - 24CA セカンダリ IDE チャネル ALL Integer Float MemoryR MemoryW MemoryRW DirectDraw 20844 45971 46367 34139 23491 40329 30 Rectangle Text Ellipse BitBlt Read Write RRead RWrite Drive 19570 15564 7520 123 28001 22064 9765 10975 C:\100MB
今回の結果は次の通りです。
★ ★ ★ HDBENCH Ver 3.40 beta 6 (C)EP82改/かず ★ ★ ★ M/B Name Processor 1000.04MHz[GenuineIntel family 6 model 9 step 5] VideoCard Intel(R) 82852/82855 GM/GME Graphics Controller Resolution 1024x600 (32Bit color) Memory 777,008 KByte OS 5.1 (Build: 2600) Service Pack 3 Date 2010/12/12 20:42 Intel(R) 82801DBM Ultra ATA Storage Controller - 24CA プライマリ IDE チャネル WDC WD3200BEVE-00A0HT0 Intel(R) 82801DBM Ultra ATA Storage Controller - 24CA セカンダリ IDE チャネル ALL Integer Float MemoryR MemoryW MemoryRW DirectDraw 31442 46343 46746 37704 31414 59452 30 Rectangle Text Ellipse BitBlt Read Write RRead RWrite Drive 18926 15340 7380 117 58480 57463 8130 21342 C:\100MB
HDBench のversion は2004年時のものに合わせてます。 OSのService Pack が今回はSP3 になっています。
HDDの性能としては、ランダムRead が遅くなっているのを除けば、 おおむね倍以上の結果となっています。