2009年02月
Linuxのdiffコマンドで、リモートホストのファイルやコマンド実行結果を比較する方法をメモ。
最近知りました。
$ diff <(ssh host1 cat file1) <(ssh host2 cat file2)bash系のプロセス置換(process substitution)がサポートされているシェルで可能です。
この場合、公開鍵認証で認証エージェントに鍵を追加してあるか、ホストベース認証を使用するなどして、パスワードやパスフレーズを入力せずに接続できる必要があります。
ちなみに、一方がローカルなら以下でも可能。
$ ssh host1 cat file1 | diff - file2
sshでコマンド実行した結果とか。
$ diff <(ssh host1 "rpm -qa"|sort) <(ssh host2 "rpm -qa"|sort)
同様に、ローカルでもコマンド実行した結果とかも。
$ diff <(sort file1) <(sort file2)
Command-line Fuで、diffを使ったコマンドを投票順に並べると、他にも色々あります。
Commands using diff | Command-line Fu
2つのディレクトリ内のファイルのdiff
$ diff dir1 dir23つのファイルのdiff
$ diff3 file1 file2 file3
参考:リモートホストのファイルとdiffを取るシェル関数
リモートホストとdiffる - (ひ)メモ
個人利用、非商用に限りますが、Intelコンパイラが無料で使えます。
IntelのCPUを使っているなら、そのCPUに最適化されたIntelコンパイラでコンパイルすると、一般的にパフォーマンスは良くなるようです。
最新のバージョン11.0は Core i7 や Atom プロセッサーもサポートしています。
4年ほど前の記事ですが、関連として以下のような記事もあります。
無料で30%のパフォーマンスUP!! - intel compiler :: Drk7jp
ダウンロードは以下から。
Non-Commercial Software Development - Intel Software Network
同意できれば Accept のリンクから各プロダクトの非商用版の申し込みページに進みます。
非商用版ライセンス (Non-commercial License) の FAQ の日本語版は以下にあります。
XLsoft エクセルソフト : パフォーマンス製品 Intel : アプリケーション・パフォーマンス最適化ツール
A. 非商用版とは、開発した製品やサービスが営利目的ではなく、いかなる金銭の授受に関与しない活動にのみご利用いただけるインテル ソフトウェア製品です。大学等の学術機関、企業等での利用、研究目的には使用できませんのでご注意ください。
ちなみに、エクセルソフトのページには日本語マニュアル等の情報も充実しています。
XLsoft エクセルソフト : インテル C++ / Fortran コンパイラー マルチコア向けに開発、並列化
CentOS 4.6に C++ Compiler Professional Edition をインストールしてみました。
以下のように tar を展開してインストールスクリプトを実行するだけです。
# tar xzf l_cproc_p_11.0.081_intel64.tgz # cd l_cproc_p_11.0.081_intel64 # ./install.sh
インストール中のアクティベーションは、メールで送られてくるライセンスファイルを、例えば /opt/intel/license.lic に保存して、それをライセンスファイルとして指定するメニューを選べばOKです。
あと、デフォルトだと C++ Compiler だけでなく、Debugger, Threading Building Blocks (TBB), Integrated Performance Primitives (IPP), Math Kernel Library (MKL) もインストールされるので、必要ない場合は Custom Install を選べばOKです。
インストールが完了すれば、例えば以下のように環境変数を設定するファイルを読み込めば、使用できるようになります。
$ . /opt/intel/Compiler/11.0/081/bin/intel64/iccvars_intel64.sh $ icc -V Intel(R) C Intel(R) 64 Compiler Professional for applications running on Intel(R) 64, Version 11.0 Build 20090131 Package ID: l_cproc_p_11.0.081 Copyright (C) 1985-2009 Intel Corporation. All rights reserved. FOR NON-COMMERCIAL USE ONLY $
[2009年 3/2追記]
ちょうど以下のような記事も公開されました。
「インテル コンパイラー」で高速に動作するバイナリを作成しよう - SourceForge.JP Magazine
Linuxの rev というコマンドを最近知りました。
各行ごとに、入力された文字を逆に並べたものを出力します。
via Four Completely Useless Linux Commands
shigefumi@node01:~> cat /etc/SuSE-release SUSE Linux Enterprise Server 10 (x86_64) VERSION = 10 PATCHLEVEL = 2 shigefumi@node01:~> rev /etc/SuSE-release )46_68x( 01 revreS esirpretnE xuniL ESUS 01 = NOISREV 2 = LEVELHCTAP shigefumi@node01:~>
上記Blogのコメントで以下のような使い方がありました。
パッケージの名前とバージョン番号だけを表示できます。
rpm -qa | rev | cut -f 2- -d \- | rev | sort
ちなみに、これはrpmのqueryformatオプションでも可能。
rpm -qa --qf "%{NAME}-%{VERSION}\n" | sort
あと思いついたものとして、bannerコマンドのネタ。
bannerの出力をパイプして tac と rev すると、以下のように180度回転できます。
shigefumi@node01:~> banner linux # ### # # # # # # # # ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ## # # # # ####### ### # # ##### # # shigefumi@node01:~> banner linux | tac | rev # # ##### # # ### ####### # # # # ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ## # # # # # # # # ### # shigefumi@node01:~>
本当は、有名な ipod! を回転させたかったのですが、今回インストールしたbannerコマンドでは大文字になるので、ipod!になりませんでした。
ちなみに、Command-line Fu < The best UNIX commands on the webをgrepしてみましたが、この記事投稿時点では、revを使ったものはありませんでした。
他に何か使い道があれば教えていただけると嬉しいです。
以前に書いた記事、しげふみメモ : Conserverでコンソールを管理で試したConserverをopenSUSE 10.3で使う場合のメモ。
今回は、8台のサーバのコンソールを管理します。
サーバは全てBMC(Baseboard Management Controller)が装備されていて、SOL(Serial Over LAN)でコンソールにアクセスできるように設定されています。
ということで、シリアルケーブルではなくて、ネットワーク経由で IPMItool でコンソールが取得できます。
今回はopenSUSE 10.3にインストールするので、パッケージはとりあえずSoftware.openSUSE.orgで探しました。
10.3用は無かったのですが、11.0用があったので、そのソースパッケージ conserver-8.1.16-2.1.src.rpm からビルドすることにしました。
console01:~ # rpmbuild --rebuild conserver-8.1.16-2.1.src.rpm console01:~ # rpm -i /usr/src/packages/RPMS/i586/conserver-8.1.16-2.1.i586.rpm
ipmitoolはSoftware.openSUSE.orgにあったので、それをインストールして動作確認。
console01:~ # rpm -i ipmitool-1.8.9-37.i586.rpm console01:~ # ipmitool -I lanplus -H node01-bmc -U XXXX -P XXXX power status Chassis Power is on console01:~ #
/etc/conserver.cf は以下のようなもの。
ipmitoolのオプションは機種によっても違う場合があるので参考程度に。
細かい部分は以前の記事などを参考に。
access * { trusted localhost; } break 1 { string "~B"; } default * { rw root; logfile /var/consoles/&; timestamp 1hab; logfilemax 1m; master localhost; type exec; } console node01 { exec ipmitool -I lanplus -H node01-bmc -U XXXX -P XXXX sol activate; } (中略) console node08 { exec ipmitool -I lanplus -H node08-bmc -U XXXX -P XXXX sol activate; }
今回管理するサーバ側(SLES10 SP2)の設定変更点は以下。(OSや機種によっても違うので参考程度に)
- BIOSで Console Redirection を設定。BMCにIPアドレス等を設定。
- GRUBメニューをコンソールにテキスト形式で表示させるために、/boot/grub/menu.lst に gfxmenu の行があればコメントアウト。
- OS起動時のメッセージをコンソールに表示させるために、/boot/grub/menu.lst の kernel 行に console=ttyS1,38400n8 を追加。
-
コンソールからログインできるように /etc/inittab に以下を追加。
ちなみに、38400は無くても smart_agetty が自動判別してくれる。cons:12345:respawn:/sbin/smart_agetty -L 38400 console
- コンソールからrootで直接ログインできるように /etc/securetty に console を追加。
以上で、複数台のサーバのコンソールを管理できます。
BMC搭載のサーバを追加したらconsoleの行を増やせばいいだけです。
会社の同僚に教えてもらったネタ。
フランス車のルノーの衝突試験の動画が面白いです。
ルノー:安全の取り組み(音が出るので注意)
ドイツ車
[画像:ドイツ車]
日本車
[画像:日本車]
フランス車
[画像:フランス車]
別の動画の「バレエ」はもっとかっこいいです。
YouTube - Renault Ballettには少し長いバージョンがあります。
LinuxでXFSファイルシステムのOSのディスクを別のディスクにコピーする場合のメモ。
ミラーリングをしたくない場合でバックアップ用ディスクを作りたい場合や、ディスクの内容をまるごと別のディスクに移したい場合などに。
以下のログは SLES10 SP1 で試した時のもので、1本目のディスクは、swap と / の2パーティション構成の場合とします。
node01:~ # df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 74G 4.6G 69G 7% / udev 501M 124K 501M 1% /dev node01:~ #fdisk や parted で2本目のディスクにパーティションを作成。
今回はまったく同じ構成にしてみました。
(サイズやパーティション構成を変更したい場合にも使えます)
node01:~ # fdisk -l /dev/sd[ab] Disk /dev/sda: 80.0 GB, 80026361856 bytes 255 heads, 63 sectors/track, 9729 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 131 1052226 82 Linux swap / Solaris /dev/sda2 132 9729 77095935 83 Linux Disk /dev/sdb: 80.0 GB, 80026361856 bytes 255 heads, 63 sectors/track, 9729 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 131 1052226 82 Linux swap / Solaris /dev/sdb2 132 9729 77095935 83 Linux node01:~ #mkfsでファイルシステム作成。
ext3と違って一瞬で完了するのが嬉しい。
node01:~ # mkfs.xfs /dev/sdb2 meta-data=/dev/sdb2 isize=256 agcount=16, agsize=1204623 blks = sectsz=512 attr=0 data = bsize=4096 blocks=19273968, imaxpct=25 = sunit=0 swidth=0 blks, unwritten=1 naming =version 2 bsize=4096 log =internal log bsize=4096 blocks=9411, version=1 = sectsz=512 sunit=0 blks realtime =none extsz=4096 blocks=0, rtextents=0 node01:~ #swap作成。
node01:~ # mkswap /dev/sdb1 Setting up swapspace version 1, size = 1077473 kB node01:~ #2本目のディスクの / パーティションを /new にマウント。
node01:~ # mount /dev/sdb2 /new node01:~ # df -h / /new Filesystem Size Used Avail Use% Mounted on /dev/sda2 74G 4.6G 69G 7% / /dev/sdb2 74G 544K 74G 1% /new node01:~ #あと、OSのDVD等に含まれるxfsdumpパッケージが必要。
これでdump/restoreの準備完了です。
/ から /new ファイルシステムへのコピーは、manページにあるように、基本的に以下で可能。
# xfsdump -J - / | xfsrestore -J - /newこの -J はdump inventory databaseを更新しないというオプション。
xfsdumpはインクリメンタルバックアップなどのために、databaseとして /var/lib/xfsdump/inventory を使用するが、今回のようなコピーの場合には必要がないため。
あと、私は -p 60 といったオプションを付けたりします。
指定秒毎に進捗を表示してくれます。
実際のログは以下。
node01:~ # xfsdump -J - / | xfsrestore -J -p 60 - /new xfsrestore: using file dump (drive_simple) strategy xfsdump: xfsrestore: version 2.2.43 (dump format 3.0) - Running single-threaded using file dump (drive_simple) strategy xfsdump: version 2.2.43 (dump format 3.0) - Running single-threaded xfsdump: level 0 dump of node01:/ xfsdump: dump date: Thu Jan 8 19:17:11 2009 xfsdump: session id: b52423b6-bc30-4859-89cb-c1b6b478fdbc xfsdump: session label: "" xfsrestore: media label: "" xfsrestore: file system id: cf274d72-c6f4-41ff-9f17-38b6fbc281dc xfsrestore: session id: b52423b6-bc30-4859-89cb-c1b6b478fdbc xfsrestore: media id: 59d1444a-04c8-4cac-a425-7b57f0ad1689 xfsrestore: searching media for directory dump xfsrestore: reading directories xfsdump: dumping non-directory files xfsrestore: 8796 directories and 101172 entries processed xfsrestore: directory post-processing xfsrestore: restoring non-directory files xfsrestore: status at 19:18:11: 9955/89299 files restored, 5.7% complete, 60 seconds elapsed xfsrestore: status at 19:19:11: 19612/89299 files restored, 11.5% complete, 120 seconds elapsed (中略) xfsrestore: status at 19:26:11: 75234/89299 files restored, 98.1% complete, 540 seconds elapsed xfsdump: ending media file xfsdump: media file size 4674038560 bytes xfsdump: dump size (non-dir files) : 4641927160 bytes xfsdump: dump complete: 564 seconds elapsed xfsdump: Dump Status: SUCCESS xfsrestore: restore complete: 573 seconds elapsed xfsrestore: Restore Status: SUCCESS node01:~ #dfなどで確認。
node01:~ # df -h / /new Filesystem Size Used Avail Use% Mounted on /dev/sda2 74G 4.6G 69G 7% / /dev/sdb2 74G 4.6G 69G 7% /new node01:~ #/etc/fstab , /boot/grub/menu.lst を確認。
/dev/sda1などのデバイス名で指定してあれば問題ないが、LABELやUUIDで指定してある場合には変更などが必要。
最後に、このままでは、2本目のディスクには GRUB がインストールされていないので手動でインストールする必要がある。
今回、2本目のディスクの /boot はこの時点では /dev/sdb2 にあるので、grub で root (hd1,1) を指定して setup すればインストールされる。
node01:~ # grub grub> root (hd1,1) Filesystem type is xfs, partition type 0x83 grub> setup (hd1) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/xfs_stage1_5" exists... yes Running "embed /boot/grub/xfs_stage1_5 (hd1)"... 18 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd1) (hd1)1+18 p (hd1,1)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded Done. grub>
以上で、2本目のディスクに入れ替えれば、同じOSで起動するはずです。
ちなみに、どのファイルシステムが好きかと言えば、やはりXFSですね。
サポートされていれば、XFSを使いたいです。
しげふみ