:::

IMLF 2014參加心得 / Thoughts of IMLF 2014

布丁布丁吃布丁

IMLF 2014參加心得 / Thoughts of IMLF 2014

頁面擷取自-Proceeding of International Mobile Learning Festival 2014 Bali

今年六月初我去參加了印尼峇里島的國際行動學習研討會(International Mobile Learning Festival 2014, IMLF 2014),並發表了一篇「Effects of Different Text Display Types on Reading Comprehension」。以下記錄發表的投影片。

This June, I went to Bali and published a research paper in International Mobile Learning Festival 2014 (IMLF 2014) conference. The research titled "Effects of Different Text Display Types on Reading Comprehension". Following are the abstract and slide of this research.


發表文章 / Publication

2014-08-10_171332

這次發表的題目是「Effects of Different Text Display Types on Reading Comprehension, Sustained Attention and Cognitive Load in Mobile Reading Contexts」(行動閱讀情境中不同文字顯示方式對於閱讀理解成效、持續注意力與認知負荷的影響)。APA書目如下:

Chen, Y.-T., & Chen, C.-M. (2014). Effects of Different Text Display Types on Reading Comprehension, Sustained Attention and Cognitive Load in Mobile Reading Contexts. In Proceedings of the International Mobile Learning Festival 2014. Bali, Indonesia.

這個很長的標題題名已經點出了這篇研究的內容。也就是以iPod Touch中設計三種不同的文字顯示方式:靜態翻頁、動態自動卷軸與逐字顯示的混合模式,以筆試測試閱讀理解成效、以腦波儀NeruoSky偵測持續注意力、以量表詢問認知負荷,然後請受試者在坐著、站著與行走等不同情境下閱讀。最後發現不同形態顯示方式與不同的情境皆會對這三種依變項造成影響,可供我們在設計行動閱讀載具的參考。

以下是這次報告的投影片:

感謝老師的允許與學妹的研究,才能讓我有這機會去發表。再此特別表示感謝。

演講稿 / Speech Visual Aids

這是我第一次出國用英文發表,而我平常在臺上演講的經驗也不多,這次出國發表對我來說是一大挑戰。另一方面,議程演講的時間有30分鐘,扣掉發問時間也大概需要講25分鐘。這25分鐘內要用英文全程演講,到底該怎麼辦好呢?

雖然老師跟週遭的朋友們都一副「你上臺就知道要講什麼了」的表情,但我的英文並沒有到這種程度。要用英文寫一份HTML文件的話,我的確可以馬上開始。但是要上臺用英文講話,我可能還要先記下我要講什麼東西。

演講稿修改 Effects of Different Text Display Types on Reading Comprehension

所以這次是應用了之前Dr. Jeremy Sykes教的「English Academic Writing and Oral Presentation Skill 2」中的技巧,乖乖地擬訂演講內容。在這裡面儘量地使用平常易懂、常用的句子;捨棄學術論文中艱深難唸的專有名詞,換成比較易懂、也好唸的片語;演講速度一字一句唸清楚,不是急著講完,反正25分鐘也足夠演講。然後再依據這份講稿來練習、背誦。這份講稿的擬訂也是受到許多人的幫忙,一邊擬稿的過程中也學到很多英文的技巧,感謝大家。不過由於個人事務繁忙,投影片跟講稿修訂上我也花了太多時間,甚至到報告前一天我才能有時間在房間裡好好地練講。最後影響到老師跟一起去報告的學弟的行程,真的是很不好意思。

演講感想 / Academic Speech

DSC_2227

IMLF 2014雖然是一個國際會議,可是參與者並不多。在會場裡面大概不到20人,工作人員約5人左右。不過儘管人很少,發問倒是非常踴躍。一個講者10分鐘的發問時間裡面,大家會積極地對他的研究內容以及應用的可能性進行討論。學弟在第一天發表時,臺下聽眾也熱烈發問,甚至連這天的場次結束了,還有三四個人圍了上來提問。其實比起經過練習的演講內容,如何應對別人用英文提問的回答,才是國際研討會壓力最大的地方。當學弟在臺上收到大量英文提問的攻擊時,他顯得有點驚慌失措,我坐得太遠了難以上去打pass,還好中國大陸來的主講人趕緊用中文幫學弟翻譯一下,總算讓學弟能夠渡過這個難關。

