ホーム » 2010 » 1月 (ページ 2)

月別アーカイブ: 1月 2010

2010年1月
« 12月   2月 »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

最近の投稿(電子情報)

アーカイブ

カテゴリー

2010年1月17日(第147回)

  • メールテーマ:冬のすごし方
  • 数学の部屋 第50回「50回記念 赤い帽子の問題」
     長水先生、市波さん、長谷川さん、山内さん
    答えを募集中! お聞きになってメールでお送りください
    math100117.mp3

photo100117.jpg

サーバの整理

総合情報処理センターに置かせてもらっているサーバの、バックアップ強化で機材が増え、ラックにまとめる。5台だもんなぁ〜。 裏の配線も、短めのEtherケーブルに差し替えたり、結束バンドで配線を固定したり、キーボード&モニタ切替え装置を入れたり….。 おかげで、かなりすっきりした構造になった。 ただ、緊急連絡システムのメインサーバは、稼働状況もあって、まだ床置きのまま。 利用者が少ないときを狙ってラックにまとめれば、完成。

上に乗っけたモニタも含めると、高層建築状態なので、地震があったらちょいと怖いんだけど…

1001181646_240x320.jpg

追記:2010/01/18 、メインサーバを利用状況が低いのを見て、ラックにのっける。 さらに、上に乗っけていたモニタをキーボード台に下ろす。

B木とB+木

データベースの内部構造の話として、B木B+木について説明を行う。

B木

B木は、位数Nの場合、2N個のデータ部(di)と、 2N+1個の次のノードへのポインタ(pj)で、 1ノードが構成される。 i番目のポインタpiの先には、di-1より大きく、 diより小さいデータを格納する。 また、1つのノード内のデータ件数は、N以上、2N以下を満たすように構成する。

データの挿入などを行うことで、1ノード内のデータ件数が2N個を越える場合、 追加データを含めた2N+1個の中央の値を上位に昇格させ、ノードを2つに分割する。 昇格先の上ノードもあふれる場合は、再帰的に同じ処理を繰り返す。


データあふれで昇格&分割の説明(wikipediaより引用)

同様に、データ削除の場合も、1ノード内データ件数がNを下回る場合も、 2つのノードを併合などの処理を行う。

B+木

B木では、追加削除が容易ではあるが、全データの順次処理をする場合、 再帰処理などが必要になったりするため、データのシーケンシャルアクセス・ランダムアクセスが 苦手である。データベースでは、複数テーブルの全データで直積といった処理も多いことから、 次々と処理を行うためのヒントが必要となる。

このため、末端のノードにおいて、シーケンスセットと呼ばれるリスト構造を作っておく。 末端のデータをリストでつないだ情報を持つことで、データ順の順次アクセスが容易となる。

参考教科書では、シーケンスセットをノードとは別に保存する説明で記載されているが、 WikipediaのB+木の説明では、末端ノード同士を横方向に接続するだけの図で説明されている。 この辺は、実装方法の異差かな???

crontabの月日付と曜日日付はorなんだ

バックアップ対策用に導入したNASのためのバックアップ処理を記述したけど、 確認すると予想外のバックアップが発生している。 月初めの日曜だけバックアップを取りたかったので、crontab にて、

#時 分 日 月 曜
0   3 1-7 * 0   root ...backup-script...

を記載した。『1~7日でかつ曜日が日曜日』のつもりだったんだけど、1~7の毎日バックアップが実行されている。よくよく man 5 crontab を見ると、他の項目と違い、月日付と週日付の両指定は"or" だった。

注意: コマンド実行の日は 2 つのフィールドで指定できる — 月内日および曜日である。 もし両方のフィールドが制限指定 (* 以外) であると、 いずれかのフィールドが現在時刻と合った時にコマンドが実行される。 (man 5 crontab より)

しかたがないので、曜日指定を抜いて、"0 3 1 * * root …"の設定とした…. 平日夜中の3時、負荷かけないでね…

