[非原創]Android 性能優化建議方法

對於一些Android專案,影響性能瓶頸的主要是Android自己記憶體管理機制問題,目前手機廠商對RAM都比較吝嗇,對於軟體的流暢性來說RAM對性能的影響十分敏感,除了 優化Dalvik虛擬機器的堆記憶體分配外,我們還可以強制定義自己軟體的對記憶體大小。

對於一些Android專案,影響性能瓶頸的主要是Android自己記憶體管理機制問題,目前手機廠商對RAM都比較吝嗇,對於軟體的流暢性來說RAM對性能的影響十分敏感,除了 優化Dalvik虛擬機器的堆記憶體分配外,我們還可以強制定義自己軟體的對記憶體大小,我們使用Dalvik提供的 dalvik.system.VMRuntime類來設置最小堆記憶體為例:

  1. private final static int CWJ_HEAP_SIZE = 6* 1024* 1024 ;


  1. VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);

//設置最小heap記憶體為6MB大小。當然對於記憶體吃緊來說還可以通過手動干涉GC去處理


bitmap 設置圖片尺寸,避免 記憶體溢出 OutOfMemoryError的優化方法
★android 中用bitmap 時很容易記憶體溢出,報如下錯誤:Java.lang.OutOfMemoryError : bitmap size exceeds VM budget

● 主要是加上這段:

  1. BitmapFactory.Options options = new BitmapFactory.Options();
  2.                 options.inSampleSize = 2;



● eg1:(通過Uri取圖片)

  1. private ImageView preview;
  2. BitmapFactory.Options options = new BitmapFactory.Options();
  3.                     options.inSampleSize = 2;//圖片寬高都為原來的二分之一,即圖片為原來的四分之一
  4.                     Bitmap bitmap = BitmapFactory.decodeStream(cr
  5.                             .openInputStream(uri), null, options);
  6.                     preview.setImageBitmap(bitmap);


以上代碼可以優化記憶體溢出,但它只是改變圖片大小,並不能徹底解決記憶體溢出。
● eg2:(通過路徑去圖片)

  1. private ImageView preview;
  2. private String fileName= “/sdcard/DCIM/Camera/2010-05-14 16.01.44.jpg”;
  3. BitmapFactory.Options options = new BitmapFactory.Options();
  4.                 options.inSampleSize = 2;//圖片寬高都為原來的二分之一,即圖片為原來的四分之一
  5.                         Bitmap b = BitmapFactory.decodeFile(fileName, options);
  6.                         preview.setImageBitmap(b);
  7.                         filePath.setText(fileName);



Android 還有一些性能優化的方法:
●  首先記憶體方面,可以參考 Android堆記憶體也可自己定義大小 和 優化Dalvik虛擬機器的堆記憶體分配

●  基礎類型上,因為Java沒有實際的指標,在敏感運算方面還是要借助NDK來完成。這點比較有意思的是Google 推出NDK可能是幫助遊戲開發人員,比如OpenGL ES的支持有明顯的改觀,本地代碼操作圖形介面是很必要的。

●  圖形物件優化,這裡要說的是Android上的Bitmap物件銷毀,可以借助recycle()方法顯示讓GC回收一個Bitmap物件,通常對一個不用的Bitmap可以使用下面的方式,如

  1. if(bitmapObject.isRecycled()==false) //如果沒有回收
  2.          bitmapObject.recycle();



●  目前系統對動畫支援比較弱智對於常規應用的補間過渡效果可以,但是對於遊戲而言一般的美工可能習慣了GIF方式的統一處理,目前Android系統僅能預覽GIF的第一幀,可以借助J2ME中通過執行緒和自己寫解析器的方式來讀取GIF89格式的資源。

● 對於大多數Android手機沒有過多的物理按鍵可能我們需要想像下了做好手勢識別 GestureDetector 和重力感應來實現操控。通常我們還要考慮誤操作問題的降噪處理。

Android堆記憶體也可自己定義大小

   對於一些大型Android專案或遊戲來說在演算法處理上沒有問題外,影響性能瓶頸的主要是Android自己記憶體管理機制問題,目前手機廠商對RAM都比較吝嗇,對於軟體的流暢性來說RAM對性能的影響十分敏感,除了上次Android開發網提到的優化Dalvik虛擬機器的堆記憶體分配外,我們還可以強制定義自己軟體的對記憶體大小,我們使用Dalvik提供的 dalvik.system.VMRuntime類來設置最小堆記憶體為例:

  1. private final static int CWJ_HEAP_SIZE = 6* 1024* 1024 ;


  1. VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);

