2009年3月13日金曜日

Windows Server 2008 R2 build 7048

そろそろ2008 R2に環境を移そうとしています。ベータテストと、自作アプリのWindows 7対応のために。
Windows 7ではタスクバーが新しくなり、右下の通知領域がデフォルトで非表示になってしまうので、
アプリケーションの設計を見直す必要が。
で、どうせならHyper-Vとか使いたいので2008 R2です。

build 7048ですがところどころ不安定でした。まだ翻訳がおかしいですし、機能の追加の後の再起動に
失敗したりVirtual Clone Driveのインストールの直後はシャットダウンできなかったり。
ただ、RadeonのバグいドライバでWindows Vistaだとblue screenなのが、2008 R2だとドライバの
再起動を繰り返しつつも耐えてました。(耐えてる間に正常に再起動がかけれた。)
まぁRadeonがわるいんですが。

2009年2月22日日曜日

PNGの再圧縮

GDI+で作成したPNGファイルをGIMPで開いて保存し直したところ結構ファイルサイズが大きくなってびっくり。そういえば色形式も色々ありましたっけ。
調べたところ、OptiPNGとか他にもいろいろ再圧縮ツールがあるそうで。
手元のWebページの画像7,433ファイルをこのツールにかけたところ82MB→65MBと削減できました。

2009年2月21日土曜日

Debian 5.0 lenny

Debian 5.0 (lenny)がリリースされたのでアップグレードしました。
思兼 GNU/Linuxからアップグレードを繰り返してそろそろ10年でしょうか。

find /etc/ -type f | xargs ls -ltdr | head
で/etc内にある一番古いファイルが2000/01/29でした。

アップグレードの中でproftpdがはまることがわかっています。FTPにはそもそもファイル名に関する規定がありません。今までproftpdは8bit cleanでしたが、Debian 5.0にパッケージされているproftpd 1.3.1は8bit cleanではなくなり、日本語ファイル名を通すことが困難になりました。
こんなときでもDebianは古いパッケージをholdしておけば共存できます。つまりproftpdとそれに依存するパッケージはDebian 4.0のままで、それ以外はDebian 5.0に移行しました。

それでもまだはまることがあるんですね。
iptablesがバージョンアップして以前のiptables.confが使えませんでした。おかげでfirewall設定が消えて外部から攻撃を受ける羽目に…。
udev絡みでしょうか、mdのデバイスファイル名が/dev/md/1から/dev/md1に変わってしまいました。おかげでmount失敗に泣きました。
dhcpサーバが設定に厳しくなりました。ノートパソコンに対して無線LAN経由でも有線LANでも同じIPアドレスを割り当てていましたが、まとめて1つの設定にできなくなり、2つに分ける必要がありました。
rexecプロトコルが勝手にtcpd経由にされ、接続できなくなりました。tcpd嫌いっ

Apache、samba辺りは設定もややこしく毎回見直すべきなのは、それなりに。

まぁそれでもいい感じにアップグレードできたと思います。
ちなみにGCC周りが4.1から4.3にアップグレードされていますが、なぜか4.1のパッケージも残ったままなので手動で消す必要があります。

2009年2月6日金曜日

ADODB.SreamのSaveToFile()メソッド

ADODB.SreamオブジェクトにSaveToFile()メソッドがあります。書き込みのオプションとしてSaveOptionsEnumを設定します。これによると…

adSaveCreateNotExist1既定値です。FileNameパラメータで指定したファイルがない場合は新しいファイルが作成されます。
adSaveCreateOverWrite2FileNameパラメータで指定したファイルがある場合は、現在開かれているStreamオブジェクトのデータでファイルが上書きされます。
一見普通のEnumです。
でもよく読むと…
これらの値はAND演算子で結合することができます。
ちょっと待て。新規作成もしくは上書きをするにはAND結合? 1と2をAND結合すると0ですよね? ね?
こういうとき普通はOR結合して3になりませんか? いえ、値が重複していない以上、識別は可能ですが。
で、試してみる……0→引数エラー、1→OK、2→OK、3→引数エラー。
あれっ? ANDもORも受け付けないんですが。

仕方がないのでSRきりました。最終回答は出ていないもののドキュメントミスで次のようになるらしいとのこと。
adSaveCreateNotExist1既定値です。新規作成します。ただし上書きはしません。
adSaveCreateOverWrite2新規作成もしくは上書きします。

2009年1月28日水曜日

Windows 7 RRP

世の中、Windows 7βで賑わってますが、RRPというのを試してみました。何の略語かわかりません。
ともかくβのビルド番号が7000でRRPは7022となってました。
よく言われているようにセットアップ直後の感想として早い気がします。Vistaよりスムーズ、動きがなめらかな印象です。
今後、時間を見つけてアプリを入れてソフトの動作確認などもしていこうかと。

ちなみにβを試している友人と表示を比較させてもらいましたが、文字化けが酷い…悪化してます。

2009年1月15日木曜日

RAIDの拡張

Linuxのsoftware RAID(md)の場合、disk controllerをまたがって好きなようにRAIDを構成できるため重宝します。云々はに書きました。

今回ハードディスクを更新したので、RAIDの拡張をしてみました。

md2 : active raid5 sdf[0] sdg[3] sde[2] sdh[1]
という4玉構成のRAID5に対してsda4とsdc4を追加して6玉構成にしようと思います。

# mdadm /dev/md2 -a /dev/sda4
# mdadm /dev/md2 -a /dev/sdc4
# mdadm /dev/md2 -G -n 6
最初にSpare Devicesとして2玉追加し、次にgrowコマンドでActive Devicesを6玉に変更します。えー、7800min後に完了とか言い出しました。

よく見ると
md: reshape of RAID array md2
md: minimum _guaranteed_ speed: 1000 KB/sec/disk.
md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for reshape.
md: using 128k window, over a total of 488386496 blocks.
とか言って本気を出していません。
こんなときLinux Kernelはオープンソースなので出しているメッセージや理由、どうすればいいかなどをソースコードから調べることができます。

# cat /proc/sys/dev/raid/speed_limit_min
1000
# echo 6000 > /proc/sys/dev/raid/speed_limit_min
他のプロセスの邪魔にならないようにこうやって速度が抑えられていたようです。その上で、早く完了させたいためスピードアップしてみました。これで残り1300minに…それでも丸一日かかるのね。

2009年1月11日日曜日

S.M.A.R.T on Linux

久々にハードディスクの健康状態が知りたくなり、smartmontoolsで情報を見てみました。
まずはありきたりなところからHDDの温度

# for d in a b c d e f g h; do echo -n "sd$d "; smartctl -a -d ata /dev/sd$d|grep Temperature_Celsius; done
sda 194 Temperature_Celsius 0x0022 035 055 000 Old_age Always - 35 (Lifetime Min/Max 0/17)
sdb 194 Temperature_Celsius 0x0002 196 196 000 Old_age Always - 28 (Lifetime Min/Max 16/55)
sdc 194 Temperature_Celsius 0x0002 196 196 000 Old_age Always - 28 (Lifetime Min/Max 16/58)
sdd 194 Temperature_Celsius 0x0022 034 047 000 Old_age Always - 34 (Lifetime Min/Max 0/16)
sde 194 Temperature_Celsius 0x0002 214 214 000 Old_age Always - 28 (Lifetime Min/Max 14/50)
sdf 194 Temperature_Celsius 0x0022 120 099 000 Old_age Always - 30
sdg 194 Temperature_Celsius 0x0002 230 230 000 Old_age Always - 26 (Lifetime Min/Max 14/38)
sdh 194 Temperature_Celsius 0x0022 120 097 000 Old_age Always - 30
あからさまな温度差はなさそうです。
次にread error
# for d in a b c d e f g h; do echo -n "sd$d "; smartctl -a -d ata /dev/sd$d|grep Raw_Read_Error_Rate; done
sda 1 Raw_Read_Error_Rate 0x000f 109 099 006 Pre-fail Always - 0
sdb 1 Raw_Read_Error_Rate 0x000b 094 094 016 Pre-fail Always - 851977
sdc 1 Raw_Read_Error_Rate 0x000b 085 085 016 Pre-fail Always - 6029424
sdd 1 Raw_Read_Error_Rate 0x000f 119 091 006 Pre-fail Always - 0
sde 1 Raw_Read_Error_Rate 0x000b 100 100 016 Pre-fail Always - 0
sdf 1 Raw_Read_Error_Rate 0x000f 200 200 051 Pre-fail Always - 0
sdg 1 Raw_Read_Error_Rate 0x000b 100 100 016 Pre-fail Always - 0
sdh 1 Raw_Read_Error_Rate 0x000f 200 200 051 Pre-fail Always - 0
sdbとsdcでエラーが出てる…そろそろやばいかも。

そして「for d in a b c d e f g h; do echo sd$d; smartctl -A -d ata /dev/sd$d; done」を眺めて気になる表示をピックアップ。
sda 190 Unknown_Attribute 0x0022 064 045 045 Old_age Always In_the_past 756809764
sda 195 Hardware_ECC_Recovered 0x001a 061 058 000 Old_age Always - 6361756
sdd 190 Unknown_Attribute 0x0022 064 053 045 Old_age Always - 740032548
sdd 195 Hardware_ECC_Recovered 0x001a 067 064 000 Old_age Always - 42581156


そこでテストを実行し、エラーの確認
# for d in a b c d e f g h; do smartctl -t short -d ata /dev/sd$d; done
# for d in a b c d e f g h; do echo "sd$d "; smartctl -l error -d ata /dev/sd$d; done
(特にエラーなし)
# for d in a b c d; do smartctl -t long -d ata /dev/sd$d; done
# for d in a b c d e f g h; do echo sd$d; smartctl -l selftest -d ata /dev/sd$d; done
sbc
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended offline Completed: read failure 30% 22500 387518271
うわーsbcダメかも。