Friday, August 29, 2008

queryperf: 測試DNS Server的效能/壓力工具

今天找到了一個對於DNS Server做stress test的好工具: queryperf,這個工具事實上內建於bind套件中,不過我的Centos5.2與OpenSUSE10是透過rpm安裝bind的,利用rpm -ql | grep -i queryperf卻找不到相關的檔案?於是乎我去抓了bind tarball檔,將queryperf compile起來,產生queryperf binary file就可以使用了。

使用的語法也不難主要如下:

./queryperf -d -s

-d 是讀取測試RR文檔的意思
-s 是指定所要測試的DNS Server

RR_document的格式也是很簡單的,請參考以下範例:
server1.example.com A -> query server1.example.com A Record
example.com MX -> query example.com domain mx Record
mail.example.com CNAME -> query mail.example.com CNAME
server1.example.com TXT -> query server1.example.com TXT Record
example.com TXT -> query example.com domain TXT Record
example.com NS -> query example.com domain NS Record
100.10.10.10.in-addr.arpa PTR -> query 10.10.10.100 PTR Record
101.10.10.10.in-addr.arpa PTR -> query 10.10.10.101 PTR Record

Note: ->是說明,不需要加入到RR_document

執行結果:
Statistics:

Parse input file: once
Ended due to: reaching end of file

Queries sent: 8 queries
Queries completed: 8 queries
Queries lost: 0 queries
Queries delayed(?): 0 queries

RTT max: 0.033874 sec
RTT min: 0.013128 sec
RTT average: 0.023992 sec
RTT std deviation: 0.007508 sec
RTT out of range: 0 queries

Percentage completed: 100.00%
Percentage lost: 0.00%

Started at: Mon Aug 25 03:33:47 2008
Finished at: Mon Aug 25 03:33:47 2008
Ran for: 0.034861 seconds

Queries per second: 229.482803 qps

緊接著來寫個簡單的script讓他不斷的執行queryperf吧!
#!/bin/bash
while true
do
./queryperf -d dnstest -s $1 -v
done

把DNS所有的RR都寫入RR_document,這麼一來,就可以來試看看你的DNS Server耐不耐操了 XD!

Friday, August 22, 2008

控管非Linux風格的file system的權限

現今Linux已經可以支援許多非Linux的檔案系統了,比如vfat,ntfs,hpfs,hfs等等,而預設上只有root可以對這些非Linux風格的檔案系統做新增與刪除的動作,其他一般user是不被允許的,或許有人覺得,還好吧!那我用chown硬上看看,但得到的結果會是.... Operation not permitted,非常遺憾呢~ 然而小弟不才今天發現到了可行的方案,在此提供給各位參考:

解決的方法非常簡單,用mount參數就可以解決了!
uid=lawrence ->代表此檔案系統中所有的檔案的使用者都是lawrence
gid=qa -> 代表此檔案系統中所有的檔案的群組都是qa
umask=027 -> 類似原本umask的功能,只不過不分檔案與目錄所有預設的權限都是777 (Linux filesystem 新增檔案時權限為666,目錄為777),所以此檔案系統的權限為750

整個mount指令下達: mount -t vfat -o uid=lawrence,gid=qa,umask=027 /dev/hdaX /mnt/msdos
(-t vfat可不輸入)

Thursday, August 21, 2008

Colasoft Packet Builder

帽客很少介紹在Windows上的軟體,不過我覺得從事網通業的各位朋友們如果使用了這套軟體,對於網路行為的除錯應該是有些幫助,Colasoft Packet Builder是一套在Windows作業系統上的免費軟體,透過它我們可以製造出想要的TCP, UDP, IP, ARP的封包,好用的是我發現到它還load一些capture packets的紀錄檔(sniffer/wireshark),修改過後再產生packets,感謝D-Link大大Dennis的介紹~

Colasoft Packet Builder

Friday, August 15, 2008

忽視fsck 當mount filesystem達到指定的數量

有使用Ubuntu的朋友們應該有發現到,有時開機時會顯示正在fsck filesystem,這時只能去泡杯茶等它檢查完畢了,當然這樣對於filesystem的完整性並避免磁碟的錯誤是有幫助的,但是有時帽客實在是不太想等Ubuntu的這個好意,所以我用以下的方法將它取消:

1.先使用dumpe2fs得到mount幾次後就會fsck filesystem:
lawrence@lawrence-x24:~$ sudo dumpe2fs /dev/sda3 | grep -i mount
dumpe2fs 1.40.8 (13-Mar-2008)
Last mounted on:
Default mount options: (none)
Last mount time: Fri Aug 15 09:03:55 2008
Mount count: 27
Maximum mount count: 35
得到目前mount 27次,並於第35次時會fsck filesystem。

2.使用tune2fs修改Maximum mount count為-1(永不fck):
lawrence@lawrence-x24:~$ sudo tune2fs -c -1 /dev/sda3
tune2fs 1.40.8 (13-Mar-2008)
Setting maximal mount count to -1
lawrence@lawrence-x24:~$ sudo dumpe2fs /dev/sda3 | grep -i mount
dumpe2fs 1.40.8 (13-Mar-2008)
Last mounted on:
Default mount options: (none)
Last mount time: Fri Aug 15 09:03:55 2008
Mount count: 27
Maximum mount count: -1

實際上還有個參數,當經過多久後,也會fsck filesystem:
lawrence@lawrence-x24:~$ sudo dumpe2fs /dev/sda3 | grep -i inter
dumpe2fs 1.40.8 (13-Mar-2008)
Check interval: 15552000 (6 months)

看來預設是6個月,恩這樣倒不錯。

Thursday, August 14, 2008

Process執行中止時便停止追蹤(tail -f)