不過輪到我的時候,不知道是因為講得不是很好,還是研究內容跟其他遊戲式教學比起來不太有趣,臺下的聽眾興趣缺缺,也只有收到一個問題。不過那個問題是問「這個研究對現在的學習有什麼幫助?」這種大問題,我除了再次強調了論文中結論的部分之外,倒也不知道怎麼用英文再跟她進一步解釋。

總之,吸取這次的經驗,下次還要更加努力,希望能有更好的表現,多多加油吧!

(more...)

Android系列裝置禁止快取縮圖thumbnails / Deny Thumbnails In Android Devices

布丁布丁吃布丁

Android系列裝置禁止快取縮圖thumbnails / Deny Thumbnails In Android Devices

14 - 5

Android裝置會自動產生大量快取縮圖(thumbnails),佔據Android裝置所剩不多的記憶體空間(ROM space)。本文教你如何防止Android裝置產生縮圖。

Android system automatically create thumbnails to SD card’s “DCIM/.thumbnails”. The “.thumbnails” directory will occupy most of SD card’s space. This article show you how to stop Android system to create thumbnails.


空間不足的問題 / Not Enough Space Problem

14 - 1

我的平板電腦是Samsung Galaxy Note 8,內建空間16GB,而實際上可用空間大概是9.78GB。上面的截圖中,我目前的空間剩餘大概3.23GB。

not-enough-space-delete-unecessary-items

9.78GB乍看之下似乎很多,但在以前,這個空間往往很快就會被不知名的檔案佔據,系統會一直提示我儲存空間不足、請刪除軟體APP、圖片、影片與文件 (Not enough space. Delete unnecessary items, such as downloaded software, pictures, videos, and documents)。

上面這張圖片是來自於How to Tackle Message “Not Enough Space, Delete Unnecessary Items…” When Opening Gallery on Android,他也是跟我一樣使用Galaxy系列的手機,也是遇到了一樣的問題。

龐大的快取圖片資料夾 / Fat “.thumbnails” Folder

14 - 3 - Copy

後來我使用Storage Analyser分析記憶卡中佔用記憶體空間的檔案,才發現佔用空間的並不是各種APP或是下載的檔案,而是記憶體中的「/DCIM/.thumbnails」這個資料夾佔據了大量的空間。

這個.thumbnails資料夾存放的是圖片的快取縮圖。只要開啟了圖片,這個快取縮圖資料夾就會增加該張圖片的縮圖。附帶一提,這個資料夾「.thumbnails」開頭是一個「.」,這是Linux檔案系統中表示隱藏檔案的功能,一般是存放系統檔案時使用。

別看這個縮圖好像沒什麼了不起,就算我空間有9.78GB,這個.thumbnails資料夾甚至可以佔到3GB之多,早已超過我現在的剩餘空間了。

14 - 6

我的Sony Xperia TX也會有一樣的問題。這個.thumbnails就佔據了3.09GB,對手機記憶體空間帶來不小的負擔。

無法清理乾淨的快取圖片資料夾 / Cannot Remove .thumbnails Folder

remove-thumbnail-files-android

TrickyWays的建議是刪除「.thumbnails」這個資料夾。但是事實上,這個做法並非長久之計。

因為.thumbnails快取圖片資料夾會持續產生。只要開啟圖片,.thumbnails資料夾就會產生縮圖,而這個縮圖又會佔據記憶體空間。過不久,我又得再次手動刪除.thumbnails資料夾。

因此我後來又去找了其他解法,發現xda developers中Minions_Army提出的方法的確可以永久解決這個問題。

放置快取縮圖產生 / Deny Thumbnails

原理是把.thumbnails資料夾刪除,然後建立一個.thumbnails檔案。這樣子快取縮圖就無法順利產生。

以下例子我用ES文檔瀏覽器(ES File Explorer)來操作,做法如下:

Step 1. 顯示隱藏的資料夾 / Display Hidden Directory

14 - 5

由於.thumbnails是隱藏資料夾,在ES文檔瀏覽器中預設不會顯示。在此我們要先修改設定,以顯示.thumbnails資料夾。

14 - 3

開啟ES文檔瀏覽器(ES File Explorer),進入設定(Settings)。

14 - 2 (1)

進入顯示設定(Display settings)。

14 - 4

打勾「顯示隱藏檔案」(Show hidden files)。

14 - 4 (1)

再回到記憶體的DCIM資料夾中,就會看到.thumbnails資料夾了。

Step 2. 移除快取縮圖資料夾 / Delete .thumbnails Directory

14 - 4

首先長壓.thumbnails資料夾,直到ES文檔瀏覽器選取了該資料夾。然後再按下下方垃圾桶圖示的刪除(Delete)。

接著ES文檔瀏覽器會跳出一個確認刪除視窗,按下確認刪除。

Step 3. 建立取代檔案 / Create .thumbnails File

14 - 3

接著按下ES文檔瀏覽器左下角的「建立」(New),選擇建立「檔案」(File)。

14 - 2

將該檔案命名為「.thumbnails」。

14 - 1

建立完成,這個位置就塞了一個.thumbnails檔案了。

這樣子未來Gallery APP就無法在「.thumbnails」資料夾中建立快取縮圖,因為這個路徑不是資料夾,而是檔案,因此會無法建立。


小結:刪除快取縮圖之後的後遺症? / Conclusion: Is There Any Problems After Deleting .thumbnails?

我的Note 8平板刪除了.thumbnails資料夾已經過了一個月了。這個月我也是照常開啟網頁、讀PDF paper、看影片、看漫畫,並沒有感覺到什麼異常。

理論上刪除.thumbnails之後,開啟圖片的速度應該比較慢一點。但是這問題感覺上不明顯。倒是記憶體剩餘空間多了許多這點比較令人有感覺。

大家可以一起來試試看,有問題歡迎一起來討論。

(more...)

Git取代分支檔案的方法 / Replace Branch Files In Git

布丁布丁吃布丁

Git取代分支檔案的方法 / Replace Branch Files In Git

2014-08-09_221445

我通常使用TotoiseGIT工具利用Git與團隊協同開發。當我想要把自己的分支清空,全部改用別人的檔案時,可以使用以下的方法來取代自己的分支。

This article describes how to use TotoiseGIT to replace a branch’s files to another branch.


分支說明 / Branch Description

在本文的例子中會使用兩個分支(Branch)。

  • Branch A:我目前所在的分支,以本地端的pudding分支為例。我不再需要該分支的所有檔案,我希望換成Branch B的檔案。
  • Branch B:目標分支,以遠端伺服器上的master為例。我希望把Branch B的檔案拿到Branch A使用。

我的方法很笨,就只是單純的替換檔案而已。以下說明做法。

Step 1. 遞交Branch A / Commit Branch A

2014-08-09_234423

由於接下來做的事情會變動到Branch A的檔案,不論任何修改,使用Git都應該養成隨時遞交(Commit)的習慣。因此在此我們也先遞交Branch A。如果沒有任何檔案有修改的話,也可以勾選左下角的「只有訊息」(Message only),並撰寫遞交的訊息(Message)即可。

Step 2. 獲取Branch B的資訊 / Fetch Branch B

我們要在TotoiseGIT中獲取Branch B的資訊。

2014-08-09_232313

做法是開啟Git同步(Git Sync)。

2014-08-09_232658

選擇要同步的Branch B。你可以按下「…」按鈕,開啟分支瀏覽器 (Browse reference),在「/remotes/kals/master」找到我們要的Branch B。按下OK確定。

2014-08-09_233004

點選「獲取」(Fetch)。

2014-08-09_233120

如果出現藍色的「Success」訊息,表示獲取成功。

Step 3. 切換成Branch B / Checkout Branch B

我們要利用TotoiseGIT的Checkout功能,把Branch A切換到Branch B去。

2014-08-09_222217 - Copy

在該Git專案的目錄底下按右鍵,選擇Switch/Checkout。

2014-08-09_231128

選擇Branch為遠端的master分支:remotes/kals/master。然後勾選建立新分支(Create New Branch)、強制切換(Force),追蹤(Track)選項保持預設。然後按下OK。

2014-08-09_231443

接著切換檔案,如果出現藍色的「Success」訊息,表示成功。

2014-08-09_233332

雖然看起來檔案沒有什麼明顯的差別,但是現在的確切換成了分支Branch B。按右鍵可以看到「Git Commit -> "master"」,表示現在的分支的確是Branch B。

Step 4. 複製Branch B的檔案到另一個資料夾 / Copy Branch B’s Files To Another Folder

2014-08-09_233723

接下來我建立一個資料夾叫做「kals-temp」,然後把原本資料夾「kals」裡面的檔案複製到「kals-temp」去。這樣我就可以先保留了Branch B的資料。

Step 5. 切換回Branch A / Checkout Branch A

2014-08-09_233945

接著我再回到「kals」資料夾,然後以類似Step 3的方法切換回Branch A,也就是本機端的pudding分支。記得勾選「強制」(Force)。

Step 6. 刪除Branch A的檔案 / Delete Branch A’s Files

2014-08-09_234410

然後我們不需要Branch A的檔案了,全選檔案之後,把它們統統刪除吧。

Step 7. 移動Branch B的檔案回到專案的資料夾 / Move Branch B’s Files Back To Project Folder

2014-08-09_234956

接著再把存放Branch B的「kals-temp」資料夾中的資料移動到專案目錄「kals」資料夾中。

image

現在Branch A裡面的檔案就會是Branch B的檔案了。

Step 8. 遞交Branch A / Commit Branch A

2014-08-09_235344 

完成取代之後,再一次遞交Branch A。由於現在這個Branch A的檔案是Branch B的檔案,因此跟Step 1遞交的檔案有很大的差異。下面的檔案變動(Changes made)會列出相當多的改變。總之先保存這次的變動,遞交吧。

這樣子我們就完成拿Branch B的檔案替換到Branch A分支裡面去了的任務了。


小結:尚未摸透Git / Conclusion: Complex Git

事實上,上述這個做法看起來很愚蠢。雖然我也寫了一個簡單的Git介紹,但老實說我對於Git仍不是這麼的熟悉。分支之間檔案交換的方法還有很多種,這篇是我找到最可行的一種方式。

2014-08-10_000547

一般的做法都是教你使用「比較跟前面版本的差異」(Diff with previous version)。可是這種做法中,Branch A中有、Branch B中沒有的檔案,依然還會存在在替換後的Branch A中。特別是當Branch B的檔案名稱修改時,就會造成Branch A替換後出現了兩個不同名稱檔案、但是檔案內容卻一樣的問題。

2014-08-10_001020

不過我後來在想,是不是應該要用Rebase這個工具來取代分支檔案呢?這點我就要繼續再研究看看了。希望熟悉Git的朋友能給我一些建議吧。

(more...)

Proxmox VE 3.2已經修復的備份鎖定問題 / Proxmox VE 3.2 Fixed Problem: Backup Lock

布丁布丁吃布丁

Proxmox VE 3.2已經修復的備份鎖定問題 / Proxmox VE 3.2 Fixed Problem: Backup Lock

2014-08-08_085637

Proxmox VE備份時會設定虛擬機器的備份鎖,位於/var/lib/vz/lock/[VMID].lck。在Proxmox VE 3.2版本中,備份異常中斷、或是有其他備份仍在進行中的時候,備份功能依然可以正常運作。

When Proxmox VE start a backup job, it will create a lock file at /var/lib/vz/lock/[VMID].lck. In Proxmox VE 3.2 version, when previous backup job got error or not finished, current current backup job will not crash.


舊版本的錯誤 / Problem of Older Version

備份時所產生的備份鎖,在舊版本的Proxmox VE中不會自動解除。例如這篇「backup failed - command 'qm set 101 --lock backup' failed with exit code 255」就遇到了這個問題,發問者doknet的錯誤訊息如下:

vm1:~# vzdump --dumpdir /var/lib/vz/dump/  --snapshot  101

INFO: starting new backup job: vzdump --dumpdir /var/lib/vz/dump/ --snapshot 101

INFO: Starting Backup of VM 101 (qemu)

INFO: stopped

INFO: status = stopped

INFO: setting parameters failed - VM is locked (backup)

ERROR: Backup of VM 101 failed - command 'qm set 101 --lock backup' failed with exit code 255

INFO: Backup job finished with errors

這時候由於備份時產生的備份鎖無法自動解除,所以必須要管理者手動刪除檔案。以VMID 101的虛擬機器為例:

rm -f /var/lib/vz/lock/101.lck

刪除該鎖之後,備份就可正常進行。

備份機制的運作方式 / The Survivability of Backup

在Proxmox VE 3.2版本中,備份時常發生的錯誤都不會影響備份任務的心情。常遇到的錯誤如下:

其他備份任務尚未完成 / Another Backup Job Is Still Not Completed

image

備份任務一次只能進行一個。較晚執行的備份任務會先等待其他任務完成,顯示訊息為:

INFO: trying to get global lock – waiting…

這時候備份任務會進行等待,然後當其他備份任務完成時,這個任務就會開始進行備份。

在這個情況下會連續製作備份檔案,請自行注意。

之前的備份任務異常中斷 / Previous Backup Job Is Crashed

如果之前的備份任務因為斷電、斷網等各種因素導致無法順利進行,那後來的備份任務也不會因此被鎖住,而可以直接開始備份。

備份空間不足的問題 / No Space Left When Backup

image

在各種試誤中,最後我只有找到了「No space left on device」的錯誤。如文字所示,這純粹是硬碟空間不足而已,也不是備份功能的問題。

如果大家在備份時有遇到被鎖住的錯誤情況,請再跟我分享。

(more...)

修復Proxmox VE:節點無法加入集叢 / Fix Proxmox VE: Pvecm Add Failed

布丁布丁吃布丁

修復Proxmox VE:節點無法加入集叢 / Fix Proxmox VE: Pvecm Add Failed

image

本篇是修復Proxmox VE的集叢(Cluster)中遇到「authentication key already exists」的錯誤。這個錯誤是因為該節點(node)已經在集叢(cluster)中,所以無法再加入集叢。加入-force參數之後可以讓節點強制加入集叢。以下說明造成錯誤的原因以及解決方法。

This article describes the problem of Proxmox VE Cluster: “'authentication key already exists” when add a node to cluster. A proposed solution to the problem is append “-force” option to “pvecm add [NODE_ADDRESS]”. Following are the problem description and solutions.


問題狀況 / Problem Description

2014-08-08_103642

由於你的集叢一直發生錯誤,你想要重新建立起集叢,再把目前這個節點加入到新的集叢時,使用了pvecm add [節點網路IP]的指令,例如:

pvecm add 10.1.0.1

但是這時候卻出現了以下錯誤訊息,讓你加入節點失敗:

authentication key already exists

於是集叢依然無法運作,節點也無法加入到新的集叢中,錯誤無法解決。這一個問題我也在「Proxmox VE集叢重新加入節點」一篇中提及過,現在總算找到解決方法。

問題原因 / Causes of Problem

可能是以下幾種原因,你會想要把一臺Proxmox VE伺服器節點(node)加入到一個集叢中。

  1. 你的集叢發生了no quorum錯誤。這是因為集叢未啟動,解法請參考這篇。
  2. 你的集叢一直跳出登入視窗。這是因為節點伺服器時間不正確,解法請參考這篇。
  3. 你這臺節點Node A原本隸屬於集叢Cluster A,現在要加入Node B的Cluster B中。

前面兩個原因都無法靠重新加入節點來解決,請參考我另外的解決方案來處理。這篇主要處理的是第三種情況,也已經就是要把節點換到另一個集叢的時候。

造成無法加入集叢的原因有兩個:

  1. 節點自身已經隸屬於某一集叢
  2. 新的集叢本身已經有該節點的資料:這是當你用我這篇的方法,刪除節點自身的集叢設定(decluster),卻沒刪除新集叢對該節點設定時的問題。真要刪除節點可以用pvecm delnote [NODE NAME],不過以下方法更簡單一點。

解決方案 / Solution

解決方法就是在pvecm add時加上「-force」參數。舉例來說就是:

$ pvecm add 10.1.0.1 -force

這樣Proxmox VE會強制複寫原本的設定,就不會出現「authentication key already exists」錯誤訊息。

然後再來要重新啟動cman跟pve-cluster服務,以確保載入新的集叢資訊:

$ service cman restart

$ service pve-cluster restart

我把這些步驟寫成了腳本pve-add_node_force.sh,下載、加入執行權限之後,就能夠用以下方法加入集叢:

$ ./pve-add_node_force.sh 10.1.0.1

就拿這個方案來取代原本的pvecm add指令吧。

(more...)

修復Proxmox VE:連續要求登入 / Fix Proxmox VE: Endless Login

布丁布丁吃布丁

修復Proxmox VE:連續要求登入 / Fix Proxmox VE: Endless Login

2014-08-08_024021

本篇是修復Proxmox VE的集叢(Cluster)中遇到不斷跳出「Proxmox VE Login」登入視窗的錯誤。這個錯誤是因為節點的時間不一致,使用ntpdate網路校時之後可以解決。以下說明造成錯誤的原因以及解決方法。

This article describes the problem of Proxmox VE Cluster: when you do anything on other nodes, Proxmox VE Login form prompted again and again. A proposed solution to the problem is correcting the time of every node by using ntpdate. Following are the problem description and solutions.


問題狀況 / Problem Description

2014-08-06_112517

有時候在進行Proxmox VE集叢中任何操作時,明明之前已經登入過了,但是現在卻又跳出了「Proxmox VE Login」登入表單。即使你再一次登入,這個登入表單依然會跳出來。就算網頁重新整理,這個它依然會跳出這個表單。

2014-08-08_024021

如果用Google Chrome來檢查錯誤主控臺,你會發現大量的「401 (No ticket)」,例如:

Failed to load resource: the server responded with a status of 401 (No  ticket)

這大概是Proxmox VE使用者遇到最頭痛的問題了,一堆人都在網路上拼命地找尋這個問題的解決方法。但是這個問題本身不在於Proxmox VE集叢本身,而是在於伺服器上。

問題原因 / Causes of Problem

2014-08-09_005256

造成這個問題的原因是因為節點伺服器自己的時間不一致

以下幾種情況可能會造成伺服器時間錯亂:

  • 伺服器本身因為停電、長時間未通電使用等各種情況,導致伺服器本身記錄時間的電池沒電,時間被重置。
  • 使用虛擬機器建置Proxmox VE節點,但是因為使用快照(Snapshot)與還原(restore),讓機器本身的時間與現實時間不一致。
  • 因為任何原因設定了Linux系統的時間,例如用date工具

你可以執行date指令來查詢伺服器現在的時間:

root@proxmox-02:~# date

Thu Aug  7 20:47:01 CST 2014

如果這個時間附和現實時間,那沒有問題。但通常有問題的節點的時間都會與現實時間不同。

當兩個節點的時間不一致時,維持正確時間的節點去查看延遲錯誤時間的節點時,大概兩者只要相差5分鐘,就會導致這個錯誤發生。

手動解決方案 / Manual Solution

要解決伺服器時間錯誤,最簡單的方法是使用網路校時ntpdate。Proxmox VE預設沒有安裝ntpdate,我們要先更新apt-get,然後再用apt-get安裝。接著就能夠跟NTP伺服器pool.ntp.org進行網路校時。

安裝ntpdate的做法如下:

apt-get update

apt-get install -y ntpdate

進行網路校時的指令如下:

ntpdate -u pool.ntp.org

自動解決方案 / Automatic Solution

image

要自動解決這個問題的方法是固定每天都進行網路校時,確保伺服器的時間一直保持正確。

我將以上指令寫成了腳本pve-ntpdate.sh,請下載到/root/dlll-cias/pve/scripts/pve-ntpdate.sh:

wget http://goo.gl/vKyjnQ  -o /root/dlll-cias/pve/scripts/pve-ntpdate.sh

加入執行權限:

chmod +x /root/dlll-cias/pve/scripts/pve-ntpdate.sh

然後在crontab加入以下設定:

echo “0 2 * * * root /root/dlll-cias/pve/scripts/pve-ntpdate.sh”

這樣每天清晨2點的時候,伺服器會自動進行網路校時,以確保時間的正確性。

(more...)

修復Proxmox VE:無法刪除虛擬機器 / Fix Proxmox VE: Destroy Virtual Machine Failed

布丁布丁吃布丁

修復Proxmox VE:無法刪除虛擬機器 / Fix Proxmox VE: Destroy Virtual Machine Failed

2014-08-08_083402

本篇是修復Proxmox VE的集叢(Cluster)中遇到「'vzctl destroy [VMID]’ failed: exit code 41」的錯誤。這個錯誤是因為虛擬機器未成功建立,刪除設定檔之後可以解決。以下說明造成錯誤的原因以及解決方法。

This article describes the problem of Proxmox VE Cluster: “'vzctl destroy [VMID]’ failed: exit code 41”. A proposed solution to the problem is deleting the configuration file of the VMID. Following are the problem description and solutions.


問題狀況 / Problem Description

2014-08-08_083402

有些虛擬機器呈現灰色未開機的狀態。這些機器無法啟動,也無法備份、遷移,甚至刪除。整臺機器彷彿被鎖定一樣無法操作。

以虛擬機器ID (VMID) 100為例,刪除動作會失敗,而且出現以下錯誤訊息:

stat(/var/lib/vz/root/100): No such file or directory

Container is currently mounted (umount first)

TASK ERROR: command ‘vzctl destory 100’ failed: exit code 41

問題原因 / Causes of Problem

2014-08-08_083309

造成這個問題的原因在於虛擬機器未完成建立(create)或從備份檔案重建(restore),虛擬機器應該要有的檔案位置尚未建立好相對應的檔案,導致刪除等任何動作的失敗。

通常遇到的情況是:

  • 由於虛擬應用範本或是備份檔案過大,導致建置虛擬時間過長。
  • 建置過程途中被使用者按下「Stop」停止建置命令,或是因為斷電、斷網等任何異常,讓虛擬機器尚未建立完成。
  • 因此該虛擬機器就不能運作了。

手動解決方法 / Manual Solution

要移除無法運作的虛擬機器,做法是刪除該虛擬機器的設定檔案。以VMID為100的虛擬機器為例,刪除指令為:

rm -f /etc/pve/nodes/*/*/100.conf

我做成腳本pve-destroy_vm.sh,請下載、加入執行權限,然後可以這樣做:

./pve-destroy_vm.sh 100

這樣就能夠強制刪除虛擬機器了。

有待找尋自動解決方法 / Need for Automatic Solution

上述的手動解決方案必須每次都要登入伺服器操作,不能同一在網頁操作上進行,比較不方便。

因此自動解決方法應該是去修改網頁端刪除的指令。如果取得了exit code 41,那就用上述的方法強制刪除。

只是Proxmox VE的網頁比較麻煩,他是用Perl寫成,而且前端使用了ext js這個鷹架,整體來說非常複雜。這部分仍有待研究。

(more...)