//設置最小heap記憶體為6MB大小。當然對於記憶體吃緊來說還可以通過手動干涉GC去處理,我們將在下次提到具體應用。

優化Dalvik虛擬機器的堆記憶體分配

對於Android平臺來說,其託管層使用的Dalvik JavaVM從目前的表現來看還有很多地方可以優化處理,比如我們在開發一些大型遊戲或耗資源的應用中可能考慮手動干涉GC處理,使用 dalvik.system.VMRuntime類提供的setTargetHeapUtilization方法可以增強程式堆記憶體的處理效率。當然具體原理我們可以參考開源工程,這裡我們僅說下使用方法:   private final static floatTARGET_HEAP_UTILIZATION = 0.75f; 在程式onCreate時就可以調用 VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION); 即可。

 

CentOS6 setup指令安裝

 

在安裝CentOS 6 minimal 後,想要設定網卡、防火牆功能

輸入 setup 卻出現  setup: command not found

解決方式如下:

1.安裝setup指令

yum install setuptool

2.安裝網路設定

yum install system-config-network*

3.安裝防火牆

yum install system-config-securitylevel-tui

4.安裝鍵盤選單

yum install system-config-keyborad

image

建議更新 yum 的安裝來源設定檔

yum install yum-protectbase
yum install yum-fastestmirror yum-priorities

find 語法整理

語法 : find [路徑] [語法]

語法 | 功能

-amin 分鐘 | 搜尋指定時間內曾被存取的檔案或目錄
-anewwe 檔案 | 搜尋比指定檔案儲存時間較新檔案
-atime 小時 | 搜尋指定時間內曾被存取的檔案或目錄, 單位為小時, 以24小時計
-cmin 分鐘 | 搜尋比指定時間新的檔案, 單位為分鐘
-ctime 小時 | 搜尋在指定時間被變更的檔案.
-empty | 搜尋檔案大小為0 或是目錄下沒有檔案的目錄.
-fstype 檔案系統類型 | 指定檔案系統類型.
-gid 群組號碼 | 指定群組號碼
-group 群組名稱 | 指定群組名稱
-inum inode個數 | 指定inode個數
-mmin 分鐘 | 搜尋指定時間內變動的檔案或目錄, 以分鐘計
-mtime 小時 | 搜尋指定時間內變動的檔案或目錄, 以小時計
-name 範本 | 指定範本樣式的檔名
-nouser | 搜尋不屬於本機使用者的檔案或目錄
-nogroup | 搜尋不屬於本機群組的檔案或目錄
-path 範本 | 指定目錄的範本
-perm 權限數值 | 搜尋指定權限的檔案或目錄.
-regex 範本 | 指定範本格式
-size 檔案大小 | 搜尋指定大小的檔案
-type 檔案型態 | 搜尋符合檔案型態的檔案, 包括 b(block special), c(character special), d(directory), p(named pipe), f(regular file), l(symbolic link) 以及s(socket)
-uid 使用者id | 指定使用者id
-used 日數 | 異動後天數
-user 使用者名稱 | 指定使用者名稱

例子1

找出路徑下檔案權限為apache的檔案清單

 find /home/test/public_html -user apache

[非原創]在 Linux 下使用 find 指令查詢目錄與檔案的速查筆記

來源:在 Linux 下使用 find 指令查詢目錄與檔案的速查筆記

在 Linux 平台下找檔案不外乎使用威力強大的 find 命令,威力強大的背後就是有一點點學習曲線,不過整體上來說還算簡單,因此想寫一篇文章留下備忘,讓自己日後可以快速查閱參考。

【 基本語法 】

查詢檔案名稱 ( 也可以查詢「目錄名稱」,其中 * 是萬用字元 )

find $HOME -name '*.mp3'

註1: $HOME 是 Linux 下的一個環境變數,預設指向執行帳號的 HOME 目錄

查詢檔案名稱 (不區分大小寫)

find /etc -iname 'Network'

指定只要搜尋「檔案」名稱

find /var/log -iname '*.log' -type f

指定只要搜尋「目錄」名稱

