2015年2月20日金曜日

PowerCLIでvCneter Serverに接続する際にパスワードファイルを使って認証する方法

vCenter ServerにPowerCLIで接続するコマンドレットはConnect-VIServerとなる。vCenter ServerのOSに直接ログインしてPowerCLIを使う場合は、接続先にlocalhostを指定することで、ユーザー名やパスワードを求められることは無く接続が可能。
Connect-VIServer -Server localhost
しかし、他サーバーや端末から接続しようとすると、ユーザー名・パスワードを求められるポップアップが表示されてしまう。手作業であれば問題ないが、スクリプト等で実行しようとすると不便であり、かと言って、
Connect-VIServer -Server localhost -User hoge -Password hogepass
といったように、パスワードを平文で書いてしまうのもセキュリティ上問題となるので、パスワードファイルを生成して読み込ませる方法を記載する。この方法はPowerCLIに限らず、PowerShellのスクリプトでも活用できるはず。

実施方法

事前に「本スクリプト実行サーバ」にて、以下コマンドにてSecureString型のパスワード生成する。

Read-Host -AsSecureString | ConvertFrom-SecureString | Out-File vcpwd.txt

コマンドを実行した後パスワードを入力してEnterを押せば、vcpwd.txtというファイルが作成される。

上記パスワードファイルを読み込ませてvCenter Serverに接続し、色々処理をした後切断するスクリプトは以下の通り。
# vCenterサーバへ接続
$VCENTER = "192.168.1.100"             # vCenter ServerのIPアドレス
$VCUSER = "vcenteruser"                # vCenter Serverログインユーザー

$secpasswd = cat vcpwd.txt | ConvertTo-SecureString
$cred = New-Object System.Management.Automation.PSCredential ($VCUSER, $secpasswd)
$vi = Connect-VIServer -Server $VCENTER -Credential $cred

~ここに処理を書く~

# vCenterサーバより切断
Disconnect-VIServer -Server $vi -Force -Confirm:$False

exit 0

2015年2月19日木曜日

TeraTermやPowerShellで右クリック1回したらクリップボードの中身が貼り付けられてしまう機能を停止する

インフラエンジニアやっていれば、Linuxの設定やスイッチのconfig等を編集する際に、予めテキストで作っておいたものをTeraTarm等で貼り付けて流す行為をよくやると思う。

この貼り付ける機能は、TeraTermやコマンドプロンプト、PowerShellではマウスの右クリックで実施できるようになっているが、逆に言えば右クリック一回でクリップボードの中身が全て貼り付けられてしまい、事故に繋がることがある。

そのため、特に保守運用を実施する場面では、右クリック1回での貼り付け機能を停止し、1回確認が実施されるプロセスを挟むようにすると良い。今回はその方法について記載する。

TeraTerm

日本語UIの場合は、[設定]→[その他設定]→[コピーと貼り付け]タブを選択する。英語UIの場合は[Setup]→[Additional settings]→[Copy and Paste]タブを選択する。以降は日本語UIにて説明する。



設定項目とその意味は以下になる。言ってしまえば、デフォルトのままがオススメ。

継続行コピーを有効にする (デフォルト:チェック有)
TeraTerm等で1行が長いと右端で折り返されて表示されるが、その行をコピーした際に、改行を入れないで1行としてコピーするためのオプション。基本的に有効にしておけば良い。

右クリックでの貼り付けを無効にする (デフォルト:チェック無)
TeraTerm上で右クリックを押しても何も反応しなくなる。不便なので原則チェックしない。

右クリックでの貼り付けを確認する (デフォルト:チェック無)
右クリックですぐに貼り付けられるのではなく、右クリックメニューとして、「貼り付け」と「貼り付け<CR>」を選ばなければペーストされなくなる。好みで有効にする。より安全を求めるなら有効にすべきだが、最近のTeraTermは改行コードが入っている文字のペーストは一度確認ポップアップが出るので、無効にしてもそこまで危険では無いと思う。

中クリックでの貼り付けを無効にする (デフォルト:チェック有)
ホイールのクリックで貼り付けたいという変わった方は、好みでこちらのチェックを外せば良い。

左クリックでののみ選択を確認する (デフォルト:チェック有)
チェックを外せば右クリックでも文字の選択ができるようになる。この場合、範囲選択完了直後にペーストされるようになる。こちらも好みで設定する。

危険なクリップボードの貼り付けを確認する (デフォルト:チェック有)
キーワードファイルを選択し、特定ワードがあると、「クリップボードの確認」のポップアップが表示されるようにある。例えば、haltと書いたキワードファイルを設定しておけば、haltが含まれた文字をペーストしようとすると改行が無くても確認ポップアップが表示される。

区切り文字
キーワードファイルの単語の区切り文字を設定できる機能、、、と思われる(きちんと使っていないので良くわからない)。

貼り付け行間遅延 (デフォルト:10ms)
シリアルポートの場合は、転送速度の関係からコマンド欠けが発生することもあるので設定することはあったが、SSHでも貼り付け時の各コマンドの遅延時間を設定できる。ただし、SSHで帯域も十分にあるのであれば、特にデフォルト値から変更は不要と考える。

コマンドプロンプト

タイトルバーを右クリック→[プロパティ]→[オプション]タブの[簡易編集モード]のチェックを外せば良い。逆にチェックすると右クリックで貼り付け放題になる。

[簡易編集モード]を無効にした場合のコマンドプロンプトでのコピー&ペーストの方法は以下手順で実施する。ちょっと面倒。
①コマンドプロンプトで右クリック→[範囲指定]を選択
②文字列を左クリックで選択
③Enterにてコピー
④コマンドプロンプトで右クリック→[貼り付け]を選択

PowerShell

コマンドプロンプトと全く同様。タイトルバーを右クリック→[プロパティ]→[オプション]タブの[簡易編集モード]のチェックを外せば良い。逆にチェックすると右クリックで貼り付け放題になる。

[簡易編集モード]を無効にした場合のPowerShellでのコピー&ペーストの方法はコマンドプロンプト同様、以下手順で実施する。
①コマンドプロンプトで右クリック→[範囲指定]を選択
②文字列を左クリックで選択
③Enterにてコピー
④コマンドプロンプトで右クリック→[貼り付け]を選択




2015年2月15日日曜日

Excelで簡易的に棒グラフを作る関数REPT

Excelの小ネタ。「指定した文字列を数字の回数だけ繰り返す」という関数がExcelにあって、REPT関数という。

使い方としては、昔のMS-DOSやLinuxのように文字で棒グラフを作ることに適している。例えば、以下の様なa~eの得点表があるとする。

a80
b20
c31
d64
e100

これをREPT関数を使って、「=REPT("|",B2)」のように入れてやると、、、

a 80 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
b 20 ||||||||||||||||||||
c 31 |||||||||||||||||||||||||||||||
d 64 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
e 100 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

上記の通り"|"文字のグラフで表現でき、数字の差を直感的に把握することができる。

2015年2月14日土曜日

VMwareの標準機能を使ったバックアップとリストアの比較


仮想マシンをバックアップしてリストアする方法について、特別なバックアップソフトウェアを使わずに標準機能のみにて実現することを検討してみた。以下3パターンの方法を実際に試し、メリデメ比較を行ってみた。
  1. 仮想マシンのクローンを使う
  2. OVFテンプレートのエクスポートを使う
  3. データストアから直接vmdkファイルをぶっこ抜く
比較結果を以下に記載する。

テスト用の仮想マシン情報

今回テストに利用する仮想マシンの情報は以下の通り。
仮想マシン名:RHEL61_64
仮想ディスクサイズ:16GB (Thin Provision)
OSの使っているディスク容量:約3GB
仮想ディスクはThinで作成しているので、実際の容量は16GBよりも小さい。ESXiのDCUIにて直接vmfs領域を見てみると以下の通り。実際の容量は合計で3.6GBとなる。
/vmfs/volumes/51d55cb3-dbe9bff0-0eeb-d89d6714e6d5/RHEL61_64 # du -ah .
3.6G    ./RHEL61_64-flat.vmdk
64.0K   ./RHEL61_64.vmdk
64.0K   ./RHEL61_64.nvram
64.0K   ./RHEL61_64.vmx
64.0K   ./RHEL61_64.vmxf
64.0K   ./RHEL61_64.vmsd
1.0M    ./vmware-8.log
1.0M    ./vmware-9.log
2.0M    ./RHEL61_64-ctk.vmdk
1.0M    ./vmware-11.log
1.0M    ./vmware.log
1.0M    ./vmware-6.log
1.0M    ./vmware-7.log
64.0K   ./RHEL61_64-1.png
1.0M    ./RHEL61_64-2.png
1.0M    ./vmware-10.log
3.6G    .

仮想マシンのクローンを使う

仮想マシンのクローンにて仮想マシンを複製してバックアップするという方法。作業手順としては最もシンプルだし、VAAIの効果もあって複製に必要となるデータコピーの時間も短くなる可能性がある。また、仮想マシン稼働中にも取得できるというメリットも大きい。ただし、クローンを使うにはvCenter Serverが必要となる。

容量はもとの仮想マシンと完全に同じになるため、今回の場合では3.6GB程度のデータコピーが発生する。

リストアしたい時に元の仮想マシンを止めて、クローンを起動させるだけで復旧できてしまうため、とてもお手軽。

OVFテンプレートのエクスポートを使う

vCenter Serverが無くてもESXの機能として実施可能な「OVFテンプレートのエクスポート」。以下の通りファイル容量が最もコンパクトになる(3.6GB→1.3GB)。詳細は不明だが、OVFテンプレート作成時に圧縮をかけてくれるようだ。
2015/02/05  09:31    <DIR>          .
2015/02/05  09:31    <DIR>          ..
2015/02/05  09:31     1,363,008,512 RHEL61_64-disk1.vmdk
2015/02/05  09:31               133 RHEL61_64.mf
2015/02/05  09:31            11,257 RHEL61_64.ovf
               3 個のファイル       1,363,019,902 バイト
一度Datastore外の領域に保存する必要があるのでネットワーク経由でのコピーとなるため、データコピーの速度はあまり高望みはできない(エクスポート先のサーバーを10GbpsのNICを付けるとかすれば別だが)。

ちなみに注意事項としては、仮想マシンの仮想CDドライブにISOファイル等をマウントしたままエクスポートしてしまうとインポート時に失敗するので注意。やってしまった場合でも回避方法はあって、ovfファイルの該当箇所を書き換えてmfファイルのハッシュ値を再計算して更新すれば良い。詳しくは別記事で記載している。

リストアは「OVFテンプレートのデプロイ」にて実施する。特に小難しいことは何もなく、ウィザードに従ってデプロイすれば良い。

データストアから直接vmdkファイルをぶっこ抜く

vSphere Clientからデータストアブラウザを使ってダウンロードした場合、ディスクをThinで作っていたとしても、Thickの容量に展開されてダウンロードされるようだ。従って、容量的に大きくなってしまい、シンプロビジョニングのメリットも全て失われることから、この方法を選択する理由は全くないと思う。

以下はデータストアブラウザからコピー後の各ファイルの容量(3.6GB→16GB)。データストアブラウザと実際のコピーしたファイルの名称には若干差があって、たとえばvmdfファイルは***-flat.vmdkファイルという名称にてダウンロードされる。
2015/02/05  09:44    <DIR>          .
2015/02/05  09:44    <DIR>          ..
2015/02/04  17:39            10,790 RHEL61_64-1.png
2015/02/04  17:39           700,121 RHEL61_64-2.png
2015/02/04  17:39         1,049,088 RHEL61_64-ctk.vmdk
2015/02/04  17:39    17,179,869,184 RHEL61_64-flat.vmdk
2015/02/04  17:39             8,684 RHEL61_64.nvram
2015/02/04  15:53               606 RHEL61_64.vmdk
2015/02/04  17:39                43 RHEL61_64.vmsd
2015/02/04  17:39             3,762 RHEL61_64.vmx
2015/02/04  17:39               264 RHEL61_64.vmxf
2015/02/04  17:39           778,394 vmware-10.log
2015/02/04  17:39           127,005 vmware-11.log
2015/02/04  17:39           223,817 vmware-6.log
2015/02/04  17:39           127,871 vmware-7.log
2015/02/04  17:39           208,558 vmware-8.log
2015/02/04  17:39           125,719 vmware-9.log
2015/02/04  17:39           127,634 vmware.log
              16 個のファイル      17,183,361,540 バイト
