やっぱり Sun がスキ! : Weblog やっぱり Sun がスキ!

やっぱり Sun がスキ!

http://blogs.sun.com/yappri/date/20071225 2007年 12月 25日 火曜日

巷で話題の 64 スレッドマシンがやってきた!〜へっぽこ SE 奮闘記〜

「巷で話題の 64 スレッドマシンがやってきた! (^o^)/」
Niagara2 というコードネームで呼ばれていた Ultra SPARC T2 チップを搭載した
Sun SPARC Enterprise T5220 Server が用賀オフィスに届いたという噂を聞き、
その実機の内部を調査するため突撃リポートを行ってきましたのでご報告♪

T5220_17

まず初めに Sun SPARC Enterprise T5220 Server 製品を知らない方の為に簡単にご紹介。

T5220 は Ultra SPARC T2 という次世代の CPU を搭載したラックマウント型のサーバで
ハイパフォーマンス、低消費電力、低発熱と世界最高水準の設置効率と電気効率を実現
する次世代のプラットフォームです。


T5220_01

Ultra SPARC T2 は 8 個の物理コアを搭載し一つあたりの物理コアの上で 8 つのスレッドが
動きますので 8 x 8 で計 64 のスレッドのハイパフォーマンスな処理を実行できます。
また Solaris OS はスレッドを従来の物理 CPU リソースと分け隔て無く単純に CPU リソース
として扱いますので、アプリケーション からは 64 個の CPU リソースを持ったプラットフォーム
として見えます。CPU の複雑性や新実装部分はアプリケーションからは見えませんので、
このように革新的な CPU 実装が行われているにも関わらず、従来の SPARC プラットフォーム
向けに作られたプログラムをそのまま何も変更することなく Ultra SPARC T2 上で動作させる
ことができるのが大きな特長です!


【1】psrinfoコマンド結果
[/]# psrinfo
0       on-line   since 12/14/2007 16:17:36
1       on-line   since 12/14/2007 16:17:39
2       on-line   since 12/14/2007 16:17:39
3       on-line   since 12/14/2007 16:17:39

・・・ちょっと長すぎるので・・中略 (^o^)・・・

59      on-line   since 12/14/2007 16:17:39
60      on-line   since 12/14/2007 16:17:39
61      on-line   since 12/14/2007 16:17:39
62      on-line   since 12/14/2007 16:17:39
63      on-line   since 12/14/2007 16:17:39

さて、そんな次世代の CPU を搭載したサーバ・プラットフォーム T5220 。実際に実機の蓋を
開けて一つ一つのパーツを詳しく調査することが出来ましたので写真付きでご紹介致します。

T5220_02

T5220 ではたった 2RU の筐体ですが、その内部には非常に高密度にパーツが搭載されています。
正面には 8 つの HDD と DVD ドライブが搭載され、背面には 冗長化された電源モジュールと
オンボードで 4 port の GbE 、そして 6 つの PCI スロットが搭載されています。このように
64 スレッドの CPU リソースを十二分に活用する為の足回りと拡張性が考慮された、高密度な
実装となっています。

T5220_04

蓋を開けて誰もが驚くのが、高密度にパーツが搭載されているのに設計はシンプルであること。
十分に空気の流れを考慮したパーツの配置はまさに究極の機能美といえるほどの美しさです。

T5220_06

T5220 のコアリソースとなる CPU の Ultra SPARC T2 は非常に低消費電力、低発熱な設計なので
CPU ファンは搭載されておらず冷却装置は小さなヒートシンクのみです。

多くの方が「CPU ってどこにあるの?」「えええ、これ?こんなに小さいの?」っと驚かれますが
このヒートシンクの小ささが何より Sun が他社に比べて如何に環境にやさしいプラットフォームを
市場に投入できているかの指標とも言え、非常に自負できる点です。

T5220_08

Ultra SPARC T2 には 4 つのメモリコントローラが搭載されその先に計 16 本の FB-DIMM が繋がれる
設計をとります。4 GB の DIMM を用いれば最大 64 GB のメモリをシステムに搭載することができ、
64 スレッドもの強大な CPU リソースに対比しても十分なメモリ帯域とメモリ容量で対応できる設計と
なっています。

FB-DIMM には熱を効率的に逃がすためのヒートシンクが付けられていて少し次世代的なデザインの
DIMM モジュールです。アクリルボードのエアーガイドが筐体に搭載されており空気の流れを集約的に
DIMM に沿って整わせることで筐体内の空冷をより効率の良いものに高めています。 (^o^)