tail -f 可以持續顯示新增的檔案內容,對於協助追蹤某些檔案的內容變化非常有幫助,但事實上如果process已經沒有繼續執行的時候,那麼意義可能不大,所幸還是有解決的方法,利用--pid= 就可以做到,以下是實際演練:

1. ping hinet苦命的DNS 168.95.1.1,並將結果redirect到/tmp/test
# ping 168.95.1.1 > /tmp/test &

2.利用tail持續追蹤/tmp/test,並輸入ping process的pid
# tail -f --pid=xxxx /tmp/test

3. 中止ping
# killall ping

此時應該會看到類似這樣的行為:
[root@server2 tmp]# ping 168.95.1.1 > /tmp/test &
[1] 11024
[root@server2 tmp]# tail -f --pid=11024 /tmp/test
64 bytes from 168.95.1.1: icmp_seq=1 ttl=239 time=52.6 ms
64 bytes from 168.95.1.1: icmp_seq=2 ttl=246 time=21.4 ms
64 bytes from 168.95.1.1: icmp_seq=3 ttl=246 time=19.9 ms
64 bytes from 168.95.1.1: icmp_seq=4 ttl=246 time=19.6 ms
64 bytes from 168.95.1.1: icmp_seq=5 ttl=246 time=18.4 ms
64 bytes from 168.95.1.1: icmp_seq=6 ttl=239 time=50.9 ms
64 bytes from 168.95.1.1: icmp_seq=7 ttl=246 time=17.6 ms
64 bytes from 168.95.1.1: icmp_seq=8 ttl=246 time=19.1 ms
64 bytes from 168.95.1.1: icmp_seq=9 ttl=239 time=51.4 ms
64 bytes from 168.95.1.1: icmp_seq=10 ttl=246 time=18.1 ms
64 bytes from 168.95.1.1: icmp_seq=11 ttl=239 time=52.3 ms
64 bytes from 168.95.1.1: icmp_seq=12 ttl=246 time=20.6 ms
64 bytes from 168.95.1.1: icmp_seq=13 ttl=246 time=18.9 ms
64 bytes from 168.95.1.1: icmp_seq=14 ttl=239 time=53.4 ms
64 bytes from 168.95.1.1: icmp_seq=15 ttl=246 time=18.6 ms
64 bytes from 168.95.1.1: icmp_seq=16 ttl=246 time=18.5 ms
64 bytes from 168.95.1.1: icmp_seq=17 ttl=246 time=18.9 ms
[1]+ Terminated ping 168.95.1.1 >/tmp/test ping被kill了所以也就停止追蹤了。

Wednesday, August 13, 2008

刪除當前目錄備份檔(*~)的方法

我想到的方法分別有三種如下:

1. find ./ -iname "*~" -exec rm {} \;
2. find ./ -iname "*~" | xargs rm
3. rm `find ./ -iname "*~"`

如果您有更好的方法,煩請告知囉~

Thursday, August 07, 2008

Howto mount disk image

如果你今天面對的是disk image而不是一般的partition image,當使用mount -o loop時會無法mount成功。這很容易理解,因為你必須知道disk image中partition的位置後才能mount起來,怎麼做呢?以下將會說明:

需求: mount test.img 並更改第一個partition中的某個檔案

我們先看看如果直接用mount -o loop會如何:
lawrence@lawrence-x24:~/Desktop$ sudo mount -o loop test.img /mnt/test/
mount: you must specify the filesystem type
lawrence@lawrence-x24:~/Desktop$ sudo mount -o loop -t ext3 test.img /mnt/test/
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so

恩,看起來是不work......

所以我必須先知道test.img的磁軌與磁區大小才能算出第一個partition的位置:
lawrence@lawrence-x24:~/Desktop$ fdisk -l test.img
You must set cylinders.
You can do this from the extra functions menu.

Disk test.img: 0 MB, 0 bytes
16 heads, 63 sectors/track, 0 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Disk identifier: 0x00000000

所用裝置 Boot Start End Blocks Id System
test.img1 1 32 16096+ 83 Linux

得知每個 track 共 63 sectors, 每個 sector 是 512bytes,故得知第一個partition是在63*512=32256

接下來利用losetup將第一個partition先掛到/dev/loop0,並驗證:
lawrence@lawrence-x24:~/Desktop$ sudo losetup --offset 32256 /dev/loop0 test.img
lawrence@lawrence-x24:~/Desktop$ sudo losetup /dev/loop0
/dev/loop0: [0803]:865823 (test.img), offset 32256

好了,將它mount起來吧!
lawrence@lawrence-x24:~/Desktop$ sudo mount /dev/loop0 /mnt/test/
lawrence@lawrence-x24:~/Desktop$ df -h | grep test
/dev/loop0 16M 7.9M 6.6M 55% /mnt/test

修改完畢後,一樣將他umount掉並detach /dev/loop0
lawrence@lawrence-x24:/mnt/test$ cd
lawrence@lawrence-x24:~$ sudo umount /mnt/test
lawrence@lawrence-x24:~$ df -h | grep test
lawrence@lawrence-x24:~$ sudo losetup -d /dev/loop0
lawrence@lawrence-x24:~$ sudo losetup /dev/loop0
loop: can't get info on device /dev/loop0: 沒有此一裝置或位址

以上希望對大家有幫助。

PS. Redhat中如果要位移,是下達losetup -o 32256而不是losetup --offset 32256

Friday, August 01, 2008

線上學習Linux

發現到一個線上學習Linux的好地方,文章非常豐富,英文用詞也不會太難,且也提供html與PDF的下載,真是滿不錯的,非常感謝這些無私奉獻的人。

http://learnlinux.tsf.org.za/index.html