LVM之痛

前一陣子,在公司做過 LVM 實驗之後
發覺 LVM 真是一個不錯的東西,
可以把多個硬碟串成一個大的 volume group.
你可以把他想像成一個容量超大的 heap,而你可以任意向他索取空間(logical volume),也可以任意再 attach physical volume 上去增加 volume group 的容量.
也因此才把 LVM 應用到自己家裡的 server 上~
在應用之後,一切都非常順利
除了 logwatch 每天回報說 hdb 有問題之外.
這裡稍稍為我的 hdb 作一下介紹.
hdb 是我的 Quantum Bigfoot 2G 硬碟,這顆算是古董了吧
從 1997 年服役至今,陪伴我將近 7 年,沒有任何怨言.
以下為了方便稱呼,我把它命名為”小Q一號”.
就在前天,星期六~~
小Q一號突然出現了奇怪的聲音,當時我還不以為意的繼續使用電腦~
到了晚上要關機的時候,發覺小Q一號居然無法 sync,kernel 持續回報說無法驅動它.
此時,我才發現大事不妙,這種懊悔的感覺充斥在我的腦海裡.
我真的很後悔,為什麼以前都忽略了它對我的警告呢??
但是太遲了~~
我已經無法將小Q一號由我所串起的 volume group 中移除~~
由於隔天要很早起床去旅遊,只好先作罷,含淚睡去.
翌日的翌日,也就是今天.
我試圖換上我內人以前所用過的,同樣也是 Quantum Bigfoot 2G 的硬碟,小Q二號.
想說,讓它也披上 physical volume 的外衣,看是否可以騙過我的 server,但是不行,仍然無法啟動.
由於下午要出門到使徒家裡去,只好再次作罷,含淚出門.
剛剛,也就是吃完晚飯後,我上網找到一篇文章(這篇應該是由英文的HOWTO翻譯過來的).
提到了volume group損毀的處置方法:
1.如果physical volume(硬碟)還能動的話,就是先利用 pvmove 先確定該physical volume不再有資料.然後再使用 vgreduce 將該 physical volume 從 volume group 中移掉.
2.如果不幸,硬碟不能動的話,那就只能先替換上同型號的硬碟或更大的硬碟,並使用 vgcfgrestore 強制把設定資料寫到新的 physical volume 上,以回復正常,當然,這麼做是會掉資料的.
我,因為小Q一號已經無法動彈了,也就是說我只能用第二種方法了.
# vgcfgrestore -f /etc/lvmconf/vgtest.conf -i -d -v -n vg0 /dev/hdd1
-f 是指定 volume group 的設定檔檔名
-i 是忽略大小
-d 是 debug
-v 是 verbose
-n 是指明 volume group 的名稱
/dev/hdd1 則是表明新的 physical volume 名稱
就這樣,我終於救回了我的資料.
只是還不知道有哪些資料因此損失了~~
🙁
註:
physical volume: 通常指的是一個 partition, partition type 指定為 0x8e, 以 pvcreate 建立之.
volume group: 以一個或多個 physical volume 所組成的 group.
logical volume: 向 volume group 索取而取得的空間,你可以對此空間作格式化動作.若空間不足或過大,你也可以作動態增減.

O-Notation

主要用來表示花費的時間
這在資料結構與演算法上很常見
表示法 名稱 例子
O(1) 常數 陣列索引(Array index)
O(logn) 對數 二元搜尋
O(n) 線性 字串比較
O(nlogn) nlogn 快速排序
O(n^2) 二次方 簡單的排序方法,如 bubble sort
O(n^3) 三次方 矩陣相乘(matrix multiplication)
O(2^n) 指數 集合分割(set partitioning)

Regular Expresstion速記

‘^’表示開頭
‘$’表示結尾
“^$” 比對空字串
‘.’ 僅代表一個任意字元
[0-9]表示 0~9 中的任一字元
‘|’ 表示 2 選 1
‘+’ 表示一次或多次
‘*’ 表示0次或多次
‘?’ 表示0次或1次
grep ‘.’ *.c | wc 計算非空白行數

MSDE安裝

MSDE2000安裝變得十分機車
因此將方法特地紀錄如下
請用指令列輸入
setup sapwd=”your_password” disablenetworkprotocols=0 instancename=”your_instance_name” securitymode=sql
sapwd 指定的是密碼,這是一定要指定的
disablenetworkprotocols 表示是否要對外開放 port, 預設好像是 1 的樣子,表示不對外開放,所以外面也連不進來
instancename 這個則是 instance name, 具名管道會用到,你可以給,也可以不給.
securitymode=sql 指定安全模式,instancename與此合用時,表示是混用模式,預設是 Windows 認證;若不加 instancename,只加此項,表示是 sql 認證模式.
就這樣子囉~~

mp4player trace 筆記