find /etc -iname 'apache2' -type d

   補充說明:可用的 –type 參數值如下

b      block (buffered) special

c      character (unbuffered) special

d      directory ( 一般目錄 )

p      named pipe (FIFO)

f      regular file ( 一般檔案 )

l      symbolic link

s      socket

D      door (Solaris)

找尋所有檔案大小大於 50MB 的檔案

find /var -type f -size +50M

   註1: 不加上 –name 參數即代表搜尋所有檔案

找尋所有檔案大小小於 50MB 的檔案

find /var -type f -size -50M

尋找超過 7 天沒有被存取或修改過的檔案 (判斷檔案存取時間)

find $HOME -type f -atime +7

尋找曾經在 7 天內被存取或修改過的檔案 (判斷檔案存取時間)

find $HOME -type f -atime -7

尋找超過 10 分鐘沒有被存取或修改過的檔案 (判斷檔案存取時間)

find $HOME -type f -amin +10

尋找曾經在 10 分鐘內被存取或修改過的檔案 (判斷檔案存取時間)

find $HOME -type f -amin -10

尋找檔案建立時間已超過 30 天的檔案

find $HOME -type f -ctime +30

尋找特定使用者的檔案 ( 以帳號名稱 tom 為例 )

find $HOME -type f -user tom

 

【 進階應用 】

刪除 30 天以上未經存取過的暫存檔案 ( 注意: 以下指令最後一個分號(;)前一定要加上反斜線 )

find /tmp -type f -atime +30 -print -exec rm -f '{}' \;

   註1: 加上 –print 是為了讓被刪除的檔案檔名一併顯示在畫面上,這個參數可以省略
   註2: 使用 –exec 會讓查詢到的每一個檔案路徑代入 ‘{}’ 位置,一個檔案會執行一遍 rm 命令

刪除 30 天以上未經存取過的暫存檔案 ( 使用 xargs 當成單一命令的參數 )

find /tmp -type f -print0 | xargs -0 rm -v

   註1: 加上 –print0 是為了讓輸出的結果不以「斷行字元」分隔,而改以 null 為結果的分隔字元
   註2: 使用 xargs 命令加上 –0 是為了讓傳入的資料以 null 字元當成參數的分隔
   註3: 使用 rm 命令加上 –v 是為了能顯示出被刪除的檔案名稱,這個參數可以省略
   註4: 使用 xargs 會將所有 find 命令查到的檔案轉換成 rm 的參數列,如果檔案過多可能會執行失敗!
   註5: 使用 xargs 可確保後面的程式 ( rm ) 只執行一次,所以理論上執行速度較快!

相同參數需輸入多筆並且以「或」邏輯運算時要用 –o 參數串接起來

例1:同時找兩種檔名樣式的檔案

find $HOME -name '*.mp3' -o -user '*.ogg'

例2:同時找兩個擁有者的檔案

find /usr/local -user user1 -o -user user2

 

【 注意事項 】

    • 使用萬用字元時務必加上單引號( ‘ )

      !!以下是錯誤示範!!

[user1@server ~]# find $HOME -name *.txt
find: paths must precede expression
Usage: find [path…] [expression]

 

相關連結

 

[非原創]使用WordPress 應該避免的10個錯誤

我們都知道 WordPress 是一個非常流行的博客平臺,幾乎覆蓋了將近全球所有網站的15.5%。所以知道使用WordPress時什麼該做什麼不該做非常重要。如果你是一個 WordPress開發人員,你可能對這個平臺有更細緻的理解。但是肯定的,你曾經在WordPress上犯過一些錯誤,可能現在都會為之後悔。犯錯誤是 人類的本性。這裡我們展示出一些使用WordPress時應該避免的錯誤。以便未來同樣的錯誤不再發生。

1. 下載免費的主題:

你是否正在創建自己的線上品牌,並想著免費下載WordPress 主題 ?!那麼,你最好三思而後行。對一個初創企業使用免費的主題,是一個設計人員能做的最糟糕的事。這就好像你是主機漏洞。你下載的主題被許多網站所用,你顯 然會成為其中之一。當你渴望創建自己的名氣時,這不是正確的途徑。使用高級主題對你有好處。即使被黑的幾率可能很大,至少你會得到通知。但是,如果你使用 免費主題,那麼你就需要定位並修復安全威脅。

2. 使用太多的外掛程式

在 WordPress中,其實你並不需要對後臺編碼很在行。WordPress為它的用戶提供了許多可供載入的外掛程式。這些外掛程式可以很容易的下載與安裝。外掛程式 的問題在於它降低了網站的性能。編碼糟糕的外掛程式可以使問題變得更嚴重。甚至有可能你的外掛程式偶爾會使你的網站宕機。為了克服這個問題,使用有限數量的外掛程式就 可以了。

3. 獲取小部件

你可以給你的網站添加任意數量的小部件。WordPress給你提供了足夠的空間去這麼做。如果你想把搜索框放到分類目錄的前面,你完全可以做到。想記錄 下你在Twitter網站上最近留下的推文嗎?!小部件可以使之成真。找到你需要的小部件並將它加到你的頁面配置中。它就能出現於你的網站。小部件的問題 在於它們使你的邊欄和頁腳變得混亂。

4. 未能監測評論

為什麼人們丟失了對他們WordPress網站上的評論的監控,這有兩個原因。首先,你收到了垃圾資訊。大堆的垃圾信息。你所要做的就是從普通的評論中過 濾掉垃圾資訊。 Akismet外掛程式可以為你做這件事。你只需安裝它,並註冊一個API key。第二個就是,回復你獲得的評論。對於博客來說,評論起到重要的作用。這是你與你的讀者之間建立一次談話的唯一方法。認真傾聽他們想要告訴你的東 西,並且要一直回復他們。

5. 忘記對你的博客安全加固

在網路中安全一直是價值十億美元的問題。當你的代碼不是那麼健壯時,安全攻擊更有可能會發生。你在使用WordPress時會有一些問題關係到安全威脅。 據說那些正在傳播垃圾資訊的低等級的惡意駭客,更多的在試圖黑WordPress搭建的網站。他們的座右銘是添加垃圾資訊到網站會使網站交通擁擠。如果你 按照WordPress的建議實施了基本的安全措施,那麼你可能會處於更安全的境地。

6. 過度使用分類

分類通常是用作一種容器,相似種類的帖子可以集中被訪問。問題是WordPress使得一切運作起來都很簡單。創建分類是相當的簡單。當你一旦創建一個分 類,最好記得已經存在一個這樣的分類了。當你寫了一個與這個分類相似的帖子,你可以將這個帖子放到這個現存的容器,而不要另外再創建一個同樣名字的分類。 這裡的問題在於,如果你的某個特定的帖子能歸類於超過5到6個分類,這將很難區分。你不需要將同樣的資料放在6個不同的盒子中,對吧?!標籤也是一樣。將 你的標籤限制在5-7個就好了。

7. 偷竊圖片:

這是一件非常普遍的事情。當你寫完一個帖子在給它找一些圖片添加進去時,第一個闖入你腦海的念頭就是Google圖片。你會馬上搜索適合您的內容的圖片, 並將它添加進去,而不會有第二個想法。在你的個人博客中這樣使用圖片是可以的。但在你的官方博客中這麼添加是不可以的。Google上的圖片是有版權的, 它們是屬於某人的。最好選擇那些處於創作共用許可證(Creative Commons Licence)下的圖片,或者在公共領域內的圖片。

8. 貧乏的內容

如果你想維護好一個網站,主要關注於內容而不是外觀的話,最好確保你提供的內容語法是通順的。一定要記住如果你只有貧乏的內容讀者是不會再回來的。我沒有發現在維護的網站中,有某處能使人們發出“哇”的驚歎,但是其中卻沒有什麼可說的東西。

9. 忘記了小屏用戶

小屏用戶?!困惑了?!好吧。我解釋一下。當你開發網站時,永遠也不要忘記移動手機用戶。趨勢現在已經改變。現在的人們更願意在手機上訪問網站,而不是在桌上型電腦桌面。因此,創建一個回應式的網站是一件重要的事情,這樣你就不會失去這些用戶了。

10.忘記了備份:

你能遇到的最糟糕的事情,就是你丟失了網站上你寫了很長時間的所有內容。第一個需要考慮的想法就是你是否對你的網站做了備份。如果你做了這件事。那麼就好 了。偶爾可能會有備份無法工作會使你嚇得屁滾尿流。如果它不能運作你就不能做任何事情。有個好建議是在備份完成之後測試一下你的備份檔案。這樣你就根本不 用擔心是否會丟失自己的網站。

原文連結:http://www.webdesigntalks.com/10-mistakes-you-have-to-avoid-while-using-wordpress/

譯文連結:http://www.oschina.net/translate/10-mistakes-you-have-to-avoid-while-using-wordpress

 

三条命令搞定Winload.exe出现0xc000000e错误

http://www.goodman-lai.idv.tw/2008/07/winload-0xc000000e.html

微软前一段时间放出了Windows Server (TM) Code Name “Longhorn” Build 6001 Beta 3,也就是最近才改名的Windows Server 2008 Beta 3,偶就给自己装了上去,谁让自己有用服务器系统的习惯呢.

Beta 3是英文版,装完之后,弄了半天,设置得差不多了,才发现网上有中文语言包,郁闷!赶快下了语言包装上,顺带把桌面体验也装上,哈哈,这不是节省内存版的Vista嘛,而且还是正版的(序列号是微软给的,可以通过微软激活),玩了一会,发现偶的系统分区不够用了,谁让偶那时装Server 2003只分了15G呢.拿出偶地PQ来,折腾了一下,把D盘的10G调了出来,这时偶犯了个致命的错误,只把D盘的空间空了出来,就想直接入C上加,肯定是加不上了,这是偶后来才转过神来的,谁让偶已经有两年没有折腾过系统了呢!

当时也没有多想,直接进入到系统里面,把磁盘转成动态磁盘,结果,PQ等再也无法处理磁盘了,最后用了Disk Genius把硬盘分区手动改成基本分区,此时那10G的空间白白扔到那里再也无法划到C盘上去了.

弄了几天后,实在没招,只能拿出偶另外的一块200G硬盘,按照现有硬盘分区大小划分了分区,一个一个分区数据GHOST过去,蛮怀希望地用新硬盘重新启动系统,却出现了:

File:  \Windows\system32\winload.exe

Status: 0xc000000e

Info: The selected entry could not be loaded because the application is missing or corrupt.

在网上搜索了下发现,出现这个问题的人还不在少数,不过大多数都是老外,用的是Vista,原因是,使用GHOST把系统分区做到其他硬盘的分区上,然后就无法从新硬盘上启动了.

解决办法是:
使用WinPE盘启动,然后切换到新硬盘系统分区的:windows\system32目录下
切换目录命令为:

Code:
cd c:\windows\system32

C:为系统分区盘符

运行以下三条命令:
bcdedit /set {default} osdevice boot
bcdedit /set {default} device boot
bcdedit /set {default} detecthal 1

重新启动,系统已经OK了.

2013.09.04 SSD安裝

在露天買了一顆 德盟的硬碟

這廠牌有點冷門,台灣沒聽過,工廠是在深埈

因為很便宜,32G才1250元

剛好公司有需求,而我需要用小硬碟來備份,系統碟用小一點

因為我用Clonezilla,小硬碟可以還原到大硬碟,而大硬碟無法還原至小硬碟

所以小硬碟拿來做系統印象檔才能順利還原到大硬碟

 

測試,SLC的寫入速度真的挺不錯的,讀和寫都挺快的。

安裝Win7時發生一個小插曲

竟然抓得到SSD,但卻無法安裝,後來是更改開機順序才解決,這陣子都在試網路開機,所以把網路開機順序變成第一個開機裝置

安裝WIN7那麼多次,我還是第一次遇到

 

網路WIN7的安裝我還是無解,還要花時間去研究~

[非原創]快閃記憶體 SLC 與 MLC 的差別

原創: 快閃記憶體 SLC 與 MLC 的差別

最近好像太常碰到這個問題了, 就寫一篇文放著, 下次再遇到人問就丟這篇的URL給他看.

首先還是得先來一些關於快閃(flash)記憶體的預備常識:

快閃記憶體的用途目前最常見的就是: 記憶卡 (你的數位相機在用的), 隨身碟, 以及 SSD (固態磁碟機).
依其記憶單元的儲存技術, 可分為:
SLC: Single-Level Cell, 一個記憶單元只存放一個位元 (兩個狀態)
MLC: Multi-Level Cell, 一個單元可以存放多個電位狀態, 以 2 bits 為例就是 00, 01, 10, 11 四個狀態, 如此一來儲存密度較 SLC 高, 成本較低, 但速度就慢多了 <— 我們不要太深究為什麼, 那是學電子的人才要去關心的事…我們暫時只需知道片面的結論就好. 讀完這一點, 你已經知道 SLC/MLC 不是牌子的名稱, 而是不同的技術名詞.

SLC 的壽命為 100,000 次的讀寫
MLC 的壽命為 10,000 次的讀寫
是的, 以同容量的 SLC 與 MLC 隨身碟相比, MLC 的價格大約才四分之一, 但壽命只有十分之一

Wear-leveling (損耗平均) 技術:
不管是 SLC 或 MLC 都有壽命上的問題, 所以如果有些記憶單元太常被讀取, 就會比其他記憶單元早很多步往生歸西. wear-leveling 就是要想辦法偷偷幫你搬家, 平均用掉這些記憶單元的壽命. 例如你家樓下有十個信箱筒, 有三個最常被使用, 怕說壞得比較快…樓下管理員就在半夜偷偷地把另外幾乎沒在用的三戶的信箱筒掉包…大概就是這樣的概念了. 等等, wear-leveling 當然是控制晶片 (樓下管理員) 在管的啦, 你有看過信箱 (記憶單元) 會自己搬家的嗎? 讀到這裏, 你應該更有概念了: 一隻 16G MLC 隨身碟的壽命, 不是一隻讀寫一萬次就完蛋了, 而是 [理想上] 有 16GB*10000 這麼長命; 觀念不在次數, 而在總資料流量. 160000GB 的資料流量, 給你三年的時間當分母好了, 全年無休地天天拷來拷去, 一天 146GB 耶!

多通道讀寫:
類似的名詞這幾年比較常見於主機板: 雙通道記憶體. 兩條RAM同時抓取資料, 在相同時間內抓到的資料量自然就是單條的兩倍 (廢話). 相同的觀念, 一樣可以用在快閃記憶體的控制晶片設計. MLC 比 SLC 慢這個常識這我們剛剛知道了, 但 “多通道 MLC 讀寫” 就可以和 “單通道 SLC 讀寫” 一較長短了… 決勝點就在於控制晶片. 當然…控制晶片本身也是成本之一, 搞得愈複雜就愈貴.

不是技術阿宅的人可能看到這裏就已經沒耐性再看下去了 (我有預先做過 reader’s test 了哈哈)… 幸好你大概也只需要知道這麼多啦. 接下來就是 case study 了.

目前 (2008年11月) 市售已經罕有 SLC 的隨身碟了. 創見 JF168 16G (SLC) 的要價四千多塊. 而 16G MLC 隨身碟滿街都是, 最普通的大概一千元上下, 而像我買的 Corsair Voyager GT 16G 則是一千八左右, 速度仍略遜於 SLC 的隨身碟.

如果你比較在意 “寫入速度”, 加上你真的比別人常常在用隨身碟搬大量資料 (例如影音圖檔什麼的), 那你可能得多花點錢投資購買 SLC 的隨身碟. 這並不是壽命上的考量. 如同我前一篇文寫過的, 除非你一天有 146G 的資料搬移量 (不管是讀或寫), 不然 MLC 16G 的隨身碟應該夠長命撐到你嫌它太小而買一隻大了八倍十六倍的新品 (屆時價錢可能也一樣在兩千塊以下). MLC 的另一個小問題就 “寫入比較有卡卡的感覺”, 不若 SLC 那麼順暢, 尤其當你有一堆大大小小的檔案要寫來寫去的時候

[非原創]無碟WIN7:安裝筆記

出處:http://tw.myblog.yahoo.com/pcman-128/article?mid=805

之前已敘述過安裝無碟XP系統, 因此針對安裝WIN7於無碟系統的做法詳實的紀錄一下:

WIN7安裝程式本身就支援將WIN7系統安裝於iSCSI的遠端磁碟, 所以只要注意使用GPXE時,要在DHCPD.CONF中加入

option gpxe.keep-san code 8 = unsigned integer 8;

並於啟動iscsi的 root-path 之後加入keep-san參數,如下:

option root-path “iscsi:my.target.dns.name::::iqn.2007-08.name.dns.target.my:iscsiboot”;
option gpxe.keep-san 1;

