網頁

2012年10月18日 星期四

HTC One X 斷電後進入 bootloader

昨天想把 unlock 過且刷過第三方韌體的 HTC One X 給 ruu 回原廠韌體(必須要重新 lock),結果遇到幾個問題,卡了好幾個小時,簡單記錄如下。

1) 本來想先 restore backup ,回到當初剛 root 完的狀態,但不知道為何卻一直卡在 One 的那個 load 畫面,那是處於 fastboot 失效且無 adb 的狀態,然後用三鍵斷電重開卻又無法進入,持續 bootloop。

解法:這是按法的問題,在三鍵強制斷電重開的時候,似乎馬上接著只按volum down 並不會偵測到。而應該改成三鍵重開按完,下面三個按鍵燈閃爍時先放掉 volum up,然後過一下子再放開 power ,即可進入 bootloader 。

2) 找不到快速的 ruu 載點,不是要註冊收費就是很慢

後來在 htcruu 找到.exe,然後在 這裡 找到 2.17 的台版 ruu。

3) ruu 更新一直失敗,卡在錯誤的 bootloader

這裡有兩個原因,一個是要用 fastboot oem readcid 對照看看抓的版本是不是一樣,我本來抓 Asia-TW 但後來發現手上版本都是 TWM,瞎忙了一陣子。

然後用 fastboot getvar all 看一下
E:\OneX\Android\Tools1.26>fastboot getvar all
(bootloader) version: 0.5a
(bootloader) version-bootloader: 1.12.0000
(bootloader) version-baseband: 1.1204.104.14
(bootloader) version-cpld: None
(bootloader) version-microp: None
(bootloader) version-main: 2.17.709.2
(bootloader) serialno: HT258W1A0919
(bootloader) imei: 353043057600408
(bootloader) product: endeavoru
(bootloader) platform: HBOOT-T30S
(bootloader) modelid: PJ4610000
(bootloader) cidnum: HTC__621
(bootloader) battery-status: good
(bootloader) battery-voltage: 3848mV
(bootloader) devpower: 59
(bootloader) partition-layout: None
(bootloader) security: on
(bootloader) build-mode: SHIP
(bootloader) boot-mode: FASTBOOT
(bootloader) commitno-bootloader: None
(bootloader) hbootpreupdate: 2
(bootloader) gencheckpt: 0
all: Done!
finished. total time: 0.827s 

注意當中的 HBoot Version ,這裡的版本如果比 ruu 裡面就的話就會報 bootloader 錯誤。 解決方是參考mobile01 上的 (8/23) One X RUU回復/Recovery/OTA相關教學 自己做一個專屬的 ruu 來就 ok 了。


2012年10月12日 星期五

在 hicloud 遭遇的狀況

最近因為遇到一些問題,所以開始 survey 往雲端發展的環境,目前在 hicloud 降價之後,價格到具有競爭力的階段(之前是 In/Out 合併計算,每 GB NTD 15,降價後只算 Out,每 GB NTD 3),目前待了一個月左右,有一些有點麻煩的問題。

由於線上是 VM 環境(vmware),所以資源共用是一件很合理的事情,但如果當我們的 VM 跟其他大戶放在一起,便會有很恐怖的事情發生。

圖中可以看到,Disk I/O 忽然在 12 點過後就進入瘋狂的 busy 狀態,在這個狀態下大部份的 CPU Time 都跑去做 IO Wait,所以 Load Average 莫名飆高,而整個跟 Disk 有關的動作都完全被卡死。

這個狀態持續了快 18 個小時,最後在連續三張 Ticket 以及好幾次電話之後才解決。

如果是一般的 Web Application,那只會暫時慢一下,沒有太大影響。但由於我的 Socket Server 是直接呼叫 MySQL C API ,在這裡則會直接 blocking,然後就會 Out of Service。

在這種 workload 都還算 micro 的狀況底下就出這種包,實在是有點誇張。

