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)

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


編集

May 2011

May 31 (Tue)

22:34

ようやく、泳げる距離がだんだん延びてきて嬉しい。

本日のスイム
水泳時間40 分
水泳距離1.5 km
最長距離1200 m
総水泳距離62.7 km
 
本日のバイク (クロス)
走行時間27′53″
走行距離9.87 km
平均速度21.2 km/h
総走行距離899.6 km

May 28 (Sat)

21:00

六本木 八兵衛。ここはうまい!

etsu に教えてもらった、えんどう豆の串揚げとだし巻き卵は一食の価値あり。

15:27

このサーバは地デジ録画サーバとしても稼働していて、数十 GB のファイルが作成されるが、 ファイルシステムが ext3 のため、大きなファイルの削除が遅い (最近知った)。 ext4 では大きなファイルの削除が格段に速くなったということなので、 ファイルシステムを ext4 に変えてどのくらい速くなるか試してみたい。 ちょうど RHEL 5.6 (kernel-2.6.18-238.el5 以降) から ext4 が正式サポートされたので、 この際 kernel もアップデートしよう。

まずは必要なパッケージ (kernel と e4fsprogs) をインストールする。 なお、kernel のバージョン 2.6.18-238.el5 以降、2.6.18-238.9.1.el5 未満には bonding ドライバにカーネルパニックを引き起こす不具合 (*1) が含まれているので、 最新の 2.6.18-238.9.1.el5 にアップデートする。

*1 Bug 675664 - Kernel panic when restart network on vlan with bonding

# uname -a Linux lab.hagio.org 2.6.18-238.9.1.el5PAE #1 SMP Tue Apr 12 18:52:55 EDT 2011 i686 i686 i386 GNU/Linux # rpm -q e4fsprogs e4fsprogs-1.41.12-2.el5

お次はデータのバックアップだが、200 GB 程度の移動に 1 時間近くもかかってしまった。 同じディスクの別パーティションにしか空きがなかったのでこんなもんだろうか…。 常にクリーンな空きディスク (テンポラリ領域) を用意しておくべきだなぁ。

ext3 だと、5.3 GB と 16 GB のファイルの削除がこれくらい。

# ls -l -rw-r--r-- 1 apache apache 5.3G 3月 8 22:54 test1.ts -rw-r--r-- 1 apache apache 16G 2月 5 23:10 test2.ts # time rm -f test1.ts real 0m10.305s user 0m0.001s sys 0m0.212s # time rm -f test2.ts real 0m29.789s user 0m0.000s sys 0m0.680s

で、ついに ext4 のファイルシステムを作成してみる。 オプションは特にいらないのだろうか?よくわからない。 約 800 GB のファイルシステム作成にかかった時間は、3 分弱。

# time mke4fs -t ext4 /dev/mapper/vg01-lv04_tv mke4fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 54992896 inodes, 219941888 blocks 10997094 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=0 6713 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 37 mounts or 180 days, whichever comes first. Use tune4fs -c or -i to override. real 2m51.868s user 0m0.879s sys 0m20.919s # blkid /dev/mapper/vg01-lv04_tv /dev/mapper/vg01-lv04_tv: UUID="b9830aa6-d521-46fc-b739-8e868404c1ac" SEC_TYPE="ext2" TYPE="ext3"

しかし、blkid で確認するも、ext4 と出力されない。

もしやと思って、blkid (e2fsprogs) をアップデートしたら ext4 と表示された。 古いバージョンでは対応していなかったようだ。 tune4fs -l の結果は、features がやたらと多い。

# rpm -qf /sbin/blkid e2fsprogs-1.39-15.el5 # yum update e2fsprogs ... # rpm -q e2fsprogs e2fsprogs-1.39-23.el5_5.1 # blkid /dev/mapper/vg01-lv04_tv /dev/mapper/vg01-lv04_tv: UUID="b9830aa6-d521-46fc-b739-8e868404c1ac" TYPE="ext4" # tune4fs -l /dev/mapper/vg01-lv04_tv | code2html tune4fs 1.41.12 (17-May-2010) Filesystem volume name: <none> Last mounted on: <not available> Filesystem UUID: b9830aa6-d521-46fc-b739-8e868404c1ac Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize Filesystem flags: signed_directory_hash Default mount options: (none) Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 54992896 Block count: 219941888 Reserved block count: 10997094 Free blocks: 216439157 Free inodes: 54992885 First block: 0 Block size: 4096 Fragment size: 4096 Reserved GDT blocks: 971 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 8192 Inode blocks per group: 512 Flex block group size: 16 Filesystem created: Sat May 28 16:37:53 2011 Last mount time: n/a Last write time: Sat May 28 16:40:44 2011 Mount count: 0 Maximum mount count: 37 Last checked: Sat May 28 16:37:53 2011 Check interval: 15552000 (6 months) Next check after: Thu Nov 24 16:37:53 2011 Lifetime writes: 13 GB Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 256 Required extra isize: 28 Desired extra isize: 28 Journal inode: 8 Default directory hash: half_md4 Directory Hash Seed: a0d795bd-18dc-4f5d-94ca-c13cc9e3b984 Journal backup: inode blocks

で、ようやく ext4 での削除テスト。これは速いッ!! ext3 と比較して、60 〜 70 倍速くらいか。

# time rm -f test1.ts real 0m0.173s user 0m0.000s sys 0m0.130s # time rm -f test2.ts real 0m0.451s user 0m0.000s sys 0m0.378s

May 25 (Wed)

22:36

記録をサボってたけど、ここ数日は泳ぎまくってます。

今日は久しぶりにスイマーズハイの状態になった。 水泳部だった時はよくあったんだけど、泳げば泳ぐほど気持ち良くなって、 これが続くと、陸上よりも水中の方が快適と思うようになり、 最終的には「早くイルカになりた〜い」状態になるのだ。 スイマーならこの気持ちがわかる…はず。

5/22(日) のスイム
水泳時間35 分
水泳距離1.0 km
最長距離400 m
総水泳距離58.3 km
 
5/24(火) のスイム
水泳時間40 分
水泳距離1.2 km
最長距離800 m
総水泳距離59.7 km
 
5/25(水) のスイム
水泳時間40 分
水泳距離1.5 km
最長距離1000 m
総水泳距離61.2 km
 
最近のバイク (クロス)
走行時間1:21′34″
走行距離29.23 km
平均速度21.5 km/h
総走行距離889.7 km

May 19 (Thu)

21:35

tshark コマンドのログローテーション機能が非常に便利。 tcpdump コマンドにも搭載してくれないかね。

100 KB でローテートし、最大 5 ファイルまで保存する場合:

# tshark -i eth0 -w test.log -b files:5 -b filesize:100 Running as user "root" and group "root". This could be dangerous. Capturing on eth0 6235 # ls -l 連番 日時 -rw------- 1 root root 104831 5月 19 21:22 test_00011_20110519212251.log -rw------- 1 root root 103815 5月 19 21:24 test_00012_20110519212253.log -rw------- 1 root root 103177 5月 19 21:26 test_00013_20110519212451.log -rw------- 1 root root 102611 5月 19 21:30 test_00014_20110519212632.log -rw------- 1 root root 34379 5月 19 21:30 test_00015_20110519213021.log

これを使えば、ディスクがログで溢れることもない。 上の例ではファイルサイズでローテートを行ったが、 時間 (duration) でローテートすることもできる。

12:17

すげ、Javascript で書かれた PC エミュレータだと。普通に動くのが驚き。

~ # cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 5 model : 4 model name : Pentium MMX stepping : 3 cache size : 0 KB fdiv_bug : no hlt_bug : no f00f_bug : yes coma_bug : no fpu : no fpu_exception : no cpuid level : 1 wp : yes flags : bogomips : 20.22 clflush size : 32

/dev/clipboard に書き込むと、右のテキストフィールドに転送されるようだ。

May 18 (Wed)

00:38

成功した。/etc/hosts で完結してしまっていたのが原因だった。
ソース : getaddrinfo.c

$ ./host lab ai_flags = 0 ai_family = 2 ai_socktype = 1 ai_protocol = 6 ai_addrlen = 16 ai_addr = 0x94600e0 ai_canonname = (null) ai_next = 0x94600f8 addr = 192.168.1.1 ai_flags = 0 ai_family = 2 ai_socktype = 1 ai_protocol = 6 ai_addrlen = 16 ai_addr = 0x9460118 ai_canonname = (null) ai_next = 0x9460080 addr = 192.168.8.1 ai_flags = 0 ai_family = 10 ai_socktype = 1 ai_protocol = 6 ai_addrlen = 28 ai_addr = 0x94600a0 ai_canonname = (null) ai_next = (nil) addr = fec0::1

00:19

アドレスの表示方法はわかったが、なぜか IPv4 と IPv6 を同時に出力できない。

$ ./host lab ai_flags = 0 ai_family = 2 ai_socktype = 1 ai_protocol = 6 ai_addrlen = 16 ai_addr = 0x8a380e0 ai_canonname = (null) ai_next = 0x8a380f8 addr = 192.168.1.1

ちなみに、1 つのホスト名に複数のアドレスが割り当てられている場合、 ラウンドロビンで返すのが正常な挙動のようだ。

$ host lab lab.hagio.org has address 192.168.8.1 lab.hagio.org has address 192.168.1.1 lab.hagio.org has IPv6 address fec0::1 $ host lab lab.hagio.org has address 192.168.1.1 lab.hagio.org has address 192.168.8.1 lab.hagio.org has IPv6 address fec0::1

/etc/gai.conf というファイルで getaddrinfo の挙動を設定できるらしい。 man getaddrinfo にも載ってないし、こんなのどうやって気づけっちゅーねん。

May 17 (Tue)

23:21

名前引き関連で、getaddrinfo() の使い方を知らないので、 まずはサンプルプログラムを書いてみた。

#include <stdio.h> #include <string.h> /* for getaddrinfo() */ #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> void print_addrinfo(struct addrinfo *ai) { if (ai) { printf("ai_flags = %d\n", ai->ai_flags); printf("ai_family = %d\n", ai->ai_family); printf("ai_socktype = %d\n", ai->ai_socktype); printf("ai_protocol = %d\n", ai->ai_protocol); printf("ai_addrlen = %u\n", ai->ai_addrlen); printf("ai_addr = %p\n", ai->ai_addr); //printf(" sa_family = %d\n", ai->ai_addr->sa_family); //printf(" sa_data = %s\n", ai->ai_addr->sa_data); printf("ai_canonname = %s\n", ai->ai_canonname); printf("ai_next = %p\n", ai->ai_next); } } int main(int argc, char *argv[]) { struct addrinfo hint, *ai, *ailist; int ret; if (argc != 2) { printf("Usage: %s HOSTNAME\n", argv[0]); return 1; } memset(&hint, 0, sizeof(struct addrinfo)); //hint.ai_flags = AI_CANONNAME; ret = getaddrinfo(argv[1], NULL, &hint, &ailist); if (ret != 0) { printf("getaddrinfo: %s\n", gai_strerror(ret)); return 2; } for (ai = ailist; ai != NULL; ai = ai->ai_next) { print_addrinfo(ai); printf("\n"); } freeaddrinfo(ailist); }

叩いてみると、こうなる。ai_addr の先の出力方法が、まだわからん。