T5220_07

Ultra SPARC T2 は驚くことにその CPU ダイ上に Dual 10 Gbit Ethernet モジュールを搭載して
います。 6 本 の PCI スロットの基盤の内の 2 本には PCI-E スロットの他に XAUI スロットが
搭載されていて、ここに 10 GbE XAUI Option Card をそれぞれ挿すことで 10 GbE の機能を非常に
低コストで最大 2 Port まで増設できます。

ここでポイントになることは CPU ダイ上に 10 Gbit Ethernet モジュールが実装されているので
CPU に直結であるということ。間に PCI Express のチップは介さないので独立した十分な帯域で
CPU と通信することができ、十二分に 10GbE 性能を発揮できる構造になります。

T5220_12 T5220_13

T5220 には最大 8 台の 2.5 inch の HDD を搭載可能です。2.5 inch とはいえ SAS Drive
モデルは 10000 回転の高速な HDD であるため十分な I/O 性能を発揮できます。

個人的に感動したのはこの HDD のブラケットの質感。アルミでしっかりと作られているので
グリップ部分の不安定感もなくカチっとはまる瞬間の心地良さは何とも言えません (笑)

T5220_15 T5220_09

FAN モジュールが故障し交換が必要になった際はラックマウントされてる T5220 を少しだけ
引き出して筐体上部の小窓を開くことでシステムを稼働させたまま FAN モジュールの交換を行う
ことが可能です。

FAN モジュールは二つの FAN が合わさって一体化されたもので T5220 には 3 モジュールの
計 6 個の FAN によって冷却されます。

FAN モジュールを挿入する列は 2 列ありますが Ultra SPARC T2 の発熱量が非常に小さい為
フルで FB-DIMM を実装したパターンでも 1 列のみを使用します。

T5220_10 T5220_11

FAN モジュールはドライバーレス設計で工具を用いずに交換が可能です。プラスチックの
外枠にはゴム足が取り付けられていてモジュールの振動を防ぐ設計になっています。

T5220_14

電源モジュールは冗長化されていて、どちらか片側が壊れてもシステムへは十分な電力が
供給できる設計になっています。電源はホットスワップ交換が可能な設計になっていますので
故障時にシステムに影響を与えることなく交換作業を行えます。

T5220_16

限られたスペースに多くのパーツを配置するための工夫が至る所で見られます。特に前面の
USB ポートは DVD-ROM Drive に一体化されて実装されていて、非常にコンパクトに収まって
います!この思い切りの良さに驚きました (^o^)

最後に、今回お見せしきれなかった T5220 の内部構造の詳細を "prtdiag -v" コマンド結果の
情報をお伝えすることで、お届けしようと思います (^o^)

【2】prtdiag -v コマンド結果
[/]# prtdiag -v
System Configuration:  Sun Microsystems  sun4v SPARC Enterprise T5220
Memory size: 65408 Megabytes

========================= CPUs ===============================================

                            CPU                 CPU  
Location     CPU   Freq     Implementation      Mask 
------------ ----- -------- ------------------- -----
MB/CMP0/P0   0     1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P1   1     1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P2   2     1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P3   3     1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P4   4     1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P5   5     1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P6   6     1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P7   7     1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P8   8     1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P9   9     1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P10  10    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P11  11    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P12  12    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P13  13    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P14  14    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P15  15    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P16  16    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P17  17    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P18  18    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P19  19    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P20  20    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P21  21    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P22  22    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P23  23    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P24  24    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P25  25    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P26  26    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P27  27    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P28  28    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P29  29    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P30  30    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P31  31    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P32  32    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P33  33    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P34  34    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P35  35    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P36  36    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P37  37    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P38  38    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P39  39    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P40  40    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P41  41    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P42  42    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P43  43    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P44  44    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P45  45    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P46  46    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P47  47    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P48  48    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P49  49    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P50  50    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P51  51    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P52  52    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P53  53    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P54  54    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P55  55    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P56  56    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P57  57    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P58  58    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P59  59    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P60  60    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P61  61    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P62  62    1417 MHz SUNW,UltraSPARC-T2           
MB/CMP0/P63  63    1417 MHz SUNW,UltraSPARC-T2           

============================ Memory Configuration ============================
Segment Table:
-----------------------------------------------
Base Address Size    Interleave Factor Contains            
-----------------------------------------------
0            64 GB   0                 MB/CMP0/BR0/CH0/D0            
MB/CMP0/BR0/CH0/D1            
MB/CMP0/BR1/CH0/D0            
MB/CMP0/BR1/CH0/D1            
MB/CMP0/BR2/CH0/D0            
MB/CMP0/BR2/CH0/D1            
MB/CMP0/BR3/CH0/D0            
MB/CMP0/BR3/CH0/D1            

========================= IO Configuration =========================

            IO                                                                                         
Location    Type  Slot Path                                          Name                      Model   
----------- ----- ---- --------------------------------------------- ------------------------- ---------
MB/PCIE      PCIE   MB          /pci@0/pci@0/pci@1/pci@0/pci@1/pci@0     pci-pciexclass,060400          
MB/NET0      PCIE   MB      /pci@0/pci@0/pci@1/pci@0/pci@2/network@0    network-pciex8086,105e          
MB/NET-1     PCIE   MB        /pci@0/pci@0/pci@1/pci@0/pci@2/network    network-pciex8086,105e          
MB/NET-1     PCIE   MB          /pci@0/pci@0/pci@1/pci@0/pci/network    network-pciex8086,105e          
MB/NET-1     PCIE   MB          /pci@0/pci@0/pci@1/pci@0/pci/network    network-pciex8086,105e          
MB/PCIE      PCIE   MB                     /pci@0/pci@0/pci@2/scsi@0         scsi-pciex1000,58 LSI,1068E

========================= HW Revisions =======================================

System PROM revisions:
----------------------
OBP 4.27.1 2007/09/14 15:17

IO ASIC revisions:
------------------
Location             Path                                          Device                         Revision
-------------------- --------------------------------------------- ------------------------------ ---------
MB/PCI-SWITCH0                                        /pci@0/pci@0              pciex10b5,8533.aa   170
MB/PCI-SWITCH2                            /pci@0/pci@0/pci@1/pci@0              pciex10b5,8517.ad   173
MB/GBE0                   /pci@0/pci@0/pci@1/pci@0/pci@2/network@0     pciex8086,105e.108e.105e.6     6
MB/SAS-SATA-HBA                          /pci@0/pci@0/pci@2/scsi@0       pciex1000,58.1000.1000.2     2

【参考情報紹介】

今回ご紹介した Sun SPARC Enterprise T5220 をより詳しく知りたい方は以下の
製品情報のページを是非ご覧下さい。

また Sun SPARC Enterprise T5220 が如何に低消費電力・低発熱であるかを確認され
たい方は以下の場所に Power Calculator がありますのでお試し下さい (^o^)

□ Sun SPARC Enterprise T5220 Server 製品情報

  http://www.sun.com/servers/coolthreads/t5220/

□Sun SPARC Enterprise T5220 Power Calculator

  http://www.sun.com/servers/coolthreads/t5220/calc/index.jsp


http://blogs.sun.com/yappri/date/20071220 2007年 12月 20日 木曜日

便利ツール dim_STAT の紹介

【概要】
今回はちょっと便利なツールを紹介させていただきます。

皆さんは検証をやるときにいろいろな stat 系のコマンドを使用されると思いますが、取ったデータを加工するのって結構大変ではないですか。
こんな感じで

bash-3.00# iostat 1
   tty        sd1           sd2           sd3           nfs1           cpu
 tin tout kps tps serv  kps tps serv  kps tps serv  kps tps serv   us sy wt id
   0    8  10   0   14    0   0    0    0   0    0    0   0    0    0  0  0 100
   0  707 2057   4   18    0   0    0    0   0    0    0   0    0    3  0  0 97
   0  243 3073   3   22    0   0    0    0   0    0    0   0    0    3  1  0 97
   0  243 2048   2   19    0   0    0    0   0    0    0   0    0    3  0  0 97
   0  243 3072   3   22    0   0    0    0   0    0    0   0    0    3  0  0 97
   0  243 2048   2   34    0   0    0    0   0    0    0   0    0    3  0  0 97
   0  243 3072   3   15    0   0    0    0   0    0    0   0    0    3  0  0 97
   0  243 3080   5   16    0   0    0    0   0    0    0   0    0    3  0  0 97


テキストで抽出したデータをエクセル等に読み込ませてグラフなどを作成しているのではないでしょうか。
その面倒くさい悩みを解消するのが、今回ご紹介させていただきます dim_STAT と言うツールです。

このツールはフランスにいる Sun の社員が開発したものです。
特徴としては各クライアントにエージェントを登録させて、サーバに STAT データを送り込みます。
サーバはそのデータを DB に溜めて一括集中管理をします。
その情報が必要なときにはサーバにアクセスすれば、WEB ブラウザーでグラフィカルに表示させて見ることができます。

イメージとしてはこんな感じです。


ホームページも公開されていますので、興味のある方は一度覗いてみてください。
Dimitri (dim) Tools HOMEPAGE
ここにはツールのバイナリやマニュアルがあります。



【インストール】
では、実際に使ってみましょう。
インストールはいたって簡単で、サーバに本体をインストールし、クライアントにはエージェントインストールするだけです。
対応 OS は Solaris SPARC/x86 と Linux となります。
エージェントは上のものに加えて HP-UX にもあるようです。

まずはサーバへインストールします。
対応する OS の tar 形式のインストールファイルをダウンロードしてきます。
(今回はサーバ SPARC にしましたので dim_STAT-v81.tar をダウンロードします。)

インストール方法はマニュアルにも記載されていますが、実際には以下のようになります。
『サーバインストール』

bash-3.00# tar xvf dim_STAT-v81.tar
x dim_STAT-INSTALL, 0 bytes, 0 テープブロック
.......
x dim_STAT-INSTALL/UNINSTALL.txt, 352 bytes, 1 テープブロック
bash-3.00# ls
dimInst.log       dim_STAT-INSTALL  dim_STAT-v81.tar
bash-3.00# cd dim_STAT-INSTALL
bash-3.00# ls -la
合計 826
....
-rwxr-xr-x   1 1000     100           86  5月  4日 2007年 INSTALL.sh
....
bash-3.00# ./INSTALL.sh

===========================================
** Starting dim_STAT Server INSTALLATION **
===========================================
HOSTNAME: ssc2226
      IP: 22.0.2.6
 DOMAINE:

Is it correct? (y/n): y
....

 User: dim
Group: dim

Is it correct? (y/n): y
....

May I create this USER/GROUP on your host? (y/n): y

======================================
** dim_STAT Directory Configuration **
======================================

** WebX root directory (5MB):
 => /WebX
 => /opt/WebX
 => /etc/WebX

 [/opt/WebX]:

** HOME directory for dim_STAT staff       [/apps]:
** TEMP directory                          [/tmp]:
** HTTP Server Port                        [80]:      <---- ◆ここは注意◆
** DataBase Server Port                    [3306]:            他の Web サービスとバッティング
** Default STAT-service Port               [5000]:            しないようにしてください

==================================================
** Process...
==================================================
=> Host                        : ssc2226
=> IP address                  : 22.0.2.6
=> Domain                      :
=> User                        : dim
=> Group                       : dim
=> WebX root directory         : /opt/WebX
=> HOME directory              : /apps
=> TEMP directory              : /tmp
=> HTTP Server Port            : 80
=> DataBase Server Port        : 3306
=> Default STAT-service Port   : 5000

Is it correct? (y/n): y

** WARNING!!!
....
** INSTALLATION is finished!!!
**
May I create now a dim_STAT-Server start/stop script in /etc/rc*.d? (y/n): y
** =========================================================================
**   You can start dim_STAT-Server now from /apps/ADMIN:
**
**   # cd /apps/ADMIN
**   # ./dim_STAT-Server start
**
**   and access homepage via Web browser - http://ssc2226:80
**
**   To collect stats from any Solaris-SPARC/x86 or Linux-x86 machines
**   just install & start on them [STAT-service] package...
**
** Enjoy! ;-)
**
** -Dimitri
** =========================================================================

インストールの最後にシステムの起動方法が記述されているのその通りに実行してみます。

bash-3.00#
bash-3.00# cd /apps/ADMIN
bash-3.00# ./dim_STAT-Server start
================[ dim_STAT-Server: start ]================
*
* MySQL Database Server
*
  => Log output  : /apps/mysql/data/mysqld.log.3306
  => Local socket: /apps/mysql/data/mysql.sock.3306
  => Admin Access: root# /apps/mysql/bin/mysql -S /apps/mysql/data/mysql.sock.3306
Starting...
Starting mysqld daemon with databases from /apps/mysql/data
Done.
Starting HTTP server from: /apps/httpd
Done.
================[ dim_STAT-Server: start -- done. ]================
bash-3.00#

これでサーバへのインストールは完了です。


『クライアントインストール』
次にクライアントへのエージェントの登録ですが、そのエージェントはサーバ用のインストールディレクトリの下にあります。

bash-3.00# cd dim_STAT-INSTALL/
bash-3.00# ls -la
....
drwxr-xr-x   2 1000     dim          512  4月 25日 2007年 STAT-service
....
bash-3.00# cd STAT-service/
bash-3.00# ls
STATsrv-HPUX.tar
STATsrv-Lux.tgz
STATsrv-Sol86.pkg
STATsrv-Sol86.tar
STATsrv-src.tgz
STATsrv.pkg
STATsrv.tar
bash-3.00#

このディレクトリにある OS に対応したファイル(pkg or tgz or tar)をそれぞれのクライアントにコピーしてインストールします。(インストール方法はマニュアルにありますので読んでください。)

今回はクライアントも SPARC なので STATsrv.pkg を使用しました。

bash-3.00# pkgadd -d STATsrv.pkg
The following packages are available:
  1  STATsrv     dim_STAT: Solaris STAT-service
                 (sparc) 8.1+

Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]: all

 中のパッケージインスタンス  を処理中です。

dim_STAT: Solaris STAT-service(sparc) 8.1+
by Dimitri KRAVTCHUK, Paris Sun Benchmark Center, FRANCE.
## パッケージ情報を処理中です。
## システム情報を処理中です。
## ディスク領域の要件を確認中です。
## すでにインストール済みのパッケージとの重複を確認中です。
## setuid/setgid を行うプログラムを検査中です。

dim_STAT: Solaris STAT-service を  としてインストール中です。

## 1/1 部分をインストールしています。
/etc/STATsrv/STAT-service
.....
/etc/rc0.d/K10stat-srv <シンボリックリンク> <--- 必要な Script を自動で登録して
/etc/rc1.d/K10stat-srv <シンボリックリンク>      くれるので私は pkg をお勧めします。
/etc/rc2.d/S99stat-srv <シンボリックリンク>
/etc/rcS.d/K10stat-srv <シンボリックリンク>
[ クラス  を検査しています ]

 のインストールに成功しました。
bash-3.00#

これでクライアントへのインストールも完了です。
マニュアルに従ってサービスを起動します。

bash-3.00# /etc/STATsrv/STAT-service start
Start STAT-service...
   port: 5000
   access log: /etc/STATsrv/log/access.log
bash-3.00#

【dim_STAT 起動】
起動は Web ブラウザーから上で設定したポート(80)に対してアクセスします。
dim_STAT起動画面 dim_STAT Top 画面

dim_STAT Main Page の 「welcome」 をクリックしたら右図のような Main ページが表示されます。
これで起動は完了です。この後は、「Start New Collect]で情報を取得するクライアントの登録と取得する項目を設定すれば、「Analyze」で取得データをグラフ化して見ることができます。

【dim_STAT Data View】
クライアント設定時に登録した Interval Time(秒)ごとに取得されたデータは、サーバの DB (MySQL) に溜めて、そのデータを基にグラフ処理して表示させます。
dim_STAT グラフ1 dim_STAT グラフ2


以上で、簡単ですが dim_STAT の概要とインストールについて紹介させていただきました。
設定する項目がいろいろあって、ちょっと面倒くさいところもありますが、マニュアル見れば きちんと記述されています。
このツールの製作者は、もっとツールをより良くしたいと考えています。なので皆さんがどんどん使ってみて気が付いたこと、こうしたら良くなるなど feedback を頂ければ製作者もきっと喜ぶと思いますよ。

http://blogs.sun.com/yappri/date/20071218 2007年 12月 18日 火曜日

文字コードを判別するコマンドご紹介 = auto_ef

今回は、結構知らない人も多い Solaris 上で文字コード(EUC,SJIS,JIS,UTF-8 等)を 判別する auto_ef(1)をご紹介します。

コマンド名は auto encoding finder の略なので、覚えるのも 簡単かと。

以下試してみた結果です

% setenv LANG ja_JP.eucJP
% echo "文字コード" > txt.euc
% iconv -f EUC-JP -t SHIFT-JIS txt.euc > txt.sjis
% iconv -f EUC-JP -t ISO-2022-JP txt.euc > txt.jis
% iconv -f EUC-JP -t UTF-8 txt.euc > txt.utf8
% auto_ef *
txt.euc: eucJP
txt.jis: ISO-2022-JP
txt.sjis: PCK
txt.utf8: UTF-8

