なんかてきとうに

わりと個人的な忘備録的ですよ。

kdumpの設定がわからない

kdump というカーネルがクラッシュしたときにダンプを保存してくれるツール(?)がありますが

RedHat6.6にて

guiからその設定をしていました。

expert設定のデフォルト動作をrebootにしたかったのですが、

ターゲットパーティションを file:///(none) にしておいたら

デフォルト動作をrebootにできませんと怒られ、どうしたもんかなぁと思っていたら

ターゲットパーティションを file:///(none) じゃなくて UUID=○○ みたいなのがずらっと並んでいたので

/etc/fstab みて / にマウントしているUUIDを設定してみたら

rebootに設定できるようになりました。

パーティションの設定は、"異なるパーティション"に書き込むときに必要と書いてあったりするのですよね。

ソース26.2.3. コマンドライン上で kdump の設定

なんで file:///(none)の状態でデフォルトの動作を変更できないのかがなぞ。

マニュアルみる限りではデフォルトの動作はコアダンプの取得に失敗した時に行う動作みたいになってるので、

特に設定できない理由はないと思うのですが。

失敗した話とか

  • Linuxのboot時に外部ドライバの読み込み方法を知らなかった話。

インストール時に内蔵RAIDコントローラを認識してくれなくて、どうすればいいんだろう。

と相談したら、ハードウェアメーカーがドライバを公開していれば、 USBメモリなどにドライバを入れておいて読み込ませれば良いよとアドバイスをいただきました。

やり方を調べる時間がなかったのでとりあえずUSBメモリにドライバを入れて作業開始してしまいました。

USBメモリをさしてブートさせると何やらディスクを認識していたので、勝手に読み込むとか便利機能がついているのか!

とそのまま普通にインストールを初めて、パッケージのインストールが始まったところでUSBメモリへのアクセスがすごくて

これは……となりました。

インストール時にディスクの容量確認しましょうねという話。

確認したらブート時にカーネルパラメータとして "linux dd" を入れましょうとのことでした。

今までこんな機会なかったのでさっぱりしりませんでした、そんなパラメータ。

同じく、カーネルパラメータの話ですが、

とあるアプリケーションのインストーラが事前にアプリケーション関連のファイルをチェックする機構があるのですが、

そこで、本来ないはずのSELinuxのラベルが付いていてインストーラのチェックに引っかかって作業が止まったとクレームが。

作業前にバックアップからリストアしていたのですが、dumpしたデータをrescueモードからrestoreで戻していました。

rescueモードで起動させるときに、特に何もしなかったのでSELinuxがOnになってしまっていたらしく、restore時にラベルが作成されてしまっていたようです。

これもカーネルパラメータとして "selinux=0" を与えてやるとSELinuxがOffの状態で起動できるということでした。

お勉強

STP関連

MST(Multiple Spanning-Tree)

STPでは、VLANという概念について考慮せずにひとつのSTPが動きます。

しかし、それではすべてのVLANが同じ経路を使って通信するので、普段使われない経路ができてもったいないです。

そこで、VLANごとにSTPを動かそうというのがCisco独自のPerVLAN STP です。

しかし、VLANごとにSTPを動かすと、STPが大量に動くことになってしまいます。

MSTでは、いくつかのVLANをグループ化してグループ単位でSTPを動かそうというものです。

従来のSTPとMSTでは互換性がないので、MSTが動いているグループを1つのSTP領域として見せることでSTPとMSTの同居を可能にしています。

STPからみると、MST群は大きな1つのスイッチに見えているという感じでしょうか。

お勉強

STP関連

Rapid STP

802.1w Rapdi STPは、STPの遅い部分を改良したものです。

  • ポートの種類が増えました。

DP(designated port) RP(root port) BP(blocked port)

から

DP(designated port) RP(root port) Alternate port, Backup port

に変わりました。