mp4player 是 mpeg4ip 內附的一個 player
RFC 1889 RTP 被 RFC 3550 淘汰(obsolete)
video 繼承 video_sdl
– 由 player_session 建立之,用以 sync video/audio
– 主要由 player_media 使用,player_session貫穿主軸,在建立video和player_media實體時,都會把自己傳入.
player_media 建立 plugin 時,會把 video_sync(m_video_sync)傳入codec_plugin中.
各個 codec_plugin 為 xxxx_file.cpp
codec_plugin 利用 check_for_video_codec() 傳回之.
plugin實作檔案最後都有一個 macro 定出 structure: mpeg4ip_codec_plugin.
如此一來,codec_plugin_cpp的 check_for_video_codec()/check_for_audio_codec() 即可利用 dlsym() 找到它,並依據此 structure 去叫用 plugin 中的 function.
rtsp_thread()
+-> get_rtp_packet()
 +-> callback_for_rtp_packet()
  +-> 呼叫設置的 callback
在 rtsp_thread 中,作完 callback 後,會呼叫 periodic(), 這也是藉由 rtsp_thread_set_rtp_callback() 去設置的.
c_rtp_periodic(), 用 rtsp_thread_set_rtp_callback()設進去.
mp4player 中,callback function (CPlayerMedia::rtp_receive_packet(),此 function 會被包在 c_rtp_packet_callback, 再被上面的 rtsp_thread_set_rtp_callback() 設進去)
判斷 interleaved 而決定呼叫 rtp_process_recv_data() 或 rtp_process_ctrol().
periodic function 則呼叫 rtp_byte_stream() 去 recv_task (在 rtp_bytestream.cpp )
上面的那個段落又會呼叫 rtp_update(), rtp_update() 收 packet, 呼叫 callback.
rtp_update()(or callback??) 會執行 timeout_rr(), 而 timeout_rr() 中會執行 rtp_init_extern_net().
指定的 callback: c_recv_callback() => player_media->recv_callback() => stream->recv_callback() 放在 queue 中.
systems.h
– include necessary headers and redefine data types.
sdp.h
– session description protocol
rtsp_private.h
– the major rtsp interface
sdl.h
-> needed, for thread-control (create, mutex…and so on)
rtsp_create_client_for_rtp_tcp()
– create mutex
– create thread, 同時亦建立 unix socket, 之後的 function 會透過此 socket 與 thread 溝通, thread 主體在 rtsp_thread.c (rtsp_thread())中.
圖片及相關檔案:

Continue reading “mp4player trace 筆記”

php 的影像處理

1.
imagecopyresampled() 確實有效!!!!
but 被 Resize 的那個 image 要用 imagecreatetruecolor() 來建立影像
否則顏色會出不來!!變成灰灰的~
2.
更新為 gd2.0 以後
確實,要把 php recompile 才行~ >_<

GNU Linux 上一些有趣名稱

GNU is Not Unix.
Wine Is Not Emulator.
現在一時想不起來那麼多
以後有想到再貼上來~
另外這是我想出來的~~挺有趣~~
VFP is Fucking Powerful.
VFP is Fucking Professional.
不過 Fucking 在美國俚語裡是”非常”的意思,而不是 XXX 的意思喔~
如果你有想到更好的,麻煩不要客氣,貼上來大家分享一下

8051 概論

CPU - RAM 128 bytes
Flash 4k
Processor 20Mhz
Interrupt 2
Timer 2
I/O 16 bit
記憶體概圖
+------------+
|Jump begin  |
+------------+
|Jump Timer 0|
+------------+
|Int 0(UART) |
+------------+
|Jump Timer 1|
+------------+
|....        |
|....        |
+------------+
Notice:每顆 51 不一定都一樣
事件發生時, Interrupt 或 Timer 會去向量找到相關的位址,然後 jump 過去.
程式 always 執行中,不會停.
通常 begin 都只有作 initialize.
當 timer 要觸發或被 interrupt 了,才作事.

National Storage Day 2 Digest

Introduction:
一開始
何麗玲,HP現任董事長就出來致詞~
來賓出來拋磚~
大致提到:
Adaptive Storage Infrastructure 一個漸進式的 Storage 架構,而非急進的,意思就是你可以慢慢買,再加上去.
還有 New Storage Architectures 的一些特性,
1.Cheap Storage
2.Fleshing out internet application
3.Storage intensive data types
4.Grow

主要的 issue,
1. Managing risk
2.資料的成長比 Storage 的預期增加速度要快.