$ cc -o host getaddrinfo.c $ ./host lab ai_flags = 0 ai_family = 2 ai_socktype = 1 ai_protocol = 6 ai_addrlen = 16 ai_addr = 0x8bbd0e0 ai_canonname = (null) ai_next = 0x8bbd0f8 ai_flags = 0 ai_family = 2 ai_socktype = 2 ai_protocol = 17 ai_addrlen = 16 ai_addr = 0x8bbd118 ai_canonname = (null) ai_next = 0x8bbd130 ai_flags = 0 ai_family = 2 ai_socktype = 3 ai_protocol = 0 ai_addrlen = 16 ai_addr = 0x8bbd150 ai_canonname = (null) ai_next = (nil)

ai_family
2 = AF_INET, 10 = AF_INET6. "include/linux/socket.h" 参照。
ai_socktype
1 = SOCK_STREAM, 2 = SOCK_DGRAM, 3 = SOCK_RAW. "include/linux/net.h" 参照。
ai_protocol
6 = IPPROTO_TCP, 17 = IPPROTO_UDP, 0 = IPPROTO_IP. "include/linux/in.h" 参照。

22:20

勘弁してくださいよ…。 MediaWiki で新規ページを作成したら httpd が segfault で落ちる件、 サーバ再起動したら直ってもうた。何だったんだろう。 メモリ化けか、PHP あたりの不具合でおかしな状態になってたか、そんな感じだろうかね。

07:36

複数の IP アドレスを持つホストを DNS で引いた場合、 クライアントと同じネットワークのアドレスが優先されると思っていたのだが、 そういうわけでもないのかね? うちのローカル DNS では、 別のネットワークのアドレスが先に返されてしまう。

■クライアント (Mac) $ ifconfig en0 en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 00:1b:63:bc:88:f7 inet 192.168.1.10 netmask 0xffffff00 broadcast 192.168.1.255 media: autoselect (1000baseT <full-duplex,flow-control>) status: active $ host lab lab.hagio.org has address 192.168.8.1 lab.hagio.org has address 192.168.1.1 $ ping lab PING lab.hagio.org (192.168.8.1): 56 data bytes Request timeout for icmp_seq 0 Request timeout for icmp_seq 1 ^C --- lab.hagio.org ping statistics --- 3 packets transmitted, 0 packets received, 100.0% packet loss

帰ってから調べるか。

May 16 (Mon)

19:42

なぜだかこのところ、マシンの不調が多い。 湿度が高くなったり、気温差が激しくなったりしてきているからだろうか…。

まず会社で使っているサーバが起動しなくなり、これまでの知識と経験を総動員させるも復旧できず、 情けないことに結局 OS を再インストールするしかなかった。しかも、原因も何もわからないでやんの。 これは屈辱ですよ… プロとして。プロ野球選手が草野球で三振しちゃったみたいな感じ。

次に、うちのサーバの httpd が segfault で落ちるようになったでしょ? これもまだ原因究明できていない。 もしかすると、意外とリブートしたりするとケロッと治ってしまうかもしれないが…。

最後に、うちの Mac のネットワークインタフェースが 100 Mbps になってしまったこと。 これは今日気づいたのだが、なんかバックアップが遅くなったなと思ったら、 速度が落ちていた。Mac には ethtool 的なコマンドはないのかね?

$ ifconfig en0 en0: flags=8863 mtu 1500 ether 00:1b:63:bc:88:f7 inet 192.168.1.10 netmask 0xffffff00 broadcast 192.168.1.255 media: autoselect (100baseTX ) status: active

とりあえずハブ側のポートを抜き差ししたが、変わらず。 念のため Mac 側のポートを抜き差ししたところ… (いま)、

$ ifconfig en0 en0: flags=8863 mtu 1500 ether 00:1b:63:bc:88:f7 inet 192.168.1.10 netmask 0xffffff00 broadcast 192.168.1.255 media: autoselect (1000baseT ) status: active

うは、復活した。ハードはようわからん…。しかし、こういうこともあるのだな。 前にもあったが、まずは基本的なところから見直せということか。

そして、オレも調子悪い。 平常時からネジ 2 〜 3 本飛んでいるオレだが (もっと?)、ふた桁いってる気がする。

5 月(1) へ


↑戻る