BP(blocked port) が用途に応じて Altrnate port, Backup portになった感じです。

RP(root port)の代用としてAlternate portが、DP(designated port)の代用としてBackup port が動作します。

RPが接続断になったらAlternate portがRPとして動き出して、 DPが接続断になったらBackup portが動作する感じです。

Backup port は同一スイッチ間を2本以上でつないだ場合にできます。

Alternate port や Backup portが複数あるときは優先度に応じて使われるものが決まります。

  • ポートの状態が減りました。

Blocking Listening Leartning Forwarding Disable

から

Discarding Learning Forwarding

に変わりました。

Blocking Listening Disable がすべてDiscardingになっています。

Discarding 状態では、ポートの種類に応じてBPDUの送受を行いますがデータの送受、MACアドレスの学習はしません。

  • STPとの違い

STPとの最大の違いはBPDUの送信です。

STPでは通常、BPDUはRoot bridge しか送信しませんが、RSTPではDPを持つすべてのスイッチがBPDUを送信します。

そのため、ForwardDelayがなくなり、BPDUを3連続で受け取れなかったら接続が切れたと判断します。

またBPDUは標準で2秒間隔でやり取りされます。そのため、障害からの収束が拘束になっています。

お勉強

STP 関連

Portfast

PortfastというのはDisable Listening Learning Forwarding の行程を経ずに すぐForwardingに移行したいポートに設定するものです。

相手がSTPをしゃべらないルータやサーバ、クライアントPCといったものが接続される予定のポートに設定します。

Portfastが無効になっていると、Listening Learning それぞれ15秒の待ちが入るので最低30秒はデータの送受信ができません。

一部のDHCPクライアントなどがこの感にタイムアウトしてしまうこともあるようです。

そんなPortfastですが、そこにスイッチを接続すると、BPDUを受け取った時点で標準ではPortfastの設定はなかったことになります

BPDU guard

BPDU guard は通常、Portfastを設定したポートに設定することが多いです。

そこにスイッチが接続されるはずがない、接続されてはまずい、というポートに設定しておくことで、スイッチがつながれてBPDUが流れてきたらそのポートを err-disabled にして接続を断してしまいます。

BPDU guardの設定は、ポート単位に個別で設定する方法と、Portfastが設定されたポートに一括で設定する方法の2つがあります。

前者はinterface configuration mode で spanning-tree bpduguard enable と設定します。

後者はgrobal configuration mode で spanning-tree portfast bpduguard default と設定します。

ちなみに、後者で設定した場合、特定のportfastが有効になっているポートで BPDU guardを無効化する場合は interface configuration mode で spanning-tree bpduguard disable と設定します。

err-disabled からの回復ですが、ポートを手動でshutdown , up する必要があります。

Root guard

Root guard は必ずしもPortfastを設定したポートだけに設定するとは限りません。

Root guard を設定したポートでは、現在のRoot Bridgge ID より優先度の高いBPDUを受信したらそのポートを一時的にroot-inconsistent blockingにして送受信を断します。

BPDUの受信がやめば再び通常のポートに戻ります。

ここでBPDUの受信がやむというのは、ForwardDelayの間BPDUが来ないということです。

設定はポート単位でしか行えず、 interface configuration mode で spainnig-tree guard root と設定します。

BPDU filter

BPDU filter も Portfastを設定したポートで使用することが多いです。

BPDU filter も BPDU guard と同様にポート単位に個別で設定する方法と、Portfastが設定されたポートに一括で設定する方法の2つがあります。

前者はinterface configuration mode で spanning-tree bpdufilter enable と設定します。

後者はgrobal configuration mode で spanning-tree portfast bpdufilter default と設定します。

後者で設定した場合、特定のportfastが有効になっているポートで BPDU filterを無効化する場合は interface configuration mode で spanning-tree bpdufilter disable と設定します。

