如何利用 Remastersys 製作快速還原光碟 (Ubuntu 9.10)

這兩天在研究如何讓已經完成設定的 Linux 機器能夠有效且方便的備份與重新部署,由於過年前我們公司的電子報平台產品 (EasyTRY) 銷售量特別好,該產品是之前在 Linux 平台發展的,所以之前去客戶端部署都要從安裝 OS 到設定整個產品,由於過程繁複,每家客戶都要花上 2 個小時左右才能安裝設定完成,非常的耗時,前天詢問噗友(elleryq)得知一個非常棒的套件正好符合我的需求!

以下是安裝與使用 Remastersys 的完整過程,我以 Ubuntu 9.10 (Karmic Koala) Desktop 為例:

若為 Ubuntu 9.10 (Karmic Koala) 必須輸入以下 APT 套件庫位置,其他版本請見這裡

deb http://www.geekconnection.org/remastersys/repository karmic/

接著就來安裝 Remastersys 套件

 

 

安裝完成後就要可以使用 Remastersys Backup 工具進行備份

如果要備份資料(包含使用者資料)可以選第一個 Backup 項目,如果要重新部署整個作業系統(不含使用者資料)就可以選 Dist 項目,以下以 Backup 做介紹,過程都是一樣簡單。

最後,備份完成的 ISO 檔預設會放在 /home/remastersys/remastersys/custombackup.iso ,你只要將該 iso 檔燒錄成 DVD 光碟下次就可以快速復原整個系統,甚至於可以直接拿光碟片來開機 (Live CD),非常方便。

若是輸入 live 就會直接以 DVD 光碟開機,完全無須設定參數。若是輸入 install 執行安裝動作,整個安裝過程只會剩下以下步驟:

  • 選擇語系
  • 選擇時區
  • 選擇鍵盤排列方式
  • 設定磁碟分割
  • 建立第一位使用者帳號 ( 使用 Dist 才會有此選項 )

相關連結

  

此文章由 will 發表於 2010/2/12 上午 09:56:33

永久連結 | 評論 (3) | 此文章的RSSRSS comment feed |

分類: Linux | 系統管理

標籤: , ,

收藏:

利用 Image for Windows 實現 Linux 虛擬化 P2V 轉移

今天順利的利用 Image for Windows 軟體 (商業軟體) 將壹台老舊的 Linux 主機虛擬化 ( Hyper-V ),轉移的過程還算順利,但之前為了摸熟 Image for Windows 與 Linux on Hyper-V 也碰過不少釘子,沒有之前的經驗還真的很難這麼順利轉移成功,特此記錄一下 P2V 的過程。

整體的 P2V 程序大約花費不到 1 個小時,過程紀錄如下:

  1. 將原本的 Linux 多安裝一顆新的硬碟,供磁碟影像備份之用
    花費時間:5 分鐘
  2. 透過 Image for DOS 軟體開機,並執行完整備份,將 Linux 整個磁碟備份至新硬碟中 ( *.TBI 檔 )
    花費時間:15 分鐘
  3. 接著將備份出來的硬碟移至另一台 Windows 主機
    花費時間:5 分鐘
  4. 利用 Image for Windows 軟體將 *.TBI 備份檔還原成 VHD 格式 ( *.vhd ),但須注意新增的 VHD 虛擬硬碟空間不可小於原本 Linux 硬碟的容量。
    花費時間:10 分鐘
  5. 將 VHD 虛擬硬碟複製到 Hyper-V 主機
    花費時間:10 分鐘
  6. 到 Hyper-V 主機新增虛擬機器 ( New Virtual Machine )
    花費時間:5 分鐘
    1. 選取第5步驟所複製進來的 VHD 虛擬硬碟
    2. 新增時不用選取網路卡,必須新增 VM 完後再手動新增 Legacy Network Adapter 才行。
      參見:如何安裝 Ubuntu 8.04 或其他 Linux 到 Hyper-V 平台
    3. 由於我的環境有實做 Bind IP to MAC,所以必須手動指派 VM 網路卡的 MAC 位址
      image 
  7. 將新增並設定完成的 VM 開機即大功告成!