“…”表示是抄漏的,到時候要去下載研討會簡報才知道.
ENSA eXtended
接著就是 HP 的Storage處的處長出來介紹 HP 的 ENSA eXtended
蔣先生提到 1998 年 HP 就已經提出 ENSA, 而在這幾年,也都一一實現了
ENSA 主要的定義是:
– Modularity
– Scalability
– Available
而新的 ENSA eXtended 則是
以 an open adaptive storage infrustructure 作為架構,有 Controllable, Resilient(快速復原), Extensible 這三個特性
這裡是我手繪的圖形:
ensaX.jpg
不過畫的不是很好,同樣以後也可以直接參考上面提供的網址去下載簡報來看.
詳情網址: http://www.hp.com/go/ENSAextended/
在即將中午的時候
又有提到 HP Utility Data Center,這個時候已經快睡著了 icon_sad.gif
UDC 有以下的特性:
1.Write Once
2.Resource virtualization
3.Utility Controller
主講人因為有被交代不可以耽誤大家用餐時間,所以講的很快
詳情網址: http://www.hp.com/large/infrastructure/utilitydata/overview/
吃完中餐
就是下午的議程了
下午分成四個 Track: A, B, C, D
我選擇 A1, D2, C3
A1
主要 topic:
1. What’s virtualization?
2. Array level virtualization.
3. Storage Level virtualization.
這邊的大意就是:
把所有的 Storage 集中為一個 pool, 對外只公開一個 Interface, 別人只要透過這個 Interface 就可以取得所需的空間,而增減只在這個 pool 中增減,不影響其他的機器.甚至在這個 Storage pool 和要存取的 Server 中間,再加上適當的 switch, 及佈線,就可以達到互相支援及 Balance 的功能.
好處:
– Increase disk utilization
– Reduce operational burden
– Eliminate costly downtime
– enhance performance
另外有提到 FSAM, 她是一個 Storage vision, 主要討論如何有效集中管理 Storage.
這個 Virtualization 的核心技術就是 SAN, 使用 Server & Storage Technology.
最後有日光星的 CIO 說明為什麼會使用此技術,還有就是主講人提供一個以色列公司的 Flash 動畫,很生動地把她所要說的課題表達出來.
D2. Continuity Plan( Disaster Recovery)
p.s.這堂課很多人去聽,差點擠不進去.
當發生意外狀況時,對 IT 而言是損失設備和資料,對企業而言是 business process.企業這邊他舉了一個榮總的例子,說榮總有一次電腦壞掉,然後一堆人就不會使用人工繼續作業了.
而 Continuity Plan Plan 就是使損失降到最低.
Definition:
HA – High available.
DR – Disaster Recovery
DT – Disaster Tolerance
BC – Business Continuity
BC = HA DR DT
考慮 downtime is not acceptable,最大的原因是企業朝向國際化邁進,因為時差之故,所以不能被接受.要如何減低??
Downtime is controllable.
Perspective:
– Ensure 事件不變成災難.
– 包含 Broad spectrum of business and technology issue.
– 達到最高可用度.
一般而言有十個步驟來練習/規劃,稱
Professional Practice for Continuity Planning:
Step 1~3 是 Preplanning
Step 4~6 Planning
Step 7~10 Post planning
而 Step 9~10 是 Optional 的,視行業及公司狀況而定,或者連絡外面的機構.
Planning Model 和 CMMI Model 相似,但 execution 是在狀況發生時才執行,同樣也是一個 Cycle, 規劃 -> 模擬演練 -> 測試 -> …..
在 Plan 擬訂出來之後,仍要適當的評估,以期能使用最適當的 cost 來得到最好的 benefit.
另外人員的食宿也要考量.
C3.
我有點後悔去聽這堂課,主要介紹 CA ARC Server v9.
不過有把幾個專業名詞抄了下來:
Online storage – always standby 給人存取的 storage.
Nearline storage – 如: MO, 光碟櫃…等,可以 random access, 但並非經常存取,存放在這裡的資料稱作 Inactive Data.
Offline storage – 主要是 tape, autoloader…..
結論:
HP 以及其協力廠商的一個 storage solution show.
相關網址:
National Storage Day 網址:
http://gate.erapr.com/event/hpstorageday/
研討會簡報下載位址:
http://gate.erapr.com/event/hpstorageday/news.html

HashGen

前幾天發現一個有趣的專案: Hashgen, http://www3.sympatico.ca/vladimir.shiryaev/hashgen/
編譯之後
發現它是一個可以把字典檔變成 C/C 的 Hash 搜尋 function / Class.
產生出來的原始碼效率很好!
看過程式以後,了解他首先把字典檔變為陣列,再找出適當的 Hash 大小,並宣告陣列來存放 Hash 的資料,也因此效率很好~~
用法很簡單
1.先建立字典檔.一行一個單字,命名為 mydict,如
the
pencil
pen
keyword

2.執行 hashgen -T testme.c -o myhash.h mydict 之後,就會產生 testme.c 和 myhash.h 了,此時你就可以進行編譯.
如果要產生 C 的 code, 就用 hashgen -T testme.c -l c -o myhash.h mydict
這裡介紹的只是一個簡單的用法,裡面還有更多參數,可以讓你指定 hash value…等等的~
更進階的用法:
你也可以在字典檔中指定 hash value
用法是使用 [ declarations ] 和 [ entries ] 這 2 個 section

[ options ]
entry-struct-name=TokenEntry
[ declarations ]
struct TokenEntry {
const char* name;
const char* value;
};
[ entries ]
pen, “this is my pen”
pencil, “this is my pencil”
book, “this is my book”
限制:
雖說 key 的字串長度,可以無限長,但在此只有前 32 個字元會被用來 hashing.
當 keyset 大於 3000 個的時候,有可能會因此而變慢.
目前還沒有想到比較好的應用方法
似乎只適合用在字典固定的場合,而不適用於動態增加的場合.