カテゴリー別アーカイブ: 未分類

RAIDって何?

以前、ESXiのインストールを行った際にハマった記事に
少しだけ書いたRAIDを今回のテーマにしたいと思います。

RAIDとは、複数のHDDを1つのHDDのように認識・表示させる技術です。
なぜ、この様な事を行うのか。
これは、システムにハードディスクが一つしかない場合、
ハードディスクが壊れたとき、対応が取れない、というのが、大きな要因です。
また、この他にも、一つのデータを複数のハードディスクに分けて書き込むことが
可能になるため、データ書き込みの高速化も実現可能になります。

主に、企業でサーバやストレージに利用されている技術でしたが、
HDDレコーダーやBlu-rayレコーダーの普及に合わせて、
NAS(ネットワークハードディスクの一種)が普及したため、
消費者向けとしても関連のある技術となりました。

さて、RAIDにはハードウェアRAIDとソフトウェアRAIDがあります。
ハードウェアRAIDはRAIDコントローラや
マザーボード上のチップにコントローラが含まれているオンボードRAIDなどがあります。
(オンボードRAIDはRAIDコントローラに比べて、機能制限があることが多く、
ソフトウェアRAIDとして扱われることもあります)
こちらはRAID管理を行うための処理を機器やチップが行うため、
ソフトウェアRAIDに比べて、高速です。
また、ハードウェアRAIDにより構成されたディスクは、Windowsの様なOS側から
ディスクを確認すると1つのディスクとしか表示されません。
例えば、HDDが2台搭載されているサーバが有るとします。
(ディスクAとディスクBとします)
この2台のHDDでRAID構成をすると、仮想的にHDDができます。
(ディスクV1とします)
Windows側からはディスクV1のみがHDDとして認識されます。

これに対して、ソフトウェアRAIDはWindowsの様なOSの機能の1つとして、
RAIDが提供されます。
こちらはRAID管理を行うための処理をOSが担当しますので、
他の稼働プロセスと同様に処理されるため、
ハードウェアRAIDに比べると、ディスクの書き込みは低速となります。
OSの機能としてRAID構成を行うため、
HDDはサーバに搭載されている分が表示されます。
上述の例でいえば、ディスクAとディスクBが認識されており、
ソフトウェアRAIDとして構成することで、ディスクV1として認識されますが、
ディスクの管理機能で確認すると、表示上はディスクAとディスクBと表示されます。

今回は、RAIDについて、提供する機器・機能からの話をしましたが、
次回は、RAID構成について、もう少し詳しく記述します。

特定のクラスのみ操作したい

今回はC#とASP.NETの話です。

Webページで登録画面を作成していて、
必須入力項目への入力確認に、
RequiredFieldValidatorクラスを使用しました。

バリデーションを行うコントロール名とエラーメッセージをセットすれば、
指定したコントロールに対して、入力がなされたかクライアント側で確認することができます。

ただし、今回作成している画面が少し厄介で、
ドロップダウンリストの選択した値によって、
必須入力が変更される、という仕様を盛り込んでいました。

そこで、SelectedIndexChangedイベントを使用し、
選択した値が変更した時に、RequiredFieldValidatorの設定を切り替えるようにしました。

初めは、選択した値ごとに、RequiredFieldValidatorのEnabledプロパティに
TrueやFalseをセットしていたのですが、
これだと、Falseのセット漏れが出たりするなぁ、と思い、
一度、ページ内の全てのRequiredFieldValidatorにFalseをセットした後、
必要なコントロールのみ、Trueを設定しようと考えました。

では、どの様にして、全てのRequiredFieldValidatorコントロールに
Falseをセットするのか、考えました。
ASP.NETの各コントロールが継承するクラスにControlクラスが有ります。
このControlクラスには、FindControlというメソッドが有りますが、
これはコントロールのIDでしか探せません。
それに加え、コントロールは階層配置されており、
FindControlメソッドでは、呼出元のコントロールが有する子コントロールが
対象となります。

そこで、下記の記事を参考にし、再帰的に呼び出されるメソッドを作成しました。
下記記事では、IDを使用していますが、今回はクラス名で検索する様にします。

方法: ID を使用してサーバー コントロールにアクセスする

http://msdn.microsoft.com/ja-jp/library/y81z8326(v=vs.100).aspx

上記記事内に記載されているメソッドからの変更点は、
1.引数のIDをクラス名に変更する。
2.コントロールとIDの照合を
コントロールのクラス名と1で変更した引数と照合する。


    public static Control FindControlRecursive(Control rootControl,
                                               string findControlClassName)
    {
        if (rootControl.GetType().Name == findControlClassName)
        {
            return rootControl;
        }

        foreach (System.Web.UI.Control searchControl in rootControl.Controls)
        {
            Control controlToReturn =
                FindControlRecursive(searchControl, findControlClassName);
            if (controlToReturn != null)
            {
                return controlToReturn;
            }
        }
        return null;
    }

このメソッドを実行することで、rootControl以下のコントロールから
検索対象とするクラス名を有するコントロールを取得できます。
後は、取得したコントロールのparentプロパティで、
直近の親コントロールを取得し、
親コントロールが持つ子コントロールをforeachで回し、
GetType().Name で同一のクラス名を持つコントロールのEnabledプロパティに
FALSEをセットすれば、Webページ内のRequiredFieldValidatorオブジェクトを
無効化できます。

ちなみに、呼出元は以下の様なコードを書きました。


    // ページ内のコントロールを対象とする。
    foreach (Control pageChild in Page.Controls)
    {
        // RequiredFieldValidatorクラスのコントロールを検索する。
        var findControl = FindControlRecursive(pageChild,
                                  "RequiredFieldValidator");

        if (findControl != null)
        {
            // 検索結果のコントロールの親コントロールを取得する。
            var parentControl = findControl.Parent;

            // 親コントロールの全てのvalidatorを無効にする。
            foreach (Control childControl in parentControl.Controls)
            {
                If (childControl.GetType().Name == "RequiredFieldValidator")
                {
                    RequiredFieldValidator requiredFieldControl =
                        (RequiredFieldValidator)childControl;
                    requiredFieldControl.Enabled = false;
                }
            }
        }
    }

サーバサイドで同一のクラスを持つコントロールに
一律の操作をする際に、使えると思います。

VMWare ESXiのセットアップで苦戦した話(2)

前回の続きです。

開発用のサーバにVMWare ESXiをインストールさせようとしている社員O氏。
RAIDの設定に四苦八苦しながらも、なんとかRAIDの設定は行えましたが、
まだまだ続きます。
というより、むしろここからがインストール作業です。

空の環境にインストールする際、特に難しいことはありません。(ないはずでした……)
1.ブート時にCDからインストールするか確認
2.規約事項の確認
3.インストールするハードディスクの確認
この順に確認が出ますので、
それぞれ入力を行います。

が、今回は楽にはいきませんでした。
今回の問題は3のハードディスクでした。

どのハードディスクにインストールするか確認する画面が表示されるのですが、
RAID構成したはずのディスクなのに、物理ハードディスクが二つ見える……

RAID構成が崩れた? と思い、サーバを再起動させて確認する。
RAID構成は崩れていない。
とりあえず、そのままインストールを続行してみました。
その後の起動で確認すると、RAID構成は崩れたままです。

どういうことだ? と考える。
まさか、オンボードRAID(=ソフトウェアRAID)だとよろしくないのか、と思い、
ESXi5.5のインストールマニュアルを探す。
やはりというか、下調べが足りてないというか、
ESXi5.5ではソフトウェアRAIDはサポートしていない、という一文が。
そうですか、マザーボードに載っているタイプのRAIDもアウトですか……

しかし、原因さえわかってしまえば、回避できます。
ということで、BIOSを立ち上げ、HDDモードをAHCIへ。
その後、正常にインストールは完了しました。

正直、ここまで苦戦することになるとは考えてもいませんでした。
ESXiも(バージョンが異なるとはいえ)インストールしたことはありましたから。

それでは、今回の教訓です。
インストールする環境はきちんとマニュアルに目を通しましょう。

前回といい、今回といい、事前に情報さえ持っておけば、
回避できる状況に対し、前にやったことあるし、大丈夫大丈夫と
安易に考えたために、結果として、大火傷してしまいました。

事前準備ってホント重要ですね……

VMWare ESXiのセットアップで苦戦した話

今回は、VMWare ESXiをインストールしたときに、
苦戦した話をしたいと思います。

インストールしたESXiのバージョンは5.5。
開発用のサーバにインストールし、その上で、
仮想サーバを立てる予定です。

過去にESXi5.1をインストールしたことがあったため、
そう苦戦することはないだろうと考えながら、
ESXi5.5のインストール用ISOファイルをダウンロードしました。
ISOファイルをCDに焼き、インストールメディアを準備します。

さて、インストールするために、サーバの電源を入れ、
BIOSを流し見た後、RAID(※1)を構成するため、
POST画面を眺めます。

※1:複数のハードディスクを1つのディスクとして扱う技術。
信頼性、可用性を向上させる。
ハードウェア(RAIDコントローラ)によって、管理されるものと
ソフトウェア(OSなど)によって、管理されるものがある。

……POST画面にRAID構成情報が表示されません。
この時点で、おかしいな、と思いはしましたが、
電源を入れ直し、BIOSを確認します。

RAIDの情報がない?
RAIDコントローラの情報はBIOSに表示されなかったか?
などと考えながら、探します。

結局、見つけることが出来なかったため、
サーバのセットアップに使用するDVDを挿入し、
GUI画面を眺めます。

こちらにも表示が無い?
この時点で、すでに混乱しています。

セットアップ用DVDを入れたり抜いたり、
ESXiのインストールCDを入れたり抜いたり、
サーバのPOST画面を眺め続けたり。

どこにもRAIDのセットアップ画面は有りません。

BIOSも見たんだけどなぁ、と考えながら、
BIOSを立ち上げ、HDD情報の画面を表示します。

HDDモード:AHCI と表記されている箇所に目が留まります。
このサーバのHDDはSATAでしたので、
AHCIかIDEかの選択だろうと高を括っていましたが、
念のため確認するか、と項目を選択すると、
そこには、IDE・AHCI・RAIDと書かれた項目が。

思わず、「こんな所にあるのか……」と声に出しました。
これでRAIDが設定できる、と安心し、RAIDモードを選択します。

設定を変更し、BIOSを保存、再起動します。
POST画面にようやくRAIDの設定画面へのコマンドが表示されました。

コマンドを叩き、設定画面へ移ります。
ここからは問題ないだろう、と考え、設定を行います。

設定も無事完了し、サーバを再起動させ、
ESXiのインストールに移ります。

実は、この後、さらに想定外の事態に襲われたのですが、
それについては、次回に持ち越させていただこうかと思います。

今回の教訓は、慣れているメーカーでもモデルが変われば、
BIOSも変わることが有るので、事前に下調べを行う事、でした。

Xamarin って初めて聞いた

Xamarin(ザマリン)とは企業名であり、

またその製品群をさす言葉でもあります。

 

Xamarin社は2013年11月に「Xamarin for Visual Studio」をリリースしました。

これを使うと、なんと Visual Studio 2013 (主にC#, VB.NET)で、

iOS/Android のネイティブアプリが作れちゃうそうです!!

 

ライセンスは有償ですが、30日間の試用期間もあります。

 

Visual Studio を使い慣れている方で、

iOS/Android アプリを作ってみたい方には、

おすすめかもしれません。