這個參數主要是告訴GPXE程式(模擬SCSI設備), 在啟動失敗的情形下, 不要立刻關閉iscsi連接, 並在BIOS重導向其他開機設備時(如DVD-ROM),依然繼續保持連線, 直到下次開機為止.

所以依GPXE官方的建議方法,你只要在BIOS中的開機順序改成 (1)網路 (2)DVD-ROM …這樣就OK了

開機時先由網路卡開機,於DHCP處得知IP位址並導入GPXE程式,試圖由iscsi開機,但此時還是空的iscsi磁碟(尚未安裝WIN7), 開機失敗, 但保留iscsi連接, 改由BIOS指定的第2個開機設備開機, 所有DVD-ROM就讀取到WIN7安裝光碟, 進入後就可以正常安裝WIN7.

好像很簡單吧!

 

如果只是這樣,我就不用寫這篇了…. 事實上, 無碟的客端機,平時根本連光碟/硬碟都沒有,我怎麼可能一台一台拔光碟機裝WIN7?

聽說WIN7可以用換成用USB安裝,所以我目標就轉向用USB隨身碟開機來裝, 結果也不行, GPXE重導向BIOS設備開機時如果不是DVD-ROM,主機板居然又會重複用網卡再開機一次, 所以會陷入無限迴圈…

最後試驗成功的方法就是:

(1)建立iSCSI客端15GB虛擬磁碟

(2)用一般XP連入iscsi客端, 我的電腦–>管理–> “起始化”此虛擬磁碟,並建立”15GB”的主分割區,設定為”使用中”.

(3)將WIN7光碟中根目錄所有的檔案/資料夾全部複製到新建的iscsi虛擬磁碟中

(4)進入指令列模式中, 在WIN7光碟的boot目錄下執行:

BOOTSECT /nt60 K:

(其中K代表你iscsi虛擬磁碟的代號,你可以自己修改)

(5)這樣這個iscsi虛擬磁碟就有完整的WIN7安裝程式,並有開機碼可當開機磁碟,斷開與這個iscsi連接.

(6)用無碟客端開機(要加入的設定方法如最上面所述), 會直接進入WIN7安裝畫面, 前面”綠條”跑動等待時間滿久的,有時會要3~5分鐘,這是正常現象,因為WIN7安裝程式要確定你的硬體資訊,進入後,直接將WIN7系統裝入同一個分割區, 安裝10~20分鐘,重開機個幾次就會裝好.

(7)第一次進入會顯示有兩個啟動選項, 預設是(1)WINDOWS7  另一個是(2)WINDOWS7 (SETUP),你若不想再看到,在進入WIN7後, 電腦–>系統–>啟動 選項中把它取消即可.

(8)安裝完後,我們不再需要WIN7安裝光碟, 再C:中,把剛才WIN7安裝光碟複製過來的檔案/資料夾通通刪除(不要刪錯喔…),你小心比對一下,應該不難分辨.

 

這樣就可以正常使用WIN7無碟系統, WIN7與XP最大差別,就在於不用再安裝sanbootconf程式,WIN7會自動引導, 但也一樣網卡會自動抓從DHCP取得的IP,但卻不會修改電腦名稱, 不過WIN7碰到相同NETBIOS名稱的電腦,是不會產生衝突,也不會一直亂叫,只是分享共用資料夾會有問題. 這樣就不用像XP一樣要修改sanbootconf程式來避免.

若我們想要一進WIN7就會判別並修改電腦名稱,可以寫一個批次檔,用WMIC指令判別進來網卡是何IP,再對應修改電腦名稱來解決, 完成後再寫入EWF中,再用SHUTDOWN指令重開機即可.

 

2011/10/27 後記

經過實測,原來用上述方法安裝WIN7後,用iscsi遠端開機進入WIN7,可以再加裝sanbootconf(0.9.7版),這樣做有甚麼好處呢? 就是可以免重開機就修改電腦名稱,他會直接抓DHCP option 12的hostname來當電腦名稱,當然,你要先用”無語流星”工作室先前公布修改好的sanbootconf才可以(我前面的文章有修改的方法,不再贅述).

另外,64bit的Win7在安裝sanbootconf會出現錯誤,因為這個版本的所有驅動程式都要經過微軟”數位簽署”,也就是說不允許你安裝”自製”的驅動程式, 解決的方法, 要使用特殊軟體,啟動”測試模式”,再把”浮水印”去除就ok了!