2012年6月27日水曜日

python2.6でUnicodeEncodeErrorが発生した

環境



  • CentOS 5.4

  • python2.6(野良パッケージ)


現象


手元の環境で、tomahawk 0.5.2を使おうと思ったら、下記のようなエラーが
UnicodeEncodeError: 'ascii' codec can't encode characters in position 20-22: ordinal not in range(128)

対応


pythonのディレクトリに、site-packagesというディレクトリがあるかと思うので、その直下に、sitecustomize.py ってのをつくり以下の様な記述をします。
[python]
import sys
sys.setdefaultencoding('utf-8')
[/python]

これでOK。(∩´∀`)∩ワーイ

参考にさせていただきました



おまけ


tomahawk動かすのに、下記のパッケージをぼくの環境では追加導入が必要でした。(直接インターネットに出れない環境だったので大変だった。。。)

  • argparse-1.2.1

  • pexpect-u-2.5.1

  • setuptools-0.6c11

2012年6月19日火曜日

rsyncの備忘録

よく使うところを中心に。

 

素敵なオプションたち


よくある使い方


rsync -avz srcDIR/ dstDIR


  • -a


    • 元の属性を維持(できる範囲で)


  • -v


    • 詳細表示


  • -z


    • 転送を圧縮(CPUを割りと食うので注意)



ちょっと便利な使い方



  • --bwlimit


    • 帯域制限。例えば、--bwlimit=10240 とかで10Mbps制限


  • --progress


    • 転送中の情報を表示する。-vと組み合わせて使おう


  • --partial


    • 通常では転送が中断したら、部分的に転送されたファイルを削除する。--partial オプションを使うと、後の転送時にファイルの残り分を転送して高速化するように、部分的なファイルを保存してくれる。


  • -P


    • progress + partial


  • --append


    • 通信が切れた時に途中から再開してくれる。便利。




使用例


[bash]
        rsync -av --progress --partial --append --bwlimit=10240 ${IP_ADDRESS}:/hoge/fuga/ /hoge/fuga >> /tmp/hoge.log 2>&1
[/bash]

その他



  • 時間がかかるときは、--daemon してもいいですが、個人的にはscreenとかnohupとか使うのが癖になってます。


参考にしました


2012年6月13日水曜日

atime備忘録(古い情報)

ふわっとしてたので備忘録です。最近のディストリで検証とかできたらいいなぁ(遠い目)

ファイルに関する時刻






UNIX/Linuxではファイルに関して3つの時刻を記録しています。

  • atime


    • 最終アクセス時刻


  • ctime


    • 最終変更時刻


  • mtime


    • 最終更新時刻(i-node管理)



2008年にネットで話題になってた話







その他参考情報


RAID組むとき考えたこと(1)

The new RAID
autor:boboroshi

LSI MegaRAID SAS 9280-8e というイイRAIDカードを使ったので備忘録がてらのメモです。

ぼくはこれまで、ちゃんとしたRAIDカードを多用する感じで仕事してないので、こちらが参考になりました(やっ太郎ブログ

さて、今回の構成です。

今回の構成







  • 某社の1Uサーバ

  • LSI MegaRAID SAS 9280-8e

  • 某社のSAS接続ディスクエンクロージャ(SATA 2TB X 16で、RAID6)

  • CentOS 5.4

  • いわゆるDAS構成

  • 用途は巨大なファイルサーバです。NFSマウントして使用します。


考えたこと


HDDの話



  • a.(平均)シーク待ち時間

  • b.(平均)回転待ち時間(サーチ時間)

  • c.転送時間


大雑把に言うと、a + b + c = 応答時間(アクセス時間) となります。
a + b = 待ち時間 ですね。
1 / 応答時間 = IOPS

となります。
下記は、基本情報技術者試験みたいな話ですが...

a.(平均)ヘッドのシーク待ち時間


読み書きのためにヘッドが移動(シーク)するのにかかる時間のことです。通常外周と内周では速度が変わるため、平均値が使われます。

b.(平均)回転待ち時間(サーチ時間)


データが磁気ヘッドの下に来るまでの平均時間なので、最小0、最大1、なので1/2してます。
サーチ時間=1/2 * 1回転の時間
1回転の時間(ミリ秒)=60秒*10^3 / 1分間の回転数

c.転送時間


転送時間=データのバイト数 / 転送速度
転送速度=1トラックのバイト数 / 1回転の時間

つまり


当然ですが、回転数が早いほうが応答時間としては短くなります。
例えば一般的な、SATA HDDの場合、5,400rpmより、7,200rpmのほうが早いということになります。

コントローラの設定の話


write policy


今回のRAIDカードのようにバッテリーバックアップ付ライトキャッシュ(BBWC)が搭載されている場合、ライトキャッシュを有効にしたほうがよいケースが多いと思います。

当然、ライトキャッシュがあっても、書き込みデータはそこからあふれるわけですが、コントローラ側の実装により、隣接領域を連続して書き込んでくれるなど、キャッシュなしの場合に比べパフォーマンスが向上することが期待されます。

キャッシュ有効化し、キャッシュに書き込みを完了した時点で完了通知を出すのをライトバック。キャッシュを使用しない(無効化している)書き込みをライトスルーといいます。

今回はライトバックの設定としました。

read policy


書き込み同様、読み取りのポリシーもいくつかあります。

Adaptive
シーケンシャルリードと想定されれば先読みする。いわゆる混合系。

Read ahead
常に先読み

No .read ahead
先読みしない

とありますが、今回はファイルサーバなので、シーケンシャルリード主体と判断してRead aheadとしました。
DBであれば、ランダムアクセス主体なので、No .read aheadか、Adaptiveのほうがよいかもしれません。

ディスクキャッシュ


ディスクにも通常キャッシュが搭載されていますが、バッテリーバックアップが無い為、マシンのクラッシュ時には消えてしまう可能性があります。そのため、エンタープライズ系のHDDはよくデフォルトでディスクキャッシュが無効化されているのですが、されていない場合は明示的に無効化する必要があります。

Cache Policy


これいまいちよくわからなかったのですが、マニュアルを見る限り、読み取り処理を行ったあと、データをリードキャッシュに格納するかの設定っぽいです。

LSIならでは?なのかな??

Direct
キャッシュされない。ただし、Read aheadで読み込んだブロックはリードキャッシュに残る(っぽい)
Cached
すべての読み取りがキャッシュされる。

とりあえず、chachedにしてみました。が、いろいろ海外のブログとか漁った感じだと、Direct I/Oでいいのかもしれません。このへん参照。

実際の設定


[bash]
#バッテリキャッシュの強制(常時ライトバック)
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -CachedBadBBU -Immediate -LALL -aAll

#ライトバック設定
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -WB -Immediate -LALL -aAll

#read ahead設定
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -RA -Immediate -LALL -aAll

#ディスクキャッシュの無効化
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -DisDskCache -Immediate -LALL -aAll

#I/O Poclicyを設定(cached にしたけど、directのほうがよさげ)
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -Cached -Immediate -LALL -aAll
[/bash]

結果こんな感じ
[bash]
/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LALL -aAll

Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name :
RAID Level : Primary-6, Secondary-0, RAID Level Qualifier-3
Size : xxx TB
State : Optimal
Stripe Size : 512 KB
Number Of Drives : 16
Span Depth : 1
Default Cache Policy: WriteBack, ReadAhead, Cached, Write Cache OK if Bad BBU
Current Cache Policy: WriteBack, ReadAhead, Cached, Write Cache OK if Bad BBU
Access Policy : Read/Write
Disk Cache Policy : Disabled
Encryption Type : None
[/bash]




MegaCli64のコマンド自体は、ネット上にコマンドリファレンスが転がっているので、それを参考にするのがよいかと思います。

区切りがいいので今回はこのへんで。
書ききれなかった「RAIDレベル」「フルストライプ書き込み」等については、次に触れたいと思います。

なお、当たり前ですが上記の記述は環境によって正しい場合と正しくない場合があります。

参考


これすばらしい本です

2012年6月1日金曜日

非対話型でパーティションを切る話

今どきのLinuxだと、fdiskというより、partedでいいですよね。
partedはいろいろ良い所がありますが、「--script(-s表記も同じ)」をつけると、非対話型モードとしてバッチ処理できるのがとても便利です。

下記の例はCentOS 5系での動作になります。
使用例
[bash]
#sdbのパーティションを表示
/sbin/parted --script /dev/sdb 'print'

#ディスクラベルの設定。2TB以上とかだと「mklabel gpt」とかにすればよいですね。
/sbin/parted --script /dev/sdb 'mklabel msdos'

#パーティションを作成します
/sbin/parted --script /dev/sdb 'mkpart primary 0 -0'

#適当なファイルシステムでフォーマットする
/sbin/mkfs.ext3 /dev/sdb1
[/bash]

実行例
[bash]
# /sbin/parted --script /dev/sdb 'mklabel msdos'
# /sbin/parted --script /dev/sdb 'mkpart primary 0 -0'
# /sbin/mkfs.ext3 /dev/sdb1
# /sbin/parted --script /dev/sdb 'print'

Model: xxx (scsi)
Disk /dev/sdb: 300GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number Start End Size Type File system Flags
1 0.51kB 300GB 300GB primary ext3

[/bash]