前一陣子,在公司做過 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())中.
圖片及相關檔案:
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 這三個特性
這裡是我手繪的圖形:
不過畫的不是很好,同樣以後也可以直接參考上面提供的網址去下載簡報來看.
詳情網址: 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 個的時候,有可能會因此而變慢.
目前還沒有想到比較好的應用方法
似乎只適合用在字典固定的場合,而不適用於動態增加的場合.