PS: 在當時,連一個大概十萬筆有 Index 的資料,下去做 query 限制三十筆輸出,都可以花上 20 多秒鐘?! 這不會太誇張嗎?

所以當時對 ext4 的檔案系統有稍微調整一下。

1: 取消 access time 更新
2: 延長 write-back 的時間

(參考)

# 把 /etc/fstab 加上 noatime 跟 data=writeback

tune2fs -o journal_data_writeback /dev/sdaX

UUID=9ee7afff-654d-123c-b936-fe96354bec0c /               ext4    errors=remount-ro,noatime,data=writeback 0       1
# /etc/sysctl.conf 加上延長 writeback 時間

vm.dirty_writeback_centisecs = 360000


本來想把 ext4 的 journal 關掉,但是看了看好像不妥,尤其是需要 unmount/fsck ,我又是 root partition ,就放棄了。

看來目前能做的就是

1) 盡力讓 Database 有效率(快)一點,把不用的資料丟進 archive
2) 想辦法讓 server 對 MySQL 的存取變成 Asynchronous I/O,就算 MySQL 塞住也不要 blocking。
3) 求神拜佛希望 cloud 環境不要再出狀況了 (嘆)

2012年10月11日 星期四

在 Blogger 上用 Google Code Prettify 顯示程式碼

blog 荒廢了好長一段時間,還是習慣 wordpress 裡面 rich editor 的寫作方式,但是實在是受不了自己 maintain 機器那種一陣子爆炸一次之後就再那邊焦頭爛額的慘劇,但 wordpress.com 裡面的客製化域名又是年費計算,感覺不太爽,所以索性把 blog 移到 blogger 上來。

遇到的第一個問題就是貼 code 的部份,印象中在 zeroplex 那邊有看過,本來跟他問是用什麼方法貼的,但三更半夜的誰有閒情逸致待在電腦前呢,大概只有 ㄐㄒㄈ資深工程師 還在公司埋頭苦幹吧?

Google 了一下看到了 在 Blogger 文章中利用 CSS Block 及 Google Code Prettify 顯示程式碼這篇文章,照著做也確實是可以運作的,而且當中的 background image 偷偷從 zeroplex 那邊偷了 base64 encode的 gif 直接藏在 template 中也挺方便, 不過 onLoad 放在 <body> 中會造成整頁一直卡住 Loading 的問題,會讓網頁速度拖慢,有點討厭。

剛剛又稍為找了一下發現在 stackoverflow 裡面的這篇解答提供了一個比較方便的解法,也不需要改動太多的 template code,作法如下:

先把自己想要的 Design 給選好,然後進到 Blogger 的 Design 頁面選[編輯HTML]在 <head> 後面貼這段:

<link href="http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" language="javascript" src="http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.js"></script>
<script type="text/javascript" language="javascript" src="http://google-code-prettify.googlecode.com/svn/trunk/src/lang-css.js"></script>
<script type="text/javascript">
    document.addEventListener('DOMContentLoaded',function() {
        prettyPrint();
    });
</script>
然後進到 自訂->進階-> Add CSS,加入這段:

pre.code {
  display: block; /* fixes a strange ie margin bug */
  font-family: Courier New; 
  font-size: 10pt; 
  overflow:auto; 
  background: #f0f0f0 url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAASwCAYAAAAt7rCDAAAABHNCSVQICAgIfAhkiAAAAQJJREFUeJzt0kEKhDAMBdA4zFmbM+W0upqFOhXrDILwsimFR5pfMrXW5jhZr7PwRlxVX8//jNHrGhExjXzdu9c5IiIz+7iqVmB7Hwp4OMa2nhhwN/PRGEMBh3Zjt6KfpzPztxW9MSAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzAMwzB8HS+J9kUTvzEDMwAAAABJRU5ErkJggg==) left top repeat-y;
  border: 1px solid #ccc;
  padding: 10px 10px 10px 21px;
  max-height:200px;
  line-height: 1.2em;
}
之後只要用 <pre class="code prettyprint">要顯示的 code</pre> 就可以顯示了。

Happy Blogging !