BPDU guardでは2つの設定方法のうち、どちらの設定方法でも動作は同じでしたが、BPDU filterの場合は 設定方法によって動作に変化が生じます。

ポート単位で個別に設定した場合、そのポートではBPDUの送信、受信を全く行わなくなります。

一括で設定した場合、ポートがアクティブになったらBPDU Helloを最大11回送ります。 その間にBPDU Helloを受信しなければBPDUの送信をやめます。受信すればBPDU filter を無効化します。 BPDUの送信をやめている最中でも、BPDUを受信すればBPDU filter を無効にしてBPDUの送信を始めます。

お勉強

Spanning Tree Protocol (STP)

Spanning Tree Protocol は LANに冗長性を持たせたいけれど、ループになると困るというときに使う技術です。

スイッチ2つを2本のケーブルで普通につなぐと、そこがループになってしまいます。

パケットをブロードキャストで飛ばすとスイッチ間をひたすら行ったり来たりするように。

するとすごくパフォーマンスが落ちます。

なので、2本つないでおくんだけど、普段は片方しか通信しないようにするのがSTPです。

3つのスイッチをそれぞれつないで3角形にしたときなんかも、1カ所使わないようにしてループをなくします。

で、どこかが切れたら今まで使わなくしていたところを使うように自動で切り替えます。

なんでTree(木)なのかというと、1つのスイッチを頂点にしたツリー構造を作るからです。

図がないと辛い。

Spannin Tree Protocol は IEEE 802.1d 802.1w 802.1s などで定められています。

普通STPと呼んでいるのは802.1dで、Rapid STP(RSTP) というと 802.1w Multiple STP(MSTP) というと 802.1sをさすことが多いです。

最新の802.1d(2004)では 802.1wを取り込んでしまっているので802.1dといたっときにどれをさすのかややこしいです。

ちなみに802.1sは 802.1Q (2005) に取り込まれています。

STP

いわゆるSTPについて。

STPはBPDU(Bridge Protocol Data Unit)というのをやり取りして 木を作ります。

手順は

木のトップを決める 使うノード間接続を決める、使わないノード間接続の役割を決める。 という3段階です。

まず、互いにBPDUを送りあって、もっともBridgeIDが低いノードを探します。それが木のトップになります。

次に木のトップが決まったらトップからBPDUを送信します。

他のスイッチは受け取ったBPDUのうち、コストが最も低いポートを上位との接続ポートにします。

この時点で木が完成します。

最後に接続されてるルートの両端とも上位との接続ポートに指定しなかったルートについて、

どちらが上位かを決めます。

ポートには DP(designated port) RP(root port) BP(blocked port) の3種のがあります。

ポートの状態には Blocking Listening Leartning Forwarding Disable の5種類があります。

実際の動作は

STPを動作させるとまずすべてのポートがBlockingになります、次にListeningになってBPDUを送受します。

そして、最もBridgeIDの低いスイッチ(Root Bridge)が決まると、そこからBPDUが順に流れてきます。

BridgeIDですが、16ビットの優先度と48ビットのMACアドレスによって決まります。

優先度については自由に決められるので、優先度を使ってRoot Bridgeを任意に選出させることができます。

Root Bridge以外のスイッチは、流れてきたBPDUのうちコストが最も小さなものが流れてきたポートをroot portにします。

コストが同じ時は送信してきたスイッチのBridgeIDが小さい方をroot portにします。 BridgeIDも一緒だった時はPortPriorityで決めます。

root port の対向は designated port になります。(なのでRoot Bridgeのポートは全部designated portです。)

ちなみにコストは標準だと インターフェース速度によって決まりますが、手動で任意の数値を割り当てることもできます。

重要なことですが、コストは"入ってきたインターフェース"のものをプラスするということです。

Root Bridgeから出たBPDUのコストはすべて0です、受け取った側がポートのコストを追加します。

そして、受け取ったBPDUのコストが一番小さいものをその他のポートから流します。