基本は auto_ef "ファイル名" で文字コードの判別が可能です。 オプションでどの文字コードの可能性があるかの一覧を見ることも出来ますので、 ご興味のある方は auto_ef(1) をご覧ください。

知っていると便利だと思いますので、何かの時にご使用ください。

http://blogs.sun.com/yappri/date/20071217 2007年 12月 17日 月曜日

ZFS スナップショット

今回は、 ZFS のスナップショット機能に関して少し掘り下げて説明します。

ZFS のスナップショットを作成すると、ご存じの通り変更後のファイル システムをスナップショットの状態に戻す事ができます。
それでは、実際にスナップショットを作成して、ZFS がどのような動作をするか 見てみましょう。

まずは、testpool/home ファイルシステムにスナップショット @monday を作成します。

# zfs snapshot testpool/home@monday

# zfs list
NAME                    USED   AVAIL  REFER  MOUNTPOINT
testpool                2.16M   252M  38.2K  /testpool
testpool/home           2.04M   252M  2.04M  /testpool/home
testpool/home@monday    0       -     2.04M  -

スナップショットの名前は、 @monday のように @ を付けて指定します。
このスナップショットの実体は、物理コピーでなく変更のあった差分だけデータ を保持しますので、最初は @monday スナップショットの USED が 0 Byte になります。

そこで、testpool/home ファイルシステムから差分を発生させる為、 1M Byte の ファイル aaa を消してみます。
# ls -l /testpool/home
合計 4108
-rw-rw-rw-   1 root  root       1048576 12月 12日  17:26 aaa
-rw-rw-rw-   1 root  root       1048576 12月 12日  17:23 bbb

# rm /testpool/home/aaa

# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
testpool              2.26M   251M  38.2K  /testpool
testpool/home         2.07M   251M  1.04M  /testpool/home
testpool/home@monday  1.04M   -     2.04M  -
1M Byte のファイルを消去しましたので、@monday スナップショットの USED が 1M Byte (消去したファイル分)になりました。

ここで、作成したスナップショットのデータはどこに存在しているのでしょうか?
作成したスナップショットは、ファイルシステム直下の隠しファイル .zfs/snapshot ディレクトリ以下に存在します。
# ls -al /testpool/home
合計 6170
drwxr-xr-x   2 root  sys       5 12月 12日  16:31 .
drwxr-xr-x   3 root  sys       3 12月 12日  16:22 ..
-rw-rw-rw-   1 root  root       1048576 12月 12日  16:28 aaa
ls -al オプションでリストを表示しても、.zfs ディレクトリはデフォルトで 表示されませんが .zfs/snapshot ディレクトリを直接指定してリストを表示 してみます。
# ls -l /testpool/home/.zfs/snapshot
合計 4
drwxr-xr-x   2 root  sys       4 12月 12日  16:27 monday

# ls -l /testpool/home/.zfs/snapshot/monday
合計 4108
-rw-rw-rw-   1 root  root       1048576 12月 12日  16:28 aaa
-rw-rw-rw-   1 root  root       1048576 12月 12日  16:29 bbb
このスナップショットのデータは、読み込み専用で参照する事が可能なので、一部のファイル を戻したい時は、ここのディレクトリから直接コピーしてファイルを復旧する事ができます。


最後にロールバック機能を説明します。
下記例では、スナップショット @monday と @tuesday があり、新しい方の @tuesday をロールバックしてみます。
# zfs list
NAME                            USED  AVAIL  REFER  MOUNTPOINT
testpool                       3.24M   251M  38.2K  /testpool
testpool/home                  3.11M   251M  2.04M  /testpool/home
testpool/home@monday           1.04M      -  2.04M  -
testpool/home@tuesday          33.7K      -  1.04M  -

# zfs rollback testpool/home@tuesday
作成したスナップショットを戻す時は、rollback オプションを使用します。
最新のスナップショットではなく、何世代か前のスナップショット(ここでは @monday) をロールバックする時は、さらに -r オプションを付与して実行します。
# zfs rollback -r testpool/home@monday

# zfs list
NAME                     USED  AVAIL  REFER  MOUNTPOINT
testpool                2.16M   252M  38.2K  /testpool
testpool/home           2.04M   252M  2.04M  /testpool/home
testpool/home@monday        0      -  2.04M  -
補足として、何世代か前のスナップショットをロールバックすると、それより 新しい(この場合は @tuesday)スナップショットは消えてしまいます。

ZFS スナップショット機能は、早い、簡単、便利の3拍子揃っていますので、 是非お試し下さい!