リストアはこのファイルをデータストアブラウザでアップロードして、vmxファイルをインベントリに追加すればできるはず(未検証)。

まとめ

以下に比較した3案のメリット・デメリットを記載する。リストアの早期復旧が必要ならばクローンを、バックアップ先のディスク容量を節約するならOVFテンプレートのエクスポートが良いと思う。

仮想マシンのクローンを使う

・メリット:vCenter Serverの標準機能であり手順がシンプル・SAN経由での仮想マシンコピー可能・仮想マシンON中でバックアップ可能・最もリストアが早い
・デメリット:vCenter Serverが必要

OVFテンプレートのエクスポートを使う

・メリット:vCenter Server不要・バックアップ容量が最もコンパクト・仮想マシンをファイルとして扱えるため取り回しし易い(さらにテープへバックアップなども可能)
・デメリット:NW経由のバックアップとなるためNW帯域がボトルネックになる

データストアから直接vmdkファイルをぶっこ抜く

・メリット:無いと思う…
・デメリット:バックアップ容量が最も大きい・NW経由のバックアップとなるためNW帯域がボトルネックになる


2015年2月13日金曜日

謎のコマンドyesの使い方(Linux標準コマンドでCPU・メモリに負荷を掛ける方法)

Linuxには"yes"というコマンドがある。最初何だそれは、と思ったコマンドだが、案外使い道の多いコマンドだったので、まとめてみた。

基本編

「"y"を一文字入力して改行するを無限に繰り返す」が基本動作となる。
# yes
y
y
y
y
y
~以下略~
y
y
^C   ←Ctrl + Cで止める
#
yesの後に文字列を書けば、その文字列が繰り返される。
# yes no
no
no
no
no
no
~以下略~
no
no
^C   ←Ctrl + Cで止める
#
このコマンドの意図される使い方は、rmコマンド等でyes/noを求められる際にyesをパイプで渡してやると、いちいち"y"を押してエンターする手間が省けるという使い方ができることらしい。rmでは-fオプションあるから、よほど変わった人では無い限り常用はしないだろうが、-fオプションの無いコマンドでは使い道はあるかもしれない。
# yes | rm testfile.txt
rm: remove 通常ファイル `testfile.txt'?    ←間髪入れずにyが入力される
#

応用編

このコマンドの真髄は、アイデアによって面白い使い方ができることだと思う。特にサーバーへ負荷を掛けるにはうってつけである。

CPUに負荷を掛けるyes

# yes > /dev/null
※CPU負荷が高くなる原理:/dev/nullに"y"を無限に出力する。この処理がCPUを使い切る程の速度で実行されるため(画面描写が無いので超高速)

メモリに負荷を掛けるyes

# /dev/null < `yes`
または
# /dev/null < $(yes)
※メモリ負荷が高くなる原理:/dev/nullに`yes`(=$(yes))を入力する。無限に続くyが入力されることによって、メモリを沢山使ってくれるらしい(理解不足)

ちなみに、この処理は徐々にメモリ使用量が上がっていく動作をするので、早く上げたい場合は、yesの後に文字列を付与すると多少早くなるようだ。
# /dev/null < `yes aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`

参考URL

UNIXシェルスクリプトメモ
http://www.ne.jp/asahi/hishidama/home/tech/unix/sh.html



人気の投稿