hagio.org - 日記

Powered by PENS


Index

2009: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2010: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2011: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2012: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2013: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2014: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2015: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2016: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)(2)
2017: 1月(1)(2) 2月(1)(2) 3月(1)(2) 4月(1)(2) 5月(1)(2) 6月(1)(2) 7月(1)(2) 8月(1)(2) 9月(1)(2) 10月(1)(2) 11月(1)(2) 12月(1)

今月のアルバム [ 投稿 | 編集 ]


編集

March 2012

Mar 30 (Fri)

19:43

ふぅ、残問題が多すぎて金曜日感がありませんことよ。

Mar 29 (Thu)

23:26

教訓その七六八:
よほど自信のある人か、要求が厳しいアプリケーションでなければ、 下手に自分でチューニングを行わず、OS に身を委ねてみること。

OS (Linux) は先人の知恵とバランス感覚の結晶。 素直でいれば 8 割方うまくいくようにできている。

・・・と思うのは OS 屋の高慢だろうかねぇ。

22:42

昨日に引き続いて、今さらの chainload をもう少し。

CentOS 6 を追加でインストールする場合は、 インストーラのブートローダの設定画面に「デバイスの変更」ボタンがあり、 これを押すと「ブートパーティションの最初のセクタ」を選択できるので、これを試してみた。

ここでは、/dev/sdb2 に /boot も含めて CentOS 6 をインストールしたとする。 ちなみに、インストール後の GRUB 画面でコマンド入力できる猛者はこれ以降を読む必要はない。 (まぁ、root (hd1,1)chainloader +1 を打てばいいわけだけど。)

元の OS で起動後、/dev/sdb2 をマウントして /boot/grub/grub.conf を見てみると、 既に GRUB の設定までが行われていることが確認できる。

# mkdir /mnt/sdb2 # mount /dev/sdb2 /mnt/sdb2 # cd /mnt/sdb2 # cat boot/grub/grub.conf ... title CentOS (2.6.32-220.el6.x86_64) root (hd1,1) kernel /boot/vmlinuz-2.6.32-220.el6.x86_64 ro root=UUID=7f0dde0e-467e-4cb1-bfd2-f56cb4cdea87 rd_NO_LUKS rd_NO_MD quiet rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=ja_JP.UTF-8 rd_NO_LVM rd_NO_DM initrd /boot/initramfs-2.6.32-220.el6.x86_64.img

/dev/sdb2 にブートローダをインストールしたので、元の OS の /boot/grub/grub.conf に chainload の設定を書けば良い。

# vi /boot/grub/grub.conf ... title chainload CentOS 6 (x86_64) root (hd1,1) chainloader +1

んで、再起動して GRUB 画面で選択すれば、問題なく起動できる。 う〜ん、簡単。もしかすると、CentOS 5.x のインストーラでも、 ブートローダをインストールするデバイスを変更できるのかもしれない。

追記
CentOS 5 でも (確認したのは 5.8)、「高度なブートローダオプションの設定」をチェックすれば、 次の画面で「ブートパーティションの最初のセクタ」を選択できた! なんじゃい、、しかし手動で GRUB をインストールしたのは勉強になった。 いまだに、grub-install--root-directory オプションは イマイチわかってないけど。パーティション構成によって意味が変わるような気がする。 スクリプトなので読めばわかるんだろうけど。

Mar 28 (Wed)

23:48

ちょっと必要があって GRUB の chainload を試してみた。

すでに /dev/sda に OS がインストールされているとして、 /dev/sdb1 に /boot もまとめて新しく OS をインストールしたとする。 この際、インストーラの設定で /dev/sda に GRUB をインストールしないようにする。 (インストールしてしまった場合を試してないが、以下はその前提で進める。)

OS インストール後、元の OS で起動して、/dev/sdb1 を適当な場所にマウントし、 以下のコマンドを実行すると、/dev/sdb1 のブートセクタに GRUB がインストールされ、 /dev/sdb1 の /boot/grub に必要なファイルが格納される (という認識で合ってるのかなぁ)。

# mount /dev/sdb1 /mnt/sdb1 # grub-install --root-directory=/mnt/sdb1 /dev/sdb1

んで、元の OS の grub.conf には chainload の設定を追加する。

title chainload CentOS 5 (x86_64) root (hd1,0) ★/dev/sdb1 を示す chainloader +1

さらに元の OS の grub.conf をコピーするなどして、 /dev/sdb1 に合わせて /boot/grub/grub.conf を新しく作成する。

... title CentOS (2.6.18-128.el5) root (hd1,0) kernel /boot/vmlinuz-2.6.18-128.el5 ro root=LABEL=/1 initrd /boot/initrd-2.6.18-128.el5.img ^^^^^^^^★間違えないように注意 ^^^^^★/boot は同一パーティションなので必要

LABEL は、インストール時にすでに LABEL=/ が存在する場合は /1 などとなるが、 これはわかりにくいので、OS 名などに変更しておいた方が良いだろう。

ちなみに必ずしも chainload する必要はなくて、 上の内容をそのまま元の OS の grub.conf に記載しても問題はない。 起動はできる。 要は、使用する kernel と initrd、そしてルートパーティションさえ指定すればよい。 (追記 カーネルを追加インストールした場合に面倒になるが。)

ところで、ふつう、GRUB の stage1 は MBR にインストールすると思っていて、 特に意識したことなかったのだが、上のようにパーティションにインストールすることもできる。 ファイルシステムはどうなんの、と見てみたところ、ext3 のスーパーブロックは、 パーティションの 1024 バイト目より後ろに配置されていた。 1024 バイトまでは、ブートセクタとして利用される場合のために空けてあるようだ。 (GRUB の場合、実際に使用されるのは stage1 の 512 バイトだけっぽい。)

# hexdump -C -n 1088 /dev/sda1 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000400 18 c4 00 00 4c 10 03 00 37 27 00 00 90 b1 02 00 |....L...7'......| 00000410 f0 c3 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |................| 00000420 00 20 00 00 00 20 00 00 d8 07 00 00 e7 d6 69 4f |. ... ........iO| 00000430 e7 d6 69 4f 1d 00 ff ff 53 ef 01 00 01 00 00 00 |..iO....S.......|

あれ、でもこの場合、stage 1.5 はどこにあるんだろう?

Mar 26 (Mon)

21:29

教訓その 384:

Web 上で見つけた貴重な情報は、何としてでもダウンロード保存しておくべし。 いつ無くなるかわからないし、オリジナルが無くなってもネットならどこかに落ちてるだろう、 と探しても意外と見つからなくなったりするのである。

某件で、Kosaki さんの

のプレゼン動画を見直したかったのだが、まったく見つからなかった。 まぁ、上の資料が見つかっただけでもまだ良いか…。

あと、malloc じゃないけど、Shinyama さんのこれも。

※クロールする場合はなるべく間隔をあけるようにしましょうね。

Mar 25 (Sun)

15:42

GNU tar の挙動について。

例えば /tmp/test というディレクトリを固めたいとして、絶対パスで指定すると、 /tmp ディレクトリも含まれてしまう。

[root@lucida ~]# ls -l /tmp/test 合計 4 -rw-r--r-- 1 root root 5 3月 25 15:35 hoge [root@lucida ~]# tar cf test.tar /tmp/test/ tar: メンバ名から先頭の `/' を取り除きます [root@lucida ~]# tar tvf test.tar drwxr-xr-x root/root 0 2012-03-25 15:34:50 tmp/test/ -rw-r--r-- root/root 5 2012-03-25 15:35:51 tmp/test/hoge

これを展開すると、カレントディレクトリに tmp というディレクトリができてしまう。

[root@lucida ~]# tar xvf test.tar tmp/test/ tmp/test/hoge [root@lucida ~]# ls -l tmp 合計 4 drwxr-xr-x 2 root root 4096 3月 25 15:34 test

これを回避するには、-C オプションを用れば良いのだが、 -f オプションのファイルは cd する前のパスになるので注意が必要だ。

[root@lucida ~]# tar -C /tmp -cf test.tar test ^^^^★1 ^^^^^^^^★2 ^^^^★3 ★1 のディレクトリに cd してから作業する。 ★3 は ★1 からの相対パスにする。 ★2 は ★1 の影響を受けない。 [root@lucida ~]# tar tvf test.tar drwxr-xr-x root/root 0 2012-03-25 15:34:50 test/ -rw-r--r-- root/root 5 2012-03-25 15:35:51 test/hoge

Mar 22 (Thu)

22:32

2 時間かけて書き直したアルゴリズムが 3 倍遅かった時の悲しさ。 計算量 O(n*m) より O(n) の方が速いと思うやんか、ふつう…。

よく考えると、n と比較して m が十分に小さいからなぁ。 ごちゃごちゃ条件を付けた O(n) よりも、富豪的だがシンプルな O(n*m) の方が速くなるのね…。

追記 (2012-03-22 23:04)
gawk の巨大文字列の連結がボトルネックだったことがわかった。 ltrace を採ってみると mbrtowc(3) を連発し、strace では brk(2) が連発していた。 n 回 write するよりもバッファにためた方が良かろうと思っていたのが間違いだった。 3 倍遅かったのが 10 倍速くなり、スッキリ。

07:41

bash の小

変数 SECONDS には、シェルが起動してからの秒数が格納されている。

# echo $SECONDS 32913

タイムアウト処理などで、毎回 date コマンドを実行せずに経過時間を得ることができる。

Mar 21 (Wed)

23:25

Linux 3.3 が数日前にリリースされた。

気になるのは、team ドライバ。 まだ round-robin と active-backup しか実装されていないようだが (ソースは見ていない)、 bonding ドライバをユーザ空間に持ってくるものらしい。実装が気になる。 libteam が Fedora にも取り込まれた みたいなので、RHEL7 あたりには入ってくるかもしれない。

3 月(1) へ


↑戻る