:::

ORCID的公開API簡介 / Introduction of ORCID's Public API

布丁布丁吃布丁

ORCID的公開API簡介 / Introduction of ORCID's Public API

image

ORCID提供了兩種API,一種是要以機構付費的會員API,一種是免費公開的API。作為一個研究者,我們來看看公開API有提供什麼功能,可以讓我們可以應用在書目計量的資料分析上。


API是什麼方式運作? / How to use ORCID's API?

image

ORCID在「INTRODUCTION TO THE ORCID PUBLIC API」中介紹他們的公開API,做法是用OAuth 2.0註冊後搭配RESTful API的方式運作。但即使沒有用OAuth註冊,也可以直接用RESTful API來查詢。

雖然REST對網頁工程師來說就跟「吃飽沒?」一樣是個家常便飯的問候,但對只聽過Z39.50、OAI-PMH的圖書館員來說可能不是這麼的熟。Marshall Breeding在「Interoperability and Standards」(2013)一篇文章中是以「Application Programming Interfaces」來介紹RESTful API。這是一種類似在網頁表單中輸入資料、傳送資料給伺服器、取回資料的資料運作方式,但是基本上全部都是以程式碼的方式運作,以達到自動化資料操作、查詢、交換的目的。換句話說,RESTful API不是人直接輸入一個查詢語句,然後就可以將匯出結果成為Excel表格的工具。

附帶一提,RESTful API是一種風格架構(所以是ful,意思是「的樣子」),本身並沒有像Z39.50跟OAI-PMH有嚴謹的定義,各家的RESTful API都有各家的發展方式,所以Marshall Breeding在這部分也沒有辦法詳盡介紹。

儘管如此,在以TCP/IP架構下的網際網路中,RESTful API依然是大家普遍認同的API開發方式。ORCID也不例外,在部分資料的查詢上也開放了RESTful API的途徑。


查詢研究者資料的Public API / Public API of Researcher

image

ORCID在「TUTORIAL: RETRIEVE DATA WITH THE PUBLIC API WITH CURL 1.2 AND EARLIER」介紹如何查詢研究者的資訊,查詢的資料有三種:

  • Bio (/orcid-bio):回傳名字跟個人資訊。
  • Works (/orcid-works):回傳所屬機構清單、文章作品以及被贊助的文章。
  • Full (/orcid-profile):回傳全部ORCID的資料,也就是上述兩種資料。

image

我們來以我自己的ORCID頁面為例。我的ORCID是「0000-0003-3751-610X」,那麼我們可以簡單地用以下三種網址來查到三種研究者的個人資料:

查詢研究者的資訊 / Get Researcher’s Profile

image

Full為例,我們會下載一個名為「orcid-profil」的XML檔案。一般來說會以文字編輯器(例如Notepad++)開啟,可是IE的XML檢視介面做得挺好的,所以我們也可以用IE來看看。

要解讀這個XML檔案,我們可以從大綱看起。orcide-profile底下有以下幾種資料:

  • orcid-identifier:記錄ORCID帳號資訊
  • orcid-preferences:使用語言
  • orcide-history:帳號更新資訊,可以瞭解這個帳號是機器人建立的還是人手工建立的。
  • orcid-bio:個人公開履歷
  • orcid-activites:這一項裡面包含兩種資訊
    • affiliations:所屬機構,以及年分
    • orcid-works:發表文章資訊。

image

API也可以查到新增這篇文章的來源是來自誰,從這裡可以看到是我自己建置的資料。

查詢機構的資訊 / Get Organization’s Profile

image

如果是以機構為對象,那會查到什麼呢?我們以AcademicHub跟ORCID密切整合的臺大醫學院為例來查詢看看:

因為臺大醫學院的ORCID公開資訊上就只有ORCID ID資訊而已,所以API查到的結果也就只有帳號的資訊。可惜沒能看到機構底下所屬研究者的資訊。


搜尋的公開API / Searching Public API

image

ORCID的搜尋API教學「TUTORIAL: SEARCHING WITH THE API 1.2 AND EARLIER」介紹了如何以RESTful API來執行搜尋。

image

雖然教學一開始有提及機構會員可以用OAuth的方式先登入,這樣可以進一步取得ORCID中被設為「trusted parties」(被信任的機構)的資訊,但我們依然可以用公開API來找尋被公開的資訊。

首先我們來看看搜尋API可以查詢什麼欄位:

  • orcid (//orcid-profile/orcid-identifier):就是ORCID的ID,例如我的「0000-0003-3751-610X」。
  • given-names (//orcid-profile/orcid-bio/personal-details/given-names):作者設定的名稱
  • family-name (//orcid-profile/orcid-bio/personal-details/family-name):作者的姓
  • credit-name (//orcid-profile/orcid-bio/personal-details/credit-name):作者一般出現在發表文章上的名稱
  • other-names (//orcid-profile/orcid-bio/personal-details/other-names):作者其他的名稱。
  • email (//orcid-profile/orcid-bio/contact-details/email):作者的email。這是一個很實用的查詢欄位
  • external-id-reference (//orcid-profile/orcid-bio/external-identifiers/external-identifier/external-id-reference):其他系統上的作者辨識碼,例如Scopus的Author ID
  • digital-object-ids* (//orcid-profile/orcid-activities/orcid-works/orcid-work/work-external-identifiers/work-external-identifier[work-external-identifier-type="doi"]/work-external-identifier-id):從文章的DOI反查作者。這也是實用查詢欄位
  • work-titles (//orcid-profile/orcid-activities/orcid-works/orcid-work/work-title/(title|subtitle) ):從作品發表反查作者。
  • keywords ( //orcid-profile/orcid-bio/keywords/keyword ):查詢作者的關鍵字欄位(自己可以為自己設關鍵字)。
  • creation date (//orcid-profile/orcid-history/submission-date):查詢作者建立ORCID帳號的時間。(這個不是作品的時間喔)
  • last modified date (//orcid-profile/orcid-history/last-modified-date):作者最後修改的時間。
  • text (//orcid-profile/orcid-bio):所有以上的欄位。
搜尋文章標題 / Search Work Title

我們先試著查查看一個明確的欄位「work-titles」好了。

image

很好,第一筆就是我的ORCID。看來ORCID使用的Lucene全文搜尋引擎即使面對中文也運作良好!

用任意欄位搜尋所屬機構 / Search Affiliations by Any Fields

各種排行都很注重以機構為主、統計機構中研究者發表的數量,所以我們很注重作者所屬機構的資訊。雖然ORCID的搜尋API沒有所屬機構的欄位,但我們可以用text來查詢看看:

image

第一位是Yi Shen,是政大圖書館的核心館員之一。第一筆就是圖資界的前輩,所屬機構也的確是政大,真是準確。

第二位是Yuei-An Liou,現職為國立中央大學特聘教授。可是奇怪的是,劉老師的ORCID公開資訊上沒有找到檢索詞「國立政治大學」。我猜可能是「國立政治大學」被斷詞為「國立」、「政治」、「大學」,所以找到很多「國立」跟「大學」的資訊。

第三位ty yeh也是在自己的履歷上寫了很多「國立」跟「大學」,可惜這位也不是隸屬於國立政治大學的同仁。

用email搜尋所屬機構 / Search Affiliations by Email

Email是另一個可以標示所屬大學的查詢方式。所以我想用email應該可以找出對應機構的作者,除非作者不公開email資訊。

讓我們以政大的Domain Name 「*@nccu.edu.tw」來查詢看看。必須注意的是,這裡要搭配萬用字元*來做查詢喔:

image

第一位就是大力推動ORCID的邱炯友老師。不過搜尋結果也只有一位而已,這可能是因為大家的email預設都是不公開的緣故。

讓我來看看以AcademicHub跟ORCID密切整合的臺大醫學院能不能用email「*@ntu.edu.tw」來查詢:

查詢結果為24筆,跟AcademicHub上的801筆資料有相當大的落差。

2015-06-25_235539

這不僅是因為預設並不公開作者的email,而且連老師似乎也不是以ntu.edu.tw為主要的email,而是選用gmail.com。

因此從上面的兩點來看,email似乎不是一個適合用來搜尋所屬機構的好方法,因為:

  1. email預設是不公開的資訊
  2. 並不是所有人都用機構發行的email來註冊ORCID

除非ORCID開放檢索所屬機構欄位,不然看來目前沒有能夠完整找到作者所屬機構的檢索方式。


結語:ORCID是一個稱職的研究者公開查詢目錄 / Conclusion: ORCID is a good researcher public directory

儘管ORCID的API並非採用圖書館界中交換典藏資料常用的OAI-PMH或Z39.50的下一版SRU,但是依然提供了現在網頁開發流行的RESTful API與OAuth認證,十分具有現代網站的風範。

站在想要以大學為單位來統計研究者著作發表的書目計量角度,本文試著以Public API來看看如何才能取得完整的作者資訊。但是目前看來搜尋功能尚未考量到所屬單位的欄位,目前還沒辦法很準確地以機構來找到所屬作者。也就是說,ORCID現在還難以支援以機構為分析對象的書目計量統計。

但是因為ORCID可以記錄研究者的所屬單位,所以相信這就跟檢索作品題名(work-titles)是類似的欄位,因此這非是不可能做到的功能。讓我們繼續拭目以待ORCID的成長吧!

(more...)

SMA21平床式掃描機操作說明與驅動程式 / SMA21 Scanner Manual and Driver

SMA21平床式掃描機操作說明與驅動程式 / SMA21 Scanner Manual and Driver

image

SMA21  是一台操作比較複雜的平床式掃描機。我製作了一份教學投影片供使用者參考,連帶一併備份驅動程式。


操作說明投影片 / Manual Slide

下載:Google DriveOneDriveMegaSlideShare 

亮度不足的問題 / Lack of Brightness

image

必須額外說明的是,由於我們這台掃描機在亮度判斷上有點問題,所以這份說明裡面會特別教大家把亮度(Brightness)調到最亮再來掃描。

Scanned Image

 

但是調整完之後亮度還是不太夠。這時候我會使用影像處理工具的自動色階再做進一步的處理。

自動色階的定義可以參考Photoshop的說明 。簡單來說,影像中最亮的地方會被調整成白色、最暗的地方會被調整成黑色,其他的顏色則按照比例調整。這樣會讓最亮的地方看起來很白、最暗的地方看起來夠黑,影像會變得對比比較清楚。

一般時候影像處理工具不用用到Photoshop這麼龐大的工具,簡單的XnView就可以做到了。

image

操作方式是在 圖片 > 對映 > 自動色階。點下去就會調整完成。然後按下存檔就可以了。我們可以比較一下調整自動色階前後的兩張圖片,應該會覺得調整之後比較亮吧。

Scanned Image Scanned Image
調整自動色階之前 調整自動色階之後

SMA21掃描機的安裝 / Installation of SMA21 Scanner

SMA21掃描機的安裝分成網路卡安裝與驅動程式Batch Scan Wizard的安裝兩個部分,以下個別說明。

網路卡的安裝 / Installation of Network Card

SMA21平床式掃描機的資料傳輸方式跟一般用USB連接的掃描機有很大的不同。SMA21本身就是一台電腦,可以獨立完成掃描的工作,而搭配操作的工作站只是給予操作指令而已。

gdimage

SMA21掃描機是採用網路線在傳輸資料,因此工作站上必須要額外的網路卡連結SMA21。一般來說會額外購買一張USB網路卡來使用,速度到100Mbps就足以使用 。

20150622-173804-screenshot6

然後設定網路卡的網路位址。我們要連結SMA21掃描機與工作站電腦,因此這兩台電腦必須位於同一個區域網路底下。

SMA21掃描機的預設網路位址是:

  • IP位址:192.168.1.50
  • 子網路遮罩:255.255.255.0

因此工作站電腦的網路卡設定則是:

  • IP位址:192.168.1.51
  • 子網路遮罩:255.255.255.0
  • 閘道口:(不要設定閘道口)

然後把SMA21掃描機跟工作站電腦用網路線連接起來即可。

驅動程式Batch Scan Wizard的安裝 / Installation of Batch Scan Wizard

依照作業系統的版本不同,Batch Scan Wizard有32位元與64位元兩種版本。雖然當初買SMA21時,還是使用Windows XP 32位元,但現在大部分的電腦幾乎都是64位元了。安裝時請務必選擇正確版本安裝:

20150622-173401-screenshot5

20150622-172810-screenshot1

安裝之後要先在Batch Scan Wizard 64bit > Setup 64bit裡面設定SMA21的網路,然後就可以照投影片裡面的教學一樣開始操作了。


結語:陪我一起進入研究所的好麻吉 / Conclusion: It is my friend while I study in graduate school

這台SMA21掃描機是在我剛進入政大圖檔所的時候從國外買進來的。當時來了一位胖胖的德國工程師,跟我們一起從巨大的木箱中開箱、搬運、設置。然後又花了幾天的時間教我怎麼操作這台掃描機,還很自豪地掃描了紙幣上肉眼看不出來的小字。這位工程師是一位喜歡到處旅遊的人,不時跟我炫耀他去過的景點。雖然我英文不好,很難完全理解他在說什麼,不過看得出他十分開心。

在一開始計劃執行期間還有蠻多人使用這臺掃描機,但是計劃執行結束之後,這臺掃描機因為操作難度太高,也就很少同學願意使用,變成每次炫耀設備時拿來看一眼的裝飾品。儘管如此,我跟少數幾位同學還是非常喜歡這臺掃描機,像是我常常都會拿大量文件跟書本來掃描,效率比一般USB掃描機快很多。

時過境遷,現在掃描機的DPI動輒1200,SMA21最多仍然只能掃描600DPI。雖然可以掃描到A2尺寸,但是也沒有那麼多人需要,最後就把它轉移到其他單位去使用。至今我仍然偶爾會過來看看它,掃掃書本。雖然它很老了,但還是希望它能夠繼續陪我到博士畢業啊。

對了,最後補充一下,雖然SMA21有書籍掃描模式,但不會幫你翻書。是說怎麼這麼多人都期待掃描機會自動翻書,你都不怕機器弄破書頁嗎?

(more...)

修復Proxmox VE:增加第二顆硬碟到LVM / Fix Proxmox VE: Add Another Disk to LVM

布丁布丁吃布丁

修復Proxmox VE:增加第二顆硬碟到LVM / Fix Proxmox VE: Add Another Disk to LVM

pablo

之前我寫過「Proxmox VE增加第二顆硬碟」的做法,是用額外掛載的方式來新增一個新的Storage。這次我要做的是比較完整的做法:將新增加硬碟加入LVM中。操作步驟主要參考Jarrod的LVM教學


操作環境 / Proxmox VE Environment

2015-06-21_222426

本文是以Proxmox VE 3.4為例子,以VirtualBox來架設。重點是這個電腦有兩顆硬碟,Proxmox VE是安裝在第一顆硬碟中,第二顆硬碟是空的。

操作步驟 / Operation Process

Step 1. 登入 / Login

image

你可以用Proxmox VE的Web GUI中的Shell來登入,也可以直接登入本機端。總之要先以root的身份操作指令。

Step 2. 分割新的硬碟 / Partition the new disk

首先我們要確定新硬碟的路徑。一般來說,第一顆SATA硬碟為 /dev/sda 、第二顆為 /dev/sdb,而IDE的路徑則是 /dev/had 、第二顆則是 /dev/hdb。詳情請看鳥哥的說明

因為我安裝的是第二顆的SATA硬碟,所以路徑為 /dev/sdb。

硬碟的分割要使用fdisk,搭配第二顆硬碟的路徑/dev/sdb,指令如下:(粗體的地方表示是我們要輸入的指令)

root@pve:~#fdisk /dev/sdb

接下來會跳到fdisk的對話介面:

Command (m for help):

如果該硬碟裡面已經有資料,那就要用d指令來刪除。

Command (m for help): d

Selected partition 1

image

然後新增磁碟分割區,建立一個主要分割區,空間為整顆硬碟:

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1): "enter"
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): "enter"
Using default value 2610

image

然後將該分割區的檔案類型修改為Linux LVM:

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

image

最後將分割表的資訊寫入硬碟:

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

image

完成。新增硬碟的磁碟分割位置為 /dev/sdb1。

Step 3. 增加邏輯捲軸 / Increasing the logical volume

接下來要連續輸入四個指令。注意裡面的磁碟分割路徑 /dev/sdb1,這是剛剛用fdisk新增的磁碟分割。

pvcreate /dev/sdb1
vgextend pve /dev/sdb1
lvextend /dev/pve/data /dev/sdb1
resize2fs /dev/pve/data

image

這樣就把第二顆硬碟新增到Proxmox VE的local空間中。

image

使用lvdisplay指令來看看結果,可以發現/dev/pve/data的空間已經新增到了12.37GiB。

這樣就大功告成囉!同樣的這種做法也可以用在第三顆、第四顆硬碟上面,繼續擴大local的硬碟空間。

將硬碟從LVM中移除 / Remove disk from LVM

既然我們可以新增硬碟到LVM,那一樣可以從LVM中移除硬碟。但是這個步驟就比新增還要複雜很多,細節可以參考鳥哥的縮小LV容量,如果那天我遇到這種情況了再來深入研究吧。


結語:使用LVM的風險 / Conclusion: The risk of LVM

現在Linux在安裝時預設都是以LVM的形式來分割磁碟,所以對大多數的人來說都感覺不到LVM的存在。LVM雖然能夠像上面這樣任意擴充一顆硬碟來增加空間,但是LVM是一種以任意調整容量為目的的檔案系統,安全性、可恢復性則不在考量範圍內。而且LVM預設是用線性模式在寫入資料,一顆硬碟滿了再放下一顆,存取方式無法與RAID相比。簡單來說:

  1. 當LVM裡面其中一顆硬碟毀損時,你得花很多功夫來調整LV,以移除壞掉的硬碟。
  2. 其他作業系統無法讀取以LVM管理的硬碟資料,也無法用Gparted之類的工具來調整硬碟分割。
  3. 結合以上兩點,如果LVM的作業系統毀損、無法開機。除非是用救援模式進入系統,不然不能用外接硬碟的方式讀取LVM的資料。

既然大部分Linux發佈版預設都用LVM,我們應該也無法擺脫LVM壞掉時的風險。因此在使用LVM時,一定要有壞掉之後很難復原的心理準備喔。

(more...)

修復Proxmox VE:第二次安裝時遭遇LVM的問題 / Fix Proxmox VE: Solve unable to create volume group while installing Proxmox VE

布丁布丁吃布丁

修復Proxmox VE:第二次安裝時遭遇LVM的問題 / Fix Proxmox VE: Solve unable to create volume group while installing Proxmox VE

pablo (1)

安裝Proxmox VE的時候,如果事前硬碟上已經有安裝好的Proxmox VE時,再次安裝就會發生「unable to create volume group at /usr/bin/proxinstall line 706」的問題。這個問題必須先移除硬碟上名為「pve」的LVM,然後就可以正常安裝了。


問題狀況 / Problem Description

image

有時候安裝Proxmox VE的時候會遇到「unable to create volume group at /usr/bin/proxinstall line 706」的錯誤訊息,然後安裝就無法繼續下去。

問題原因 / Casues of Problem

造成這個問題的原因是因為原本硬碟上面已經安裝過Proxmox VE。Proxmox VE在安裝時會建立一個名為「pve」的邏輯捲軸管理員LVM。而LVM不能有相同的名字,因此第二次安裝Proxmox VE時,就無法建立相同名字的「pve」,因此造成失敗。

解決方案 / Solution

我們需要一個可以開機的Linux版本Live CD來刪除LVM。

Step 1. 以Live CD開機 / Boot from Live CD

image

我原本是使用Ubuntu 14.04桌面版,但是那個太大了,速度也很慢。我試了幾個Live CD的版本,太小的Live CD並不具備LVM的工具,找到最後是Ubuntu Rescue Remix 12.04版本,ISO大小為233MB,啟動速度很快。

image

將這個ISO燒錄成光碟之後,或是像我這樣用VirtualBox掛載ubuntu-rescue-remix-12-04.iso之後,我們就可以開機進入Live CD。

Step 2. 刪除Volume Group / Remove Volume Group

image

一路enter到最後會是這個畫面。請輸入指令:

sudo vgremove pve –-removemissing

接下來會一一確認是否要刪除Volume Group裡面的Logical volume,總共有swap、root跟data。請一律按「y」確定。

image

接下來確認是否有刪除這個Volume Group。

vgdisplay

如果沒有看到pve,那Volume Group「pve」就刪除完成了。

Step 3. 關機 / Shutdown

image

完成之後輸入關機指令:

sudo halt

在看到「Please remove installation media and close the tray (if any) then press ENTER:」的訊息時,取出光碟,然後按下Enter鍵繼續關機。

Step 4. 重新安裝Proxmox VE / Install Proxmox VE again

2015-06-21_210909

再來重新安裝Proxmox VE的時候就可以順利成功了。

(more...)

Proxmox VE以vmdk作為虛擬機器的硬碟 / Use vmdk format as Virtual Machine's disk in Proxmox VE

布丁布丁吃布丁

Proxmox VE以vmdk作為虛擬機器的硬碟 / Use vmdk format as Virtual Machine's disk in Proxmox VE

pablo

Proxmox VE預設採用qcow2作為虛擬機器的硬碟格式,如果要改用vmdk格式的話,建立虛擬機器時就要調整cache的設定為「Write through」才能讓虛擬機器正常開啟。


用vmdk跑虛擬機器比較好 / It is better to run a Virtual  Machine based on vmdk image disk format

經過多台虛擬機器的架設,我發現以vmdk作為硬碟影像檔格式架設的虛擬機器總是有較好的執行效率與壓縮率,不論是VirtualBox還是Proxmox VE都是如此。

而且qcow2預設不開啟動態配置模式,因此創建影像檔時,檔案大小就會是設定的硬碟大小。例如我建立一顆80GB的硬碟,即使尚未安裝任何作業系統,qcow2硬碟影像檔依然會佔實體硬碟80GB的空間。相較之下,vmdk或是設定了動態配置的vdi格式,一開始的檔案大小通常不會超過10MB,開始安裝作業系統、增加檔案之後,影像檔才會逐漸變大。

image

再考量到現在很多可以直接掛載vmdk的工具,例如WinMount (也可以掛載vdi,但這是一個付費軟體),這樣子要從備份資料中取回需要的資料也很方便。

總而言之,VMware不愧是虛擬技術界的龍頭老大,他們家的vmdk的確是比較好。

Proxmox VE無法開啟vmdk格式虛擬機器的問題 / The error message while start virtual machine based on vmdk

image

我們可以用預設值建立好虛擬機器,而虛擬機器的硬碟是用vmdk格式。但是這時候開啟虛擬機器時,卻會發生類似以下錯誤訊息:

「TASK ERROR: start failed: command '/usr/bin/kvm -id 106 -chardev 'socket,id=qmp,path=/var/run/qemu-server/106.qmp,server,nowait' -mon 'chardev=qmp,mode=control' -vnc unix:/var/run/qemu-server/106.vnc,x509,password -pidfile /var/run/qemu-server/106.pid -daemonize -smbios 'type=1,uuid=eece4916-f5e4-49de-a043-d2e77af96a53' -name test-vmdk -smp '1,sockets=1,cores=1,maxcpus=1' -nodefaults -boot 'menu=on,strict=on,reboot-timeout=1000' -vga cirrus -cpu qemu64 -m 512 -k en-us -cpuunits 1000 -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' -device 'usb-tablet,id=tablet,bus=uhci.0,port=1' -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' -iscsi 'initiator-name=iqn.1993-08.org.debian:01:0a39bcb174' -drive 'if=none,id=drive-ide2,media=cdrom,aio=native' -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=200' -drive 'file=/var/lib/vz/images/106/vm-106-disk-1.vmdk,if=none,id=drive-ide0,format=vmdk,aio=native,cache=none,detect-zeroes=on' -device 'ide-hd,bus=ide.0,unit=0,drive=drive-ide0,id=ide0,bootindex=100' -netdev 'type=tap,id=net0,ifname=tap106i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown' -device 'e1000,mac=FE:CE:E5:CC:F3:C4,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300' -machine 'accel=tcg'' failed: exit code 1」

這是因為在KVM虛擬技術中,預設快取寫入硬碟的方式為「Default (No cache)」,但是vmdk必須使用「Write Through」設定,因此只要調整硬碟快取寫入方式就可以解決這個問題。

建立虛擬機器時調整硬碟設定 / The disk configuration while creating virtual machine

image

建立虛擬機器的時候,在設定硬碟的這一個步驟中可以找到快取寫入的設定。(註:Proxmox VE不同版本在這一部上有很大的不同,這是3.4的版本) 預設是使用「Default (No cache)」,請把他修改成「Write through」即可。

其實上面的Bus/Device改成VIRTIO的話,一般來說效能會更好,因為這是虛擬裝置原生的通道,而非模擬出來的IDE或SATA。

修改既有的虛擬機器 / Revise the disk disk configuration for existed Virtual Machine

image

如果是已經建立完成的虛擬機器,那也可以修改硬碟的相關設定。首先我們先開啟該虛擬機器的硬體頁面(hardware),找到vmdk的那一顆硬碟。

image

選擇該硬碟,按下編輯按鈕(edit)。

image

在這邊修改硬碟設定。讓我們把原本的「Default (No cache)」設定改成「Write through」,然後按下OK。

image

這樣子就能夠正常啟動vmdk囉。

如何在沒有CPU虛擬化技術支援下開啟KVM? / How to run KVM virtual machine without CPU Virtualization Technology?

image

我是在自己電腦上以VirtualBox架設Proxmox VE來測試。在這種情況下,一般來說是不能啟動KVM的。這時候得要在「Options」中關閉「KVM hardware virtualization」選項,然後就能順利開啟。當然,這種情況下只能測試用,不能運作實際的作業系統。

要如何將qcow2轉換成vmdk? / How to convert qcow2 format to vmdk?

image

如果我們虛擬機器已經是以qcow2架設了,那難道就沒辦法使用vmdk的好處嗎?

別擔心,我們可以用qemu-img convert指令可以讓你把qcow2格式轉換成vmdk格式。首先我們要先切換到映像檔所在的目錄,Proxmox VE存放在local的資料夾,路徑為:

/var/lib/vz/images/[VMID]/

如果虛擬機器的VMID為106,則路徑為:

/var/lib/vz/images/106/

qemu-img convert指令用法如下:

$qemu-img convert -f qcow2 –O vmdk vm-106-disk-2.qcow2 vm-106-disk-2.vmdk

  • vm-106-disk-2.qcow2:來源的檔案
  • vm-106-disk-2.vmdk:輸出的檔案
  • -O是大寫的o,不是0

image

硬碟越大,轉換所需要的時間越久。轉換完成之後,可以看到原始的qcow2大小為33GB,而轉換成vmdk之後只剩下4.1MB。這就是vmdk的優勢。

如果要運作虛擬機器的話,要記得在虛擬機器的硬體(hardware)中把硬碟改為轉換後的vmdk那一顆硬碟,並且設定快取寫入為「Write through」,就可以正常開啟囉。確認運作正常之後,原始的qcow2就可以刪除了。


結論:虛擬化技術的相容性 / Conclusion: The Compatibility of VMDK image format

Proxmox VE使用的KVM,以及VirtualBox這兩種虛擬化技術都有提供對vmdk的相容。因此我們不僅可以用Turnkey Linux提供的虛擬應用範本,也能夠在VMware的Virtual Application???找到其他的虛擬應用範本。就算是容器虛擬化技術OpenVZ,也能用一些比較複雜的步驟將虛擬機器轉換成vmdk來輸出(雖然是這樣想,但其實難度跟P2V一樣,並沒有真的如上面用qemu-img轉換來得容易)。如果沒有特別的考量的話,以vmdk架設傳統的虛擬機器應該是不二首選,不過這還是無法跟容器虛擬化的OpenVZ與Docker相比就是了。

(more...)