由於我實際在轉移時,第一次在上述 6-3 步驟並沒有手動指派 MAC 位址,這導致我第一次開機時 Linux 找不到網卡,這時我利用 dmesg 指令 ( http://en.wikipedia.org/wiki/Dmesg ) 查到開機過程中的確有抓到網卡,但是網路介面卻把 eth0 改成 eth1 了,如下:

[   26.925126] udev: renamed network interface eth0 to eth1

這時我修改 /etc/network/interfaces 檔案,將原本定義的網路設定從 eth0 改成 eth1

auto eth1
iface eth1 inet static
address 192.168.99.9
netmask 255.255.255.0
network 192.168.99.0
broadcast 192.168.99.255
gateway 192.168.99.254

改完後再用 ifup eth1 即可啟用網路,但由於 Bind IP to MAC 的關係讓我的主機無法對外連線,這時我才關機後將 VM 網卡改成靜態指派的 MAC 位址。

但重開機後網路介面卻又找不到了,這時再用 dmesg 指令查詢開機過程發現這次沒有改網路介面編號了,所以我又再改一次 /etc/network/interfaces 檔案,將剛剛修改過的網路設定從 eth1 改回 eth0,這時再重開機就沒什麼問題了。

相關連結

  

此文章由 will 發表於 2009/11/22 下午 03:57:32

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: 系統管理 | Linux

標籤: , , , ,

收藏:

分享 ApacheBench 的壓力測試結果報告分析心得

這幾天一直在分析 ApacheBench 壓力測試的數據結果,由於對一些產出的數據在判讀上不是很有信心,而且網路上幾乎都沒有這方面的數據說明 (連英文的我都找不到),所以特別下載 httpd-2.2.14 的原始碼回來研究 ApacheBench 實際測試數據計算的方式,也特別將研究心得寫下來。

對於輸出的報表基本欄位的說明我已經在【使用 ApacheBench 進行網站的壓力測試】有了詳細的解釋,今天主要是分析特定幾種統計數據的細節。

1. Connection Times (ms) 
    壓力測試時的各種處理時間

Connection Times (ms) : 壓力測試時的各種處理時間

要瞭解以上欄位必須先知道 ApacheBench 處理每一個要求 (Request) 時的各種狀態定義,在我分析 ab 的原始碼後 ( C++ ) 發現一共有 5 種狀態,分別介紹如下:

  1. start            準備開始建立連線
  2. connect      已建立連線 ( 並進入等待狀態 )
  3. endwrite    已送出 HTTP Request 指令
  4. beginread  已收到 HTTP Response 的第一個 byte
  5. done          完成 HTTP 要求並中斷連線

所以我改用比較精確且工程師容易理解的描述一遍各欄位的計算方式如下:

  • Connect:      從 start 到 connect 所花費的時間
  • Processing:  從 connect 到 done 所花費的時間
  • Waiting:       從 endwrite 到 beginread 所花費的時間
  • Total:           從 start 到 done 所花費的時間

2. Percentage of the requests served within a certain time (ms)
    當壓力測試執行到特定幾 % 的要求時,當下的 HTTP 要求所花費的時間

Percentage of the requests served within a certain time (ms)

這部分是「取樣」(Sampling) 的效能數據,如上圖所示,我總共發出 1000 個 HTTP 要求,當所有 HTTP 要求發送到 50% 時(也就是第 500 個 HTTP 要求),在那一次的 HTTP 要求總共的 Total 時間 ( 也就是那一次 HTTP 要求從 start 到 done 所花費的時間 )。

以上圖為例,在第 50% 的那一個 HTTP 要求總共花費 478ms 完成,在 100% 也就是最後一個 HTTP要求總共花費 3.49 秒完成,最後的 longest request 意思是指「最晚的一次 HTTP 要求」,並非「最長的 HTTP 要求」,雖然數據看起來的確是最後一個 Request 最長,不過並不是這個意思。

在程式碼中有定義特定幾個百分比的數據會輸出到報表結果中,如下:

/* interesting percentiles */
int percs[] = {50, 66, 75, 80, 90, 95, 98, 99, 100};

3. Output CSV file with percentages served.
    輸出 CSV 檔的效能數據

Output CSV file with percentages served.

在 ab.exe 的說明檔中 ( 可用 ab –v 顯示 Help 內容 ),其中有個 -e 參數可以指定效能數據要輸出的 CSV 檔名,輸出的內容如下:

ab.exe 中有個 -e 參數可以指定效能數據要輸出的 CSV 檔名,輸出的內容

這裡的數據跟 Percentage of the requests served within a certain time (ms) 的數據一模一樣,也是取樣的數據,只是這裡提供 1% ~ 100% 比較完整的取樣資訊 ( 不過也還是「取樣」而已,並不完整 )。

這裡第一個欄位所顯示數字是從 0 ~ 99,事實上應該是 1% ~ 100% 才對。

4. Output collected data to gnuplot format file.
    輸出每一個 HTTP 要求的完整數據資訊

image

ab.exe 有個 -g 參數可以指定效能數據要輸出的 TSV 檔名,輸出的內容如下:

ab.exe 有個 -g 參數可以指定效能數據要輸出的 TSV 檔名,輸出的內容

這裡的數據就是「非常完整」的效能資訊了,你如果執行 20,000 個 HTTP Request ( –n 20000 ) 這裡就會有 20,000 筆資料,記錄你每一個 HTTP Request 的所有效能數據,欄位說明如下:

  • 要求開始時間 (starttime)
  • 要求開始時間 (seconds
    註: 這裡的秒數是從 1970/1/1 AM 00:00:00 到現在的秒數,也是 Unix 常用的 Timestamp 表示法
  • 建立連線花費的時間 (ctime)
  • 除了連線時間外所花費的時間 (dtime) (從 connect 到 done 所花費的時間)
  • 完成這個要求所花費的總時間 (ttime)
  • 等待時間 (wait) (從 endwrite 到 beginread 所花費的時間)

有了這些數據,就可以利用 Excel 計算出非常精細的效能分析報表,算是非常陽春但卻非常實用的工具,缺點就是什麼都要自己來,而且沒人教要看懂這些數據還真不容易。

  

此文章由 will 發表於 2009/10/9 下午 09:16:30

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: Web | Tips | Linux

標籤: , ,

收藏:

對於 ApacheBench 進行測試時出現的 Failed requests 詳解

我最近在用 ab ( ApacheBench ) 測試一個網站時發現結果報告中一直會出現 Failed requests,而且出現的次數非常高,我原本以為是壓力測試的結果有大部分是失敗的,但看觀看其他數據卻一點也不覺得有失敗,經過一番研究後才真正理解為何會出現 Failed request 數據。

如下壓力測試的結果:

Server Software:        Microsoft-IIS/7.5
Server Hostname: example.com
Server Port: 80

Document Path: /
Document Length: 35137 bytes

Concurrency Level: 1
Time taken for tests: 4.619462 seconds
Complete requests: 100
Failed requests: 99
(Connect: 0, Length: 99, Exceptions: 0)

Write errors: 0
Keep-Alive requests: 100
Total transferred: 3543782 bytes
HTML transferred: 3507782 bytes
Requests per second: 21.65 [#/sec] (mean)
Time per request: 46.195 [ms] (mean)
Time per request: 46.195 [ms] (mean, across all concurrent requests)
Transfer rate: 749.00 [Kbytes/sec] received

先分析上述數據,我取得的第一份 HTML 文件得到的大小 ( Document Length ) 為  35,137 bytes,我總共發出要求共 100 次 ( Complete requests ),總 HTML 數據傳輸量 ( HTML transferred ) 為 3,507,782 bytes 感覺非常合理,實際的傳輸量大約是單一文件的 100 倍,所以我研判這 100 個 Request 的確有正確送出,但為何 Failed requests 會出現有 99  次的錯誤呢?

只要出現 Failed requests 就會多出現一行要求失敗的各原因的數據統計,分別有 Connect, Length, 與 Exception 三種,分別代表的意義為:

  • Connect      無法送出要求、目標主機連接失敗、要求的過程中連線被中斷
  • Length        回應的內容長度不一致 ( 以 Content-Length 標頭值為判斷依據 )
  • Exception   發生無法預期的錯誤

而從上述說明就可以很明顯看出所有的 Failed requests 都落在 Length 這個類別上,原來這是因為受測網站的首頁是動態的內容,當第一次發出 HTTP request 與後續發出的 HTTP request 所得到回應的 HTML 長度都是不同大小的 ( 每次回應的 Content-Length 大小不一致 ),才會引發 Failed requestsLength 問題的失敗,因此這類 Length 不一致的失敗在進行「動態網頁」壓力測試時是合理的,可以不予理會。

這裡的 Length 是以 "第 1 次" 取得的 Content-Length 為主,如果第 2 次以後的 HTTP Request 所得到的 HTTP Response Header 得到的 Content-Length 與第 1 次取得的長度不一致,就會得到 Length 的錯誤。

其他壓測結果欄位的說明可參考我另一篇文章:使用 ApacheBench 進行網站的壓力測試

相關連結

  

此文章由 will 發表於 2009/10/7 上午 11:34:05

永久連結 | 評論 (1) | 此文章的RSSRSS comment feed |

分類: Tips | Linux | Web

標籤: , ,

收藏:

如何在 Linux 下快速建立一個虛擬網卡 (虛擬 IP)

在 Ubuntu 裡,以往要新增虛擬 IP 我都要修改 /etc/network/interfaces 設定檔,然後再重新啟用網卡 ( /etc/init.d/networking restart ),有時後只是要做一些簡單的測試,這樣子修改實在大費周章,最近查到一個快速新增虛擬 IP 的方式。

如果你的介面卡是 eth0 且 IP 為 10.0.0.1,如過要新增一個虛擬 IP 為 10.0.0.2 且介面名稱為 eth0:0 時,可以直接打以下指令完成:

ifconfig eth0:0 10.0.0.1 up

如果要關閉這個虛擬 IP 可以將 up 改成 down 即可:

ifconfig eth0:0 down

這是暫時性的虛擬 IP 新增方法,非常方便快速。

如果要重開機自動設定虛擬 IP 就必須要修改 /etc/network/interfaces 設定檔了。

auto eth0:0
iface eth0:0 inet static
   address 10.0.0.2
   netmask 255.255.255.0
   network 10.0.0.0
   broadcast 10.0.0.255

相關連結

  

此文章由 will 發表於 2009/6/18 下午 12:39:37

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: Linux | 系統管理

標籤: , , ,

收藏: