顯示具有 SUN 標籤的文章。 顯示所有文章
顯示具有 SUN 標籤的文章。 顯示所有文章

在 Solaris 10 以 IPMP 簡易配置網卡的 Virtual IP

這次的實作要把本來只有一個實體 IP 的 Solaris 10 的機器改成兩個實體 IP 加上共用一個對外的虛擬 IP,實際的配置將如下:在這個實作中,我們大致上要改動到以下幾個檔案:/etc/hosts, /etc/hostname.bge0, /etc/hostname.bge1, /etc/defaultrouter,其中 bge0 與 bge1 是因為本次的實作機器為 Netra 210,所以網卡的部分請自行依據機型而變。
原配置:
bge0: 10.15.25.43

新配置:
bge0:10.15.25.31
bge1:10.15.25.32
Virtual IP: 10.15.25.43
root@KHCFEMS01 # uname -a
SunOS KHCFEMS01 5.10 Generic_137137-09 sun4u sparc SUNW,Netra-210
root@KHCFEMS01 # cat /etc/release
Solaris 10 10/08 s10s_u6wos_07b SPARC
Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
Use is subject to license terms.
Assembled 27 October 2008
當然這裡的設定也有幾個限制,首先是兩塊網卡要能提供同樣的工作模式,再來是所有設定的 IP 要在同一個網段之內,而且在這網段內要有其他的機器或設備存在,通常是 GW 啦,可以設置在 defaultrouter 內;當設定完之後,系統會不斷發出 ICMP 的 echo request 封包給同網路的 GW,應該會得到 ICMP Echo reply,另外還會同時監控網卡上有沒有 RUNNING 的存在 (就是用 ifconfig -a 時會在 <> 看到的),這兩項測試都 OK 的話,就判定網卡是 OK 的;任一項失敗,就判定網卡是 nOK 的。(這個最後我們再用snoop來測試一下就知道)

接下來就是開始設定了,首先編輯一下 /etc/hosts:
root@KHCFEMS01 # vi /etc/hosts
#
# Internet host table
#
127.0.0.1 localhost
10.15.25.43 KHCFEMS01 khcfems01 loghost
10.15.25.44 KHCFEMS02 khcfems02
10.15.25.31 KHCFEMS01_bge0 khcfems01_bge0
10.15.25.32 KHCFEMS01_bge1 khcfems01_bge1
10.15.25.33 KHCFEMS02_bge0 khcfems02_bge0
10.15.25.34 KHCFEMS02_bge1 khcfems02_bge1
接著我們啟動 bge1 的網卡:
1. 未啟動之前的現狀:
2. 啟動後的狀態:接著我們要編輯 /etc/hostname.bge0 與 /etc/hostname.bge1:
再來是編輯一下 /etc/defaultrouter 和 /etc/netmasks 囉:最後,用 init 6 重新開機一下吧~

重開完之後用 ifconfig -a 看一下網卡的狀態:接著我們用 snoop 來看一下封包吧:
P.S.1. 注意到網卡中被 <> 括起來的部分了嗎:
UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER
有 RUNNING 而且 ping 的到 GW 才有機會帶起 Virtual 的 Interface 喔!另外,NOFAILOVER 就是現在 IPMP group 的狀態啦。

P.S.2. 可以看到已經有一個新的 bge0:1 被帶起來了,而其對外的 Virtual IP 也是我們設定的 10.15.25.43 囉~

以上,報告完畢!
(詳全文...)

如何在 SunFire with Solaris 的機器上把指示燈打開?

有時候到機房去找一台不知道在哪裡的機器時,那真可謂是大海撈針一般啊。所以如果可以先將這機器上那超亮的指示燈打開(機器的前後都會亮喔),一到機房,是不是就很容易可以找到要的機器了呢?當然前提是這台機器是有接電的啦,呵呵...

這裡我們就來試一下這個很好用的 command 吧...
首先看一下這個 command 有什麼 option 吧:
root@cms0 # /usr/sbin/locator ?
usage: locator [-n | -f]
加上 -n 是用來打開定位器指示燈的:
# /usr/sbin/locator -n
如果你的機器是處於 SC mode (ALOM command line),那你可以使用下面的 command 來打開指示燈:
sc> setlocator on
加上 -f 就是用來關閉定位器指示燈:
# /usr/sbin/locator -f
而 SC mode (ALOM command line),就使用下面的 command 來關閉指示燈:
sc> setlocator off
不加 option 則用來顯示定位器指示燈的狀態:
# /usr/sbin/locator
如果機器的指示燈目前狀態是關閉的,那應該就會得到像下面的結果:
The 'system' locator is off.
而 SC mode (ALOM command line),就使用下面的 command 來檢查指示燈狀態:
sc> showlocator

好了,報告完畢,雖然很短,但常到機房找機器的人應該會覺得很實用吧!
(詳全文...)

如何備份 Solaris 系統ㄌㄟ?(二)

這一篇要說的是部分資料或者說目錄好了的備份方式,相對來說會比上一篇簡單點,也就是採用 tar 命令來完成,這裡用兩個範例來說明:

首先第一個例子是把整個 /CMSshare 目錄備份到 TAPE:

root@cms0 # cd /CMSshare (切換到要備份的目錄)
root@cms0 # mt rew (備份前先把 TAPE 倒帶一下吧)
root@cms0 # /usr/local/bin/tar cvf /dev/rmt/0n ./* (這裡其中 0n 指備份完不倒帶,若只有0是備份完就倒帶)

root@cms0 # mt rew (檢查前先把 TAPE 倒帶一下吧)
root@cms0 # /usr/local/bin/tar tvf /dev/rmt/0n (檢查一下剛剛備份的資料)

這裡是把備份到 TAPE 的資料還原回 /CMSshare 目錄:

root@cms0 # cd /CMSshare (切換到要還原的目錄)
root@cms0 # mt rew (還原前一樣先把 TAPE 倒帶一下吧)
root@cms0 # /usr/local/bin/tar xfp /dev/rmt/0

接下來第二個例子是把整個 c3t3d0 上的 /CMSshare 目錄 (c3t3d0s6,因為是外接的 3310 Storage) 備份到 c1t2d0 :

Step1:
先檢查一下目前的 Disk format 狀態吧:
root@cms0 # format

Step2: 把新的 72G HDD 放進 c1t2d0, 然後用 devfsadm 重新掃一下這顆 HDD 吧:
root@cms0 # devfsadm


Step3: 再檢查一次目前的 Disk format 狀態:
root@cms0 # format


>>> 新的 HDD 應該會出現在 AVAILABLE DISK SELECTIONS:
2. c1t2d0 (SUN72G cyl 14087 alt 2 hd 24 sec 424)
/pci@1c,600000/scsi@2/sd@2,0

Specify disk (enter its number): ^D ( Ctrl+d 離開吧)
root@cms0 #


Step4: detect c1t2d0 的新 HDD 後我們先把 c1t2d0s2 做 newfs 的動作:
root@cms0 # newfs /dev/rdsk/c1t2d0s2


Step5: 把 c1t2d0s2 mount 到 /mnt 去吧,然後檢查一下是不是有看到 lost+found:
root@cms0 # mount /dev/dsk/c1t2d0s2 /mnt
root@cms0 # ls -alrt /mnt

total 22
drwxr-xr-x 33 root root 2048 Oct 3 16:07 ..
drwx------ 2 root root 8192 Oct 23 18:19 lost+found
drwxr-xr-x 3 root root 512 Oct 23 18:19 .

Step6: 檢查一下目前 /CMSshare 和 /mnt 的 Disk partition:
root@cms0 # df -k

Filesystem kbytes used avail capacity Mounted on
/dev/dsk/c3t3d0s6 104025041 82993939 19990852 81% /CMSshare
/dev/dsk/c1t2d0s2 70592505 9 69886571 1% /mnt

Step7: 開始 Dump /CMSshare 的資料到 c1t2d0s2:
root@cms0 # cd /CMSshare

root@cms0 # /usr/local/bin/tar cvf - ./*|(cd /mnt; /usr/local/bin/tar xfp -)


Step8: Dump 完 /CMSshare 的資料後把 c1t2d0s2 從 /mnt umount 掉吧:
root@cms0 # umount /mnt


Step9: 現在可以把新 HDD 拔出 c1t2d0 囉。

這樣就算備份完成囉....簡單吧。
(詳全文...)

如何備份 Solaris 系統ㄌㄟ?(一)

昨天寫到 Linux 上的備份還原機制,就看到 Vicky 的留言,所以今天就把 Solaris 上的備份方式也貼上來好了。這裡我們的示範環境為 SunFire v240 的機器上面 OS Solaris 8 (其中 c1t0d0 和 c1t1d0 SDS mirror,然後 c1t2d0 用來備份測試,不過關於 SDS 的部分以後再說吧,雖然那也是一種備份整顆 HDD 資料的方式):

首先,比較簡單的方式就是用 dd 命令來直接備份整顆 c1t0d0 的資料( OS ) c1t2d0

Step1: 先檢查一下目前的 Disk format 狀態吧:
root@cms0 # format

Step2: 把新的 72G HDD 放進 c1t2d0, 然後用 devfsadm 重新掃一下這顆 HDD 吧:
root@cms0 # devfsadm

Step3: 再檢查一次目前的 Disk format 狀態:
root@cms0 # format

>>> 新的 HDD 應該會出現在 AVAILABLE DISK SELECTIONS:
2. c1t2d0 (SUN72G cyl 14087 alt 2 hd 24 sec 424)
/pci@1c,600000/scsi@2/sd@2,0

Specify disk (enter its number): ^D ( Ctrl+d 離開吧)
root@cms0 #

Step4: detect c1t2d0 的新 HDD 後我們開始把目前 c1t0d0 partition table 備一份到 c1t2d0 的新 HDD 囉:
root@cms0 # prtvtoc /dev/rdsk/c1t0d0s2 | fmthard -s - /dev/rdsk/c1t2d0s2
fmthard: New volume table of contents now in place.

Step5: 接著就可以開始 dump c1t0d0 上含 OS 的資料到 c1t2d0 了:
root@cms0 # dd if=/dev/rdsk/c1t0d0s2 of=/dev/rdsk/c1t2d0s2 bs=2048k

Step6: Dump 完資料後就可以把新 HDD 拔出 c1t2d0 囉。

第二種方式,使用 ufsdump 命令來做,不過這種方式因為是以一個一個 mount point 來做,所以相對比較麻煩,而且對於跨 mount point 的 link,在做完要使用新 HDD 時,需要記得先手動把這些目錄建回來喔!!

Step1: 跟使用 dd 一樣,先檢查一下目前的 Disk format 狀態吧:
root@cms0 # format

Step2: 把新的 72G HDD 放進 c1t2d0, 然後用 devfsadm 重新掃一下這顆 HDD 吧:
root@cms0 # devfsadm

Step3: 再檢查一次目前的 Disk format 狀態:
root@cms0 # format

>>> 新的 HDD 應該會出現在 AVAILABLE DISK SELECTIONS:
2. c1t2d0 (SUN72G cyl 14087 alt 2 hd 24 sec 424)
/pci@1c,600000/scsi@2/sd@2,0

Specify disk (enter its number): ^D ( Ctrl+d 離開吧)
root@cms0 #

Step4: detect c1t2d0 的新 HDD 後我們開始把目前 c1t0d0 partition table 備一份到 c1t2d0 的新 HDD 囉:
root@cms0 # prtvtoc /dev/rdsk/c1t0d0s2 | fmthard -s - /dev/rdsk/c1t2d0s2
fmthard: New volume table of contents now in place.

Step5: 先 newfs 一下 /dev/rdsk/c1t2d0s0 給 / partition 用:
root@cms0 # newfs /dev/rdsk/c1t2d0s0


Step6: 把 c1t2d0s0 mount 到 /mnt 去吧,然後檢查一下是不是有看到 lost+found:

root@cms0 # mount /dev/dsk/c1t2d0s0 /mnt

root@cms0 # ls -alrt /mnt
total 22
drwxr-xr-x 33 root root 2048 Oct 3 16:07 ..
drwx------ 2 root root 8192 Oct 23 18:19 lost+found
drwxr-xr-x 3 root root 512 Oct 23 18:19 .

Step7: 檢查一下目前的 Disk partition for / and /mnt:

root@cms0 # df -k

Filesystem kbytes used avail capacity Mounted on
/dev/dsk/c1t0d0s0 10177036 1047539 9027727 11% /
/dev/dsk/c1t2d0s0 11219980 9 11107772 1% /mnt

Step8: 開始 Dump / 的資料到 c1t2d0s0:

root@cms0 # cd /

root@cms0 # ufsdump 0uf - . | (cd /mnt; ufsrestore xf -);date

( 敲入“y” 兩次來確認)

set owner/mode for '.'? [yn] y
Directories already exist, set modes anyway? [yn] y

root@cms0 # iostat -cnzx 10 (用來檢查目前的 I/O status,這裡的 10 是每 10 秒的意思啦)


Step9: 再檢查一次目前的 Disk partition for /ot and /mnt:

root@cms0 # df -k

Filesystem kbytes used avail capacity Mounted on
/dev/dsk/c1t0d0s0 10177036 1047539 9027727 11% /
/dev/dsk/c1t2d0s0 10177036 1047569 9027697 11% /mnt

Step10: Install boot for / partition
:(這一步千萬別忘了唷)
root@cms0 # installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c1t1d0s0


Step11: Dump 完 / 的資料後把 c1t2d0s0 從 /mnt umount 掉吧:

root@cms0 # umount /mnt


Step12: 再來 newfs 一下 /dev/rdsk/c1t2d0s4 給 /var partition 用:
root@cms0 # newfs /dev/rdsk/c1t2d0s4


Step13: 把 c1t2d0s4 mount 到 /mnt 去吧,然後檢查一下是不是有看到 lost+found:
root@cms0 # mount /dev/dsk/c1t2d0s4 /mnt

root@cms0 # ls -alrt /mnt

total 22
drwxr-xr-x 33 root root 2048 Oct 3 16:07 ..
drwx------ 2 root root 8192 Oct 23 18:19 lost+found
drwxr-xr-x 3 root root 512 Oct 23 18:19 .

Step14: 檢查一下目前的 Disk partition for /var and /mnt:
root@cms0 # df -k

Filesystem kbytes used avail capacity Mounted on
/dev/dsk/c1t0d0s4 10080200 2563351 7416047 26% /var
/dev/dsk/c1t2d0s4 11219980 9 11107772 1% /mnt

Step15: 開始 Dump /var 的資料到 c1t2d0s4:

root@cms0 # cd /var

root@cms0 # ufsdump 0uf - . | (cd /mnt; ufsrestore xf -);date

( 敲入“y” 兩次來確認)
set owner/mode for '.'? [yn] y
Directories already exist, set modes anyway? [yn] y
root@cms0 # iostat -cnzx 10 (用來檢查目前的 I/O status,這裡的 10 是每 10 秒的意思啦)

Step16: 再檢查一次目前的 Disk partition for /var and /mnt:

root@cms0 # df -k

Filesystem kbytes used avail capacity Mounted on
/dev/dsk/c1t0d0s4 10080200 2563383 7416015 26% /var
/dev/dsk/c1t1d0s4 11219980 2563374 8544407 25% /mnt

Step17: Dump 完 /
var 的資料後把 c1t2d0s4 從 /mnt umount 掉吧:
root@cms0 # umount /mnt


Step18: 再來 newfs 一下 /dev/rdsk/c1t2d0s5 給 /oracle partition 用:
root@cms0 # newfs /dev/rdsk/c1t2d0s5


Step19: 把 c1t2d0s5 mount 到 /mnt 去吧,然後檢查一下是不是有看到 lost+found:
root@cms0 # mount /dev/dsk/c1t2d0s5 /mnt

root@cms0 # ls -alrt /mnt

total 22
drwxr-xr-x 33 root root 2048 Oct 3 16:07 ..
drwx------ 2 root root 8192 Oct 23 18:19 lost+found
drwxr-xr-x 3 root root 512 Oct 23 18:19 .

Step20: 檢查一下目前的 Disk partition for /oracle and /mnt:
root@cms0 # df -k

Filesystem kbytes used avail capacity Mounted on
/dev/dsk/c1t0d0s5 20545897 1964723 18375716 10% /oracle
/dev/dsk/c1t2d0s5 20545897 9 20340430 1% /mnt

Step21: 開始 Dump /oracle 的資料到 c1t2d0s5 >>

root@cms0 # cd /oracle

root@cms0 # ufsdump 0uf - . | (cd /mnt; ufsrestore xf -);date

( 敲入“y” 兩次來確認)

set owner/mode for '.'? [yn] y
Directories already exist, set modes anyway? [yn] y
root@cms0 # iostat -cnzx 10 (用來檢查目前的 I/O status,這裡的 10 是每 10 秒的意思啦)


Step22: 再檢查一次目前的 Disk partition for
/oracle and /mnt:
root@cms0 # df -k

Filesystem kbytes used avail capacity Mounted on
/dev/dsk/c1t0d0s5 20545897 1964723 18375716 10% /oracle
/dev/dsk/c1t1d0s5 20545897 1964769 18375670 10% /mnt

Step23: Dump 完
/oracle 的資料後把 c1t2d0s5 從 /mnt umount 掉吧:
root@cms0 # umount /mnt


Step24: 再來 newfs 一下 /dev/rdsk/c1t2d0s6 給 /opt partition 用:
root@cms0 # newfs /dev/rdsk/c1t2d0s6


Step25: 把 c1t2d0s6 mount 到 /mnt 去吧,然後檢查一下是不是有看到 lost+found:
root@cms0 # mount /dev/dsk/c1t2d0s6 /mnt

root@cms0 # ls -alrt /mnt

total 22
drwxr-xr-x 33 root root 2048 Oct 3 16:07 ..
drwx------ 2 root root 8192 Oct 23 18:19 lost+found
drwxr-xr-x 3 root root 512 Oct 23 18:19 .

Step26: 檢查一下目前的 Disk partition for /opt and /mnt:
root@cms0 # df -k

Filesystem kbytes used avail capacity Mounted on
/dev/dsk/c1t0d0s6 20545897 1246351 19094088 7% /opt
/dev/dsk/c1t2d0s6 20545897 9 20340430 1% /mnt

Step27: 開始 Dump /opt 的資料到 c1t2d0s6 >>

root@cms0 # cd /opt

root@cms0 # ufsdump 0uf - . | (cd /mnt; ufsrestore xf -);date

( 敲入“y” 兩次來確認)

set owner/mode for '.'? [yn] y
Directories already exist, set modes anyway? [yn] y
root@cms0 # iostat -cnzx 10 (用來檢查目前的 I/O status,這裡的 10 是每 10 秒的意思啦)


Step28: 再檢查一次目前的 Disk partition for /opt and /mnt:

root@cms0 # df -k

Filesystem kbytes used avail capacity Mounted on
/dev/dsk/c1t0d0s6 20545897 1246351 19094088 7% /opt
/dev/dsk/c1t2d0s6 20545897 1246423 19094016 7% /mnt

Step29: Dump
完 /opt 的資料後把 c1t2d0s6 從 /mnt umount 掉吧:
root@cms0 # umount /mnt


Step30: Dump 完所有 mount point 的資料並 unmount 掉 /dev/dsk/c1t2d0 之後就可以把新 HDD 拔出 c1t2d0 囉。

以上這兩種方法可以看成是針對整顆 HDD 的資料來做備份或轉移的喔。
剩下的就留到下一篇再寫吧...以上,報告完畢。

(詳全文...)

為何 Ethereal 抓到的封包都顯示 "TCP CHECKSUM INCORRECT"

今天收到一封 mail 說 site 的人寄來一個 Ethereal 檔,但裡面由 vbsu2 bge0 到 vscsmp1 bge0 的封包有一堆的 "TCP CHECKSUM INCORRECT",問說是不是我們網路或者機器出了什麼問題了...

我查了一下,這個問題有兩種可能,第一種當然是 機器的 checksum 真的出狀況,不過我檢查了一下兩台機器的網路設定都正常,"netstat -i" 看到的也沒有問題:
vbsu2# netstat -i
Name Mtu Net/Dest Address Ipkts Ierrs Opkts Oerrs Collis Queue
lo0 8232 loopback localhost 185648811 0 185648811 0 0 0
bge0 1500 vbsu2 vbsu2 3852441355 0 2300074072 0 0 0
bge1 1500 vbsu2 vbsu2 1308849274 0 654286221 0 0 0
bge2 1500 vbsu2_bge2 vbsu2_bge2 90997818 0 70916223 0 1 0
bge3 1500 vbsu2_bge3 vbsu2_bge3 66905686 0 68586413 0 1 0
vscsmp1# netstat -i
Name Mtu Net/Dest Address Ipkts Ierrs Opkts Oerrs Collis Queue
lo0 8232 loopback localhost 3009726492 0 3009726492 0 0 0
bge0 1500 vscsmp1 vscsmp1 2974853663 0 1088339819 0 0 0
bge3 1500 vscsmp1_qfe3 vscsmp1_qfe3 407128947 0 3519356 0 0 0
qfe0 1500 vscsmp1 vscsmp1 1227705888 0 831020139 0 0 0
qfe2 1500 172.16.0.128 172.16.0.129 3305973879 0 3289022674 0 0 0
bge2 1500 172.16.1.0 172.16.1.1 3279046154 7 3280696443 0 0 0
qfe1 1500 vscsmp1_qfe1 vscsmp1_qfe1 456708510 0 11583742 0 0 0
再來是檢查 Switch 上面這兩台機器所界接的 port 狀況:
VSW01# sh int Gi2/0/15
GigabitEthernet2/0/15 is up, line protocol is up (connected)
Hardware is Gigabit Ethernet, address is 0014.1c2e.a60f (bia 0014.1c2e.a60f)
MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Keepalive set (10 sec)
Full-duplex, 100Mb/s, media type is 10/100/1000BaseTX
input flow-control is off, output flow-control is unsupported
ARP type: ARPA, ARP Timeout 04:00:00
Last input never, output 00:00:29, output hang never
Last clearing of "show interface" counters never
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/40 (size/max)
5 minute input rate 435000 bits/sec, 66 packets/sec
5 minute output rate 442000 bits/sec, 120 packets/sec
2299440955 packets input, 3364519803 bytes, 0 no buffer
Received 130985710 broadcasts (0 multicast)
0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
0 watchdog, 0 multicast, 0 pause input
0 input packets with dribble condition detected
1888829558 packets output, 1756426108 bytes, 0 underruns
0 output errors, 0 collisions, 4 interface resets
0 babbles, 0 late collision, 0 deferred
0 lost carrier, 0 no carrier, 0 PAUSE output
0 output buffer failures, 0 output buffers swapped out
VSW01# sh int Gi2/0/1
GigabitEthernet2/0/1 is up, line protocol is up (connected)
Hardware is Gigabit Ethernet, address is 0014.1c2e.a601 (bia 0014.1c2e.a601)
MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
reliability 255/255, txload 3/255, rxload 6/255
Encapsulation ARPA, loopback not set
Keepalive set (10 sec)
Full-duplex, 100Mb/s, media type is 10/100/1000BaseTX
input flow-control is off, output flow-control is unsupported
ARP type: ARPA, ARP Timeout 04:00:00
Last input never, output 00:00:19, output hang never
Last clearing of "show interface" counters never
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/40 (size/max)
5 minute input rate 2603000 bits/sec, 703 packets/sec
5 minute output rate 1218000 bits/sec, 626 packets/sec
1082693515 packets input, 2233319119 bytes, 0 no buffer
Received 554691 broadcasts (0 multicast)
0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
0 watchdog, 0 multicast, 0 pause input
0 input packets with dribble condition detected
1859379099 packets output, 1999426888 bytes, 0 underruns
0 output errors, 0 collisions, 4 interface resets
0 babbles, 0 late collision, 0 deferred
0 lost carrier, 0 no carrier, 0 PAUSE output
0 output buffer failures, 0 output buffers swapped out
VSW01#
從 Switch 上看來並沒有什麼問題,沒有任何的 packet error 出現。所以暫時排除機器本身 checksum error 的可能性。

那麼接下來有可能的就是這兩台 SunFire v240 所用的網卡上的 checksum offload 造成的了,順便再查了一下,我們機器上所用的 ce, bge 網卡都有 support TCP checksum offload,而且 default 居然還是 enable 的。

所以這裡有兩種方式可以不再看到這個 "TCP CHECKSUM INCORRECT" 出現,第一種就是直接到機器上把 /etc/system 加上下面這一行:
set ip:dohwcksum = 0
然後重起機器就可以了。

第二種方式比較鴕鳥一點,就是直接到 Ethereal 裡面去把 Checksum 的檢查選項關掉:
打開 Ethereal,
點選 Edit
> Preference
然後點開 Protocol
選擇 IP,然後把右邊視窗的 "Validate the IP checksum if possible" 選項關掉。
然後就天下太平了。
參考網站:The Ethereal Wiki page

這邊直接把 TCP checksum offloading 的用意直接貼上,大家參考看看:

Many Gigabit network adapters have the "Checksum offload" feature enabled by default. When this is enabled, the adapter performs the time-consuming process of calculating the checksum which appears in both the IP header and in the TCP header of a packet.

For some network drivers, if the checksum calculations are offloaded then the checksum value(s) are set to zero. Ethereal captures each outgoing packet before it goes to the adapter, thus the checksum for the packet was not calculated.
(詳全文...)