NFS 修理心得

因為我們最重要的 NFS server 突然不通了, 於是我試著將它修復.

第一步是檢查網路, 結果網路是好的.

第二步, 應該沒必要, 我檢查了硬碟 /sbin/fsck -Aa /dev/hda1, 結果找到一些 inode, iblock 的錯誤. 對了! 要先 umount /dev/hda1 再 fsck, 不然會有可怕的事發生. 做完 fsck 之後重開機.

第三步, 我發現關機的時候, NFS 就不能正常結束. 於是查了 NFS 的原理.

http://www.redhat.com/docs/manuals/enterprise/RHEL-3-Manual/ref-guide/ch-nfs.html

The stateless UDP connection under normal conditions minimizes network traffic, as the NFS server sends the client a cookie after the client is authorized to access the shared volume. This cookie is a random value stored on the server’s side and is passed along with RPC requests from the client. The NFS server can be restarted without affecting the clients and the cookie remains intact. However, because UDP is stateless, if the server goes down unexpectedly, UDP clients continue to saturate the network with requests for the server. For this reason, TCP is the preferred protocol when connecting to an NFSv3 server.

藍色字的部分提出了一個可能的問題. 因為我們很多個人一直在做實驗, 重開機,  client 一直在反覆 mount server, 而且都是用前幾次的 cookie. 當 server 被不正常地關機之後, 它就不再認得以前的 cookie, 因此雙方就無法連上了.

NFS 其實是透過 RPC (remote procedure call) 去聯絡 client 和 server, 但 RPC 需要 portmap 來管制. 查看 portmap 有沒有 work 是用這個指令:

rpcinfo -P

理論上會看到 NFS 用了 2049 這個 port, protocol 基本上有 UDP, 如果是 NFSv3, 還會有 TCP.

查看 portmap 有沒有在動, 用

/sbin/service portmap status

它如果說正在 running 那就對了.

接著將 NFS 打開, 重新打開, 或是看到沒開才開, 可以分別下不同的參數:

/sbin/service nfs start

/sbin/service nfs restart

/sbin/service nfs condrestart

如果只要載入, 不需要跑

/sbin/service nfs reload

關掉 NFS

/sbin/service nfs stop

以上應該都是 root 權限才能做的事.

2008/6/17 補充

此次修改 etc/exports 之後, 再啟動 nfs service, 意外地被抱怨.

[root@audio-server etc]# cd /sbin/
[root@audio-server sbin]# ./service nfs condrestart
Shutting down NFS mountd:                                 [  OK  ]
Shutting down NFS daemon:                                [  OK  ]
Shutting down NFS quotas:                                  [  OK  ]
Shutting down NFS services:                                [  OK  ]
Starting NFS services:  exportfs: /etc/exports:7: syntax error: bad option list
[FAILED]
Starting NFS quotas:                                       [  OK  ]
Starting NFS daemon:                                     [  OK  ]
Starting NFS mountd:                                      [  OK  ]

結果只是 rw, 多了一個空格, *(rw, insecure,sync,no_root_squash), 這樣就會錯了!

 

Lasik 雷射手術記事 – 機台研究

對於手術本身我已經研究得差不多之後, 我就開始研究機台. 現在的手術成功與否. 1/3 在醫師, 1/3 在機台, 1/3 在個人的體質與保養. 所以我必須要研究機台.

1. 目前佔有率高達 59% 的是 VISX 的機台, 它由第一代出到現在第四代. 第一代是大光斑. 雷射以同心圓的方式逐次地打. 它的治療速度飛快, 但是沒有眼球定位功能, 眼睛一轉就會打歪. 另外淚液可能因為堆積在角膜中間的凹槽, 吸收掉雷射的能量, 雷射打不掉角膜, 造成一個中心小島. 這個島會讓原本想做出的凹透鏡中間留下一個凸出物. 此時就算近視做到 0 度, 還是會看不見東西. 第四代當然就沒有這個問題了, 有 3D 眼球定位, 中央小島問題也會被有經驗的醫師直接打掉. 另外就是他的前導波技術有通過 FDA 認證, 理論上可以消除不規則散光.

2. B&L 博士倫 217z. 我本來以為博士倫是賣眼藥水的小公司. 想不到它也有雷射儀器. 它用的技術是飛點雷射, 所以不像 VISX 是打同心圓, 效果似乎也不錯. 新竹的國泰, 馬階都是用這一台.

3. NIDEK. 這台是日本的機器. 它的技術叫隙裂飛點, 類似飛點, 但是光點不是圓形的. 攻擊者說這是為了避專利想出的怪招. 但是也有對手認同它效果不錯, 只是太舊. 我看到廣告說它最能消除炫光的後遺症. 所以我一直蠻喜歡這台的. 後來看到大學眼科有這台, 也決定了我選擇大學眼科. 但是到手術的前一天, 我才發現它的 EC-5000 是有通過 FDA, OPD SCAN ARK-10000 前導波儀器也有通過 FDA. 不過兩者合在一起的 NAVEX 就還沒通過, 我才知道我還是得當白老鼠. 難怪它要用一張 1.44 MB 的磁片把資料手動 COPY 到 EC-5000 (CX?) 去讀.

4. 還有好多種, 不過佔有率低, 所以我就忽略了. 其中有一型有能量過強, 容易引起角膜混濁的缺點.

[註] 本篇大約寫於 2005 年 1 月, 所以資訊老舊, 請留意.

DDRI 與DDRII 比較

(1)DDR2 比 DDR1 快一倍, 一個 clock 抓 4 筆資料, 這個應該顯而易見.

(2)ODT (on die termination) 大家可以想像, 一個模組上會有多顆晶粒. 若其中一顆 die 已經正確讀寫資料, 排在後面的 die 就不用聽牌了. 此時把此 die 的電阻調小, 電流就不會流到別處, 這樣可以減少干擾.

(3) OCD (off chip driver) 因為電流還是有先來後到, 所以後面的 SDRAM IO buffer 需要適當地增強趨動能力.

以上是 DDR2 module 的簡單特性.

Vista PC 使用 Bluetooth 連上網路

因為每次想要用 CHT9100 當 PC 的 modem, 可是老是要設定一些東西, 步驟好像也很麻煩.

不過即使不能做甚麼簡化, 也不會希望忘記最慢的那種做法, 還是記錄下來得好.

假設是在 Vista 的環境底下, 大概會有下面的步驟:

1. 在控制台選擇 “網路和共用中心".

2. 在左邊選擇 “設定連線或網路".

3. 這時候會出來一個標題叫做 “選擇連線選項" 的視窗, 在這裡面找一個選項 “連線到 Bluetooth 個人區域網路 (PAN)".

4. 按下一步, 然後會出另一個視窗. 這時候會看到外部的網路 source, 例如出現一個手機.

5. 按下右下角的 “連線", 這樣就 OK 了.

Emphasis 小實驗


關於 emphasis 這個東西, 在 MPEG audio bit stream 裡面會出現.

它的意義我就不多解釋了. 總之是加強高頻 (emphasis) 與還原 (de-emphasis) 的機制.

但是怎麼做才符合 spec. 呢? 例如 CD 的 50/15 us 又是指什麼呢? 這就是我傷腦筋的地方了.

首先我們可以從網路資料看到 50/15 us 是指 time constant, 那麼應該和 RC time constant 有關吧!?

應該是因為早期的 filter 都是用 RC 做的.

因為 1 = 2*Pi*fs*T, 所以 T = 50 us 則 fs = 3,183.099 Hz, 而 15 us 得到 10,610.330 Hz. 所以控制的範圍在 3K~10K 之間.


根據 “signal and system" 書上說的:

如果 1 個 pole, 1 個 zero 而 zero 是 pole 的 10 倍, 這是一個 low pass filter, 最高最低點恰好差 20dB. 以下簡稱 20dB 的 LPF.

若 pole 是 zero 的 10 倍, 這是一個 -20dB 的 high pass filter.

如果有兩對這樣的 pole/zero. 如 pole=[5; 10], zero = [50; 100], 就是 40dB 的 LPF.

單一一個 pole/zero pair, 如果 zero 是 pole 的 100 倍, 這也是一個 40dB 的 low pass filter.


OK! 現在進入 matlab.

% 設定 zero and pole
p=[3183.099];
z=[10610.33];

% 由 zero, pole 建立 transfer function, 最後一個參數是 gain, 給 1 就行了.
% a, b 是 S domain 的 transfer function 的係數, b 是分子的 vector, a 是分母的 vector.
% w 是 frequency 軸的 sample 點

[b,a]=zp2tf(z,p,1);
[h,w]=freqs(b,a);

% 把圖畫出來, x 軸以 10 的次方為底畫出. y 軸取 log, abs(h) 表示 amplitude. angle(h) 表示 phase.
% w/(2*pi) 是因為 x 軸是 ?, 必須轉換成 Hz
% 這是 analog filter 的頻譜.

semilogx(w/(2*pi),20*log10(abs(h)));

% 畫上 X, Y 軸標籤
xlabel(‘Frequency [Hz]’);
ylabel(‘Magnitude [dB]’);

% 打上小格子
grid on;

% 保持住畫面不被後面的圖覆蓋, 而是疊加上去.
hold on;

% 做 bilinear transform, 在 48KHz sample 下, 以同樣的 a,b 做出 digital 上的 a_d, b_d vector.
[b_d, a_d] = bilinear(b, a, 48000);

% 在 48KHz 下, 求出 complex amplitude h 以及 frequency sample vector f.
% 100000 是隨便選的, 選大一點, unit circle 上的點會比較密.
[h,f]=freqz(b_d,a_d, 100000,48000);

% 再畫一次圖, 但顏色是紅色
% 這是 digital filter 的頻譜.
semilogx(f,20*log10(abs(h)),’color’,’r’);

此時 gain 大約 10 dB 多, 符合 20*log10(50/15) = 10.458 dB 的估計.

若 sampling rate 由 48KHz 減小, 紅色線也會往內縮. 這表示在不同 sampling rate 之下, digital filter 和 analog filter 會有差異.