追記:2010/01/14 予定外で実行された、バックアップで中身をみると、差分バックアップなのに、大量の記録が 記載されている。でも、ほとんどディレクトリ。更新日付だけの記録なんだろうか….

全国高専到達度試験がありました

この数年、高専の3年生はこの時期、『全国高専到達度試験』というものが実施されます。 全国の高専の学習内容の理解度の違いを見るためなんだろうけど、 数学と物理の試験が、1/13日の午前に実施されました。 実施方法は、入試とほぼ同じで90分の内容。学校によって教える内容の違いもあり、 いくつかの領域に分けられ、最初から教えていないものは問題から除外される。

どちらにしろ、直接的に自分の成績には影響しないため、中には適当にマークシートに 書いている人も若干いる様子。だけど、数学・物理の先生も、学校の評価にかかわることもあり、 到達度試験と同様の範囲のレポートを課題にしたりと、ちょっと苦労されているみたい。

FEREC用Bookmarklet

学科にてFERECのルータを使っているが、 最初の接続でWeb認証を行うが、その自動化ができないかと情報収集。 調べてみると、Bookmarklet という方法が紹介されている。 ブックマークにURLを登録する代わりに、JavaScript の処理を登録し、 認証の代わりにそのブックマークを参照する方法。

Web認証のBookmarkletは、NTTコミュニケーションのホットスポットの認証で使われいるので、そのプログラムは、URLエンコードされていたので、戻してみた。

javascript:(function(){
var d=document.forms[0];
d.login_name.value="XXXX"; // XXXXにユーザ名
d.password.value="YYYY";   // YYYYにパスワード
d.submit();
})()

ちなみに、FERECの認証画面のformは、下記の通り。

<form method=post
onsubmit="document.getElementById('sb').disabled = true; return true;">
ユーザ名
<input type=text name=user id=user size=20 autocomplete=off>
パスワード
<input type=password name=pass id=pass size=20 autocomplete=off>
<input type=submit id=sb value="ログイン">
<input type=hidden name=login value=1>
</form>

ということで、JavaScriptの細かい所がわかっていないが、以下のコードでいいのかな…

javascript:(function(){
var d=document.forms[0];
d.action="https://ferec.ei.fukui-nct.ac.jp/login.gsp";
d.user.value="XXXX"; // XXXXにユーザ名
d.pass.value="YYYY"; // YYYYにパスワード
d.login.value=1; // 追記:1/19これを消すと動いた d.submit();
})()

ひとまず、ブックマークを試すために、ちょい書きプログラムの URLエンコード処理などが必要なので、ちょいとPHPでプログラム。
追記:2010/01/14
動かなかったので、action="…"も追加してみたけれど、失敗。 何がまずいのかなぁ…

追記:2010/01/18
無名関数の呼び出し部分が {} と () の書き間違いを見つけた。 たぶんこれで動くはず…

- javascript:(function(){...}){} 誤
+ javascript:(function(){...})()

TeraStationを学科サーバに接続

学科のサーバも2003年から動かし、7年近く経過。そろそろ120GBの容量も手狭になってきた。 一応、後任のサーバも動いているので、壊れたら移行する予定だけど、容量の問題は そろそろヤバイ。 ということで、学科予算で、Buffalo の TeraStation TS-XL/R5 4TB を購入してもらった。 RAID5構成だし、バックアップとしては手ごろ。個人的な研究費で個人向けのTeraStationを 購入し使っているけど、こちらは法人用でちょっと高かった。

サーバにnfsマウント

学科のサーバのデータ保管&バックアップ用にこのTeraStationを接続させる。 TS-XL/R5 には、NFS 機能が付いているので、設定は簡単と思ったけど、 接続してみると、漢字ファイル名が Windowsファイル共有で見ると、文字化けしてしまう。 マニュアルにも NFS は、機能を持たせてあるけどサポート対象外という記述もある。

また、NFSマウントしても、元々BuffaloのNASのOSは unix 環境とは違うものがベースなので、 パーミッション情報もきちんと扱えない。 ということで、漢字コードの設定も自由度の高いWindows共有に切り替える。

(( /etc/auto.master : オートマウント用ファイル追加 ))
/nfs   /etc/auto.nfs
(( /etc/auto.nfs.credentials : sambaマウント用パスワード記録ファイル ))
username=XXXX
password=YYYY
(( /etc/auto.nfs : オートマウント/nfs用 ))
NAS   -fstype=cifs,rw,credentials=/etc/auto.nfs.credentials, \
iocharset=euc-jp, \
uid=nobody,gid=ei,file_mode=0664,dir_mode=0775 \
://XX.XX.XX.XX/share

uid,gid,file_mode,dir_mode の設定で、学科スタッフのグループの人だけが 書き込めるようになる。(それ以外の人はread可)

バックアップ作業

追記:(2010/01/13)
現行サーバと、次世代サーバをこのNASに接続させ、本来のバックアップ作業を行った。 トラブル復旧時に使い慣れた操作とするために、バックアップは tar を使用する。 他の気の利いたツールは、いざと言うときに使いこなせない… んで、root , home , www領域 を別々に全バックアップ&差分バックアップをとるように設定した。 (tar に "–newer"なんてオプションがあったのを発見!) バックアップによって、home以下のファイルは、".tar.gz" で 36GB。 巨大だよなぁ…と思いつつも、4TB-NASだし、2台のバックアップ作業後だけど、 使用率はたったの4%。

メンテナンス用にメモ:
/etc/backup/Makefile  -- バックアップ処理
/etc/backup/{root,home}-exclude.txt
-- root,homeのバックアップ対象からはずすファイル
/etc/cron.d/my-backup -- バックアップスケジュール

2010年1月10日(第146回)

  • メールテーマ:大人、成人式
  • 英語の囃子 第23回 吉田先生、電子情報4年丸山さん
    英語の桃太郎を読んでみよう
    eng100110.mp3

photo100110.jpg

サンプリングデータの積分・微分など

専攻科1年の実験の補足説明の時間があったので、 Arduinoの制御実験の結果を受け、制御用のサンプリングデータの数学的話をする。 モータ制御で、速度値を積算すれば速度の積分で距離になる話や、 加速度センサーの値を積分し速度、さらに積分で距離という話。 こういった2重積分でセンサー誤差の蓄積による問題点を解説する。

また、サンプリングデータの平滑化として、単純移動平均や指数移動平均などの話をする。 積分の逆の話として、データの直前値との差が微分といった話と、 幅広く説明した。 さすがに専攻科生だけあって、データのノイズ対策について質問したら、 フーリエ変換してフィルタリング…といった話も出てきたが、 簡単な計算でも何ができるのかという点で、興味を持って聞いてくれたみたい。

バックアップ

参照カウンタ法の雑談として、ジャーナリングについて話す。 システムの急な停止によって、参照カウンタが壊れると、まさにマーク&スイープ法で 参照カウンタの修正が行われるが、巨大なファイル容量であれば極めて時間がかかる。 このため、ファイルシステムへの書き込みの際には、修復用のヒントも同時に書き込まれ、 正常書き込みで修復データを消すが、急なシステムダウンの時は、修復ヒントをつかって ハードディスクを復旧する。こういった対策が「ジャーナリング」

ただし、ジャーナリングされていても、ハードディスクは壊れるので、壊れる際の対策も必要。 んで、一般的にはRAIDが使われる。 RAID1のミラーリングや、RAID5での分散書き込みで1台壊れても復旧!という考え方を説明。 でもでも、間違ったデータが自動的に書き込まれたら終わりなので、 定期的なバックアップも重要と解説する。

S.M.A.R.T差分バックアップホットスワップ