:::

2010,新年新願望

布丁布丁吃布丁

2010,新年新願望

2010-01-01-292 

本來今年預期的跨年會是很平淡的,結果多虧了身邊的朋友、大學的朋友還有遠在台中的朋友們,讓整個跨年歡樂到不行。

也許有人發現到了,這個blog已經很久沒有更新。原因很簡單,看看副標題「布丁的研究之路(是的,我正在繞遠路)」,因為我覺得有些事情跟研究沒什麼關係,所以也就沒有把他發佈在網際網路的動力。就如很久以前說的,我現在大部分私事都在Plurk上面聊。這個blog則是長篇文字、心得的發表空間。

不過,2010年整理書桌、電腦檔案時,倒也找出了不少值得一談的東西。在這剩餘1.5天的跨年連續假期,就讓我像是暑假日記作業最後一天才寫的小學生一樣地,一篇一篇挖掘這些事情吧。而這一篇要談的,則就是去年到今年的跨年活動。


這件事情就從跨年前兩週左右談起好了。我試著詢問研究所實驗室的大家,但大家跨年意願似乎不高,有伴的隨伴去、沒伴的說要寫論文。而我這個沒伴又沒在寫論文(因為在寫書)、也是本來就不太想辦活動的我,也只是想慵懶地渡過今年的最後一天,然後用爬山來迎接2010年的曙光!

後來得知mabinogi有巴哈玩家舉辦音樂會,由於聖誕節時舉辦的氣氛還不錯,所以有點想參加。接著也知道大學社團在政大附近舉辦跨年聚,很久沒跟大家聚一聚了,也是想參加。而且本來預定在跨年夜meeting的時段,也挪到了前一天去而空了下來。隨著跨年時間將近,小頭對於跨年活動的關注似乎提高了不少。煮火鍋麻煩、辦活動不想,那……就還是一如往常一樣,吃晚餐吧。

是的,我只是想悠閒地跨個年,跟往常一樣地吃個飯、說聲掰掰而離開,這樣就好。但,有件事情誰都知道,那就是計畫永遠趕不上變化……


終於來到了12/31跨年當天。早上meeting完後,老闆請了各助理吃了尾牙。大家隨興聊聊,回到實驗室時也快接近下班,數人準備收拾收拾行李、離開這個實驗室(離職的意思)。我小憩一下,收到大學朋友阿逼說一小時候過來的MSN之後,便與小頭、傻殿下山吃飯,一如往常……

但因為堅持、客滿與奇怪的原因,最後我們居然在寒風中走到了捷運動物園站的麥當勞吃飯。講清楚一點就是,我們走到了距離政大正門步行約20分鐘的麥當勞,而不是選擇政大正門口的麥當勞!雖然每個人都以為我吃得是吃到飽餐,但很遺憾的,我只是用吃到飽餐的價位,去吃了一般餐點!

結果2009年最後我吃了一年才吃兩三次的速食作結,某種意義上還真是特別。晚餐的特別節目是黑特大會,人少就是有這種好處。


「我到你實驗室樓下了,你在哪裡?」當接到阿逼打過來的電話時,我差點嚇到把啃到一半的麥克雞腿掉到地上。本來預期我們會在正門口吃飯的現在,他居然在距離這麼遙遠的地方來找我,實在是失策。阿逼,對不起!

「喂,我要從新店過去,你可以幫我買晚餐嗎?」當接到阿誠打電話過來時,我一邊因為啃太多麥克雞腿而感到膩口,一邊再想現在到底是怎麼回事。大家都是要去大學社團那邊聚,所以先過來嗎?但偏偏我現在又不在政大啊啊啊啊~~只好勉強地指示個等待地點給阿誠,還是把這餐好好吃完再看看吧。

結果最後吃離開、回到政大接到他們兩個的時候,已經是九點的事情了。


雖然我們這三人後來回到實驗室發呆的時候,有種懶得離開這邊去找社團跨年的想法,不過還好最後有過去——社團的人聚集了超過30個,我每年都要驚訝輔漫居然如此蓬勃發展!

一群人在阿曉他家地下室聚會。但這地下室有沙發、有大桌子、有電視、有卡啦OK,一整個就是比我家客廳還要高級是怎麼回事?總而言之,人多玩起來就是開心,打牌的打牌、桌遊的桌遊、FF13打到Wii新老馬,彷彿回到了輔大社辦一樣。

11點40時,主辦人提醒大家可以上頂樓看101迎接跨年,一群人傭傭懶懶地離開座位走到外面時,才發現一件殘酷的事情:我們距離頂樓有21層,人數30多人,但電梯一次只能搭5人!雖然我似乎是搭上了最後一班電梯,但還是不少人發揮火災怪力,爬了21層而在最後一刻趕上,真是辛苦了。

101煙火就那樣,人民的稅金一直在爆炸。然後接下來是景美溪沿岸的爆炸(煙火),甚至連求救信號彈都出來了!附帶一提,這個煙火放到了早上都還沒停,大家真是太有心(=$)了。

下樓時,我們這群搭電梯上來的改走樓梯下去。繞著逃生梯轉了21圈,彷彿有種無限迴廊般的暈眩,甚至有人走到一半不支蹲地休息。看個煙火變成爬樓梯健身大會,也太讓人印象深刻了XDD


跨年不久收到了大個子的消息,看來爬山團最後只剩下我跟阿逼,為此我大概兩點多就倒在沙發上。儘管小睡一下稍微有點精神,但阿逼跟那群大學生徹夜遊完的樣子真的是太青春了。青春到五點半我們跟大家揮手道別離開時,他走路看起來有點不太穩XD

吃了早餐、買了點東西之後,我們就照預定地從蔣公銅像走向政大後山的樟山寺。路燈昏暗的道路上,卻已經有不少媽媽級山友的身影。「我們應該是元旦登山團中最年輕的吧!」仔細想想,那天也的確只有碰到一個跟我們年紀差不多的人而已。

我們的計畫是一路走到樟山寺看個日出,作為一年健康的開始,但走到一半天就亮了啊啊啊!而且因為昨晚怕冷,身上穿一堆衣服、外套,還背著筆電,加上昨晚體力消耗尚未恢復,爬這樓梯還真是夠漫長的了。

一路上邊走邊聊,一邊跟擦身而過的山友道聲「新年快樂」,抵達樟山寺的時候意外地沒什麼人,有也是那些路上走在我們前面的山友們。

2010-01-01-291

我跟阿逼就如這篇頁首那張照片一樣。在還沒什麼人插的香爐上,插上了今年開始的頭幾炷香,希望能求個好兆頭。

2010-01-01-293

接著架個桌子椅子,我的早餐是御飯糰跟香菇雞湯,感覺真清爽。

吃完後,我們帶著疲憊不堪的身心很快地下了山。送走了騎車的阿逼,我回到宿舍洗澡、整理衣物、睡覺,結束了整個跨年的活動。


2010年的到來,我應該是比普通人更有感觸。

12/31跨年晚餐前我躺在行軍床上睡覺時,我一直在想,如果我繼續這樣躺著、睡著,是不是我身邊的人事物就不會改變?

但是,那是不可能的事情。會離開的,就是會離開。不管我有多任性,都無法改變這種事情。

我的新年新願望,就如以往一樣地任性,就如以往一樣地不可能實現。

 

希望,每天都能平淡地渡過,那就是對我來說最好的日子了。

(more...)

DSpace遇到「Failed to resolve artifact.」的問題

布丁布丁吃布丁

1 Comments

DSpace遇到「Failed to resolve artifact.」的問題

image

在DSpace編譯的過程中,如果遇到以下錯誤訊息,大部分時候是網路連線已經中斷的問題:

[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

No versions are present in the repository for the artifact with a range [1.5.0.0,1.6.0.0)
  org.dspace:dspace-api-lang:jar:null

from the specified remote repositories:
  central (http://repo1.maven.org/maven2),
  maven.dspace.org/snapshot (http://maven.dspace.org/snapshot)


[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------

這是由於DSpace在做MVN的時候需要去網路上檢查jar檔案,而如果你的伺服器網路如果不通,那就無法順利進行編譯。

解決方法則就是一般網管的問題囉。VirtualBox的NAT虛擬網卡偶爾會當掉,就會發生上述情況,我在此留下一個記錄。

(more...)

我也被詐騙了

布丁布丁吃布丁

我也被詐騙了

今晚我被冒稱PCHome購物人員(大陸口音)跟中華郵政人員說我交易紀錄從單筆轉帳變成12期轉帳,原本買了200元的商品變成要繳交2400元,必須趕快處理完畢,便指示我到ATM去作取消的動作,於是我上當了。


過程是這樣的:

晚上8點我接收大陸口音(怪異點:其實電話訊號非常不清楚,我也聽了好久,其實不是很確定)的PCHome客服人員(來電顯示+0227040999,這隻是詐騙電話喔)解釋說我交易資料因為公司伺服器更新失誤所以單筆匯款變成12期匯款,原本交易金額200元便要付12期變成2400元,而我上次的確在PCHome購物時發生匯款錯誤的動作,而稍微相信。

他與我確認中華郵政的客服電話(怪異點:根本就不需要跟我確認,他只是要仿造電話而已)之後,說他要跟中華郵政確認完之後再由中華郵政人員打電話給我。

稍後果然有中華郵政客服專線0423542030來電(怪異點:其實來電號碼可以偽造,只是當時我不知道),叫我去附近ATM作餘額查詢。我想說餘額查詢也不是轉帳,他說要馬上跟我確認,於是我就急忙地衝到附近的ATM去處理。查完餘額之後,他開始跟我確認經辦機號(ATM的編號),並告訴我地址,以讓我信服他其實跟ATM有連線(怪異點:其實這上網查得到經辦機號,那不需要跟ATM連線),然後跟我確認個人資料(怪異點:都外洩了吧),並強調他並不是詐騙集團之類的。

然後他指示我操作ATM,一開始就用跨行轉帳,我有意識到這是詐騙手法,於是很仔細地跟他再確認交易資料跟輸入的資料,他指示我操作的帳號、金額什麼的,都是錯誤的資料,他說那是內部操作。到此為止,都是以往聽過詐騙的手法,我也中斷了好幾次操作,他一直催促我,情急之下我也越來越沒有戒心,想趕快把他弄完回去趕程式,也累了。

最後一次他就用存簿轉帳,而且輸入了PCHOME交易編號(怪異點:其實是存戶帳號,仔細想想PCHome的編號應該不會都是數字),金額則輸入29999密碼(怪異點:這是非約定轉帳上限3萬元少一元),然後匯出後他告訴我連線錯誤,然後說到12點就會恢復正常,叫我別緊張,他現在馬上修正,就掛斷電話。

我馬上打同一隻電話0423542030到中華郵政,他說我被詐騙了,請打165反詐騙電話去報案。我跟165報案完畢,就請浚學弟陪我一起到政大前面的文山分局報案,作筆錄、登記拿三聯單。

總結以上,反詐騙的重點在於:

  1. 不管怎樣都跟165反詐騙電話確認一下吧!
  2. 應該要你打過去跟他確認,他就沒辦法用來電顯示修改器了。.
  3. 不要急,其實這種東西都沒這麼急的,多多跟別人確認確認吧。
  4. 朋友請阻止認識的人不要這樣做,下次有人遇到帳戶問題的,我會第一時間打電話阻止他,順便卡詐騙電話來電。

反正自己笨,也沒什麼好反駁的。就這樣吧。

題外話,被詐騙之後中華電信又來電說我電話費沒繳交,我去電跟客服人員確認之後發現真有此事,但是已經申請延期,所以不必繳。真是麻煩呢。

(more...)

我回來了,我又走了

布丁布丁吃布丁

0 Comments

我回來了,我又走了

2009-10-09-251

教育部全國通識網到中南部舉行公開說明會,而10/8這天來到了台中逢甲,準備10/9將在逢甲大學舉行的中區說明會。台中逢甲夜市一向是十分有名的,既然來了當然是要來逛逛囉。

「熟的人帶路。」同事對我這個台中人這樣說,我有點尷尬地回他道:「其實,我也不知道這裡有什麼好吃的。」

我不太會玩,也不太會分辨美食,大概是因為多少抱持著「不要多花錢在這些吃吃喝喝的玩樂上」的傳統價值觀的關係,「這邊哪裡好玩?有什麼好吃的?」我大概都是一問三不知。

但是,我可以說的是另一種事情……

「這家馬鈴薯泥是以前我朋友帶我來吃過的。」

「這條街以前我跟我朋友來的時候,都是肩靠肩地前進呢。」

「逢甲大學那棟體育館,以前我大學繳交志願卡的地點就是在那邊。」

「我妹很常來逛逢甲夜市喔。」

……諸如此類的事情,都是回憶。

對我來說,比起美食、好玩的事物,回憶有趣多了。

(more...)

製作VirtualBox 3.0.6自動安裝檔

布丁布丁吃布丁

製作VirtualBox 3.0.6自動安裝檔

image

VirtualBox是一個虛擬機器的軟體,我喜歡用他來架設測試用的機器,以及快速安裝KohaDSpace。然而VirtualBox安裝步驟多,我希望能夠簡化這個程序,因此開始研究起自動安裝的方法。(此處使用的是VirtualBox 3.0.6,自由軟體)

AutoIT,可以script(腳本檔)程式來控制你電腦中任何操作,甚至臨時建立表單、問答視窗,都可以作到。他也常被用來作為自動安裝的用途,也包括了自動安裝VirtualBox。(此處使用的是AutoIT V3)

修改了左又天撰寫的自動安裝script,我也利用IconsExtract抽取出VirtualBox的icon檔案,接著就可以利用WinRAR來製作自我解壓縮檔。(此處我使用的是3.61中文版)

最後的結果,就放在此處讓人下載:

另外放上我改過的AutoIT Script 檔案,但是最後的網卡安裝並沒有寫得很好,請各位先進多多指教:

Opt("WinWaitDelay",100)
Opt("WinTitleMatchMode",4)
Opt("WinDetectHiddenText",1)
Opt("MouseCoordMode",0)
RUN("VirtualBox.exe")
WinWait("Sun VirtualBox Setup","The Setup Wizard wil")
If Not WinActive("Sun VirtualBox Setup","The Setup Wizard wil") Then WinActivate("Sun VirtualBox Setup","The Setup Wizard wil")
WinWaitActive("Sun VirtualBox Setup","The Setup Wizard wil")
Send("{ALTDOWN}n{ALTUP}")
WinWait("Sun VirtualBox License Agreement","I &accept the terms ")
If Not WinActive("Sun VirtualBox License Agreement","I &accept the terms ") Then WinActivate("Sun VirtualBox License Agreement","I &accept the terms ")
WinWaitActive("Sun VirtualBox License Agreement","I &accept the terms ")
ControlFocus("Sun VirtualBox License Agreement", "", "Button2")
Send("{ALTDOWN}n{ALTUP}")
WinWait("Sun VirtualBox Setup","")
If Not WinActive("Sun VirtualBox Setup","") Then WinActivate("Sun VirtualBox Setup","")
WinWaitActive("Sun VirtualBox Setup","")
Send("{ALTDOWN}n{ALTUP}")
sleep(1000)
ControlFocus("Sun VirtualBox Setup", "", "Button2")
Send("{space}")
Send("{ALTDOWN}n{ALTUP}")
WinWait("Sun VirtualBox ","Installing the Sun V")
If Not WinActive("Sun VirtualBox ","Installing the Sun V") Then WinActivate("Sun VirtualBox ","Installing the Sun V")
WinWaitActive("Sun VirtualBox ","Installing the Sun V")
Send("{ALTDOWN}y{ALTUP}")
WinWait("Sun VirtualBox Setup","")
If Not WinActive("Sun VirtualBox Setup","") Then WinActivate("Sun VirtualBox Setup","")
WinWaitActive("Sun VirtualBox Setup","")
Send("{ALTDOWN}i{ALTUP}")
WinWait("軟體安裝","繼續安裝這個軟體會在")
If Not WinActive("軟體安裝","繼續安裝這個軟體會在") Then WinActivate("軟體安裝","繼續安裝這個軟體會在")
WinWaitActive("軟體安裝","繼續安裝這個軟體會在")
Send("{ALTDOWN}c{ALTUP}")
WinWait("軟體安裝","")
If Not WinActive("軟體安裝","") Then WinActivate("軟體安裝","")
WinWaitActive("軟體安裝","")
Send("{ALTDOWN}c{ALTUP}")
WinWait("軟體安裝","")
If Not WinActive("軟體安裝","") Then WinActivate("軟體安裝","")
WinWaitActive("軟體安裝","")
Send("{ALTDOWN}c{ALTUP}")
WinWait("硬體安裝","您正要為這個硬體安裝")
If Not WinActive("硬體安裝","您正要為這個硬體安裝") Then WinActivate("硬體安裝","您正要為這個硬體安裝")
WinWaitActive("硬體安裝","您正要為這個硬體安裝")
Send("{ALTDOWN}c{ALTUP}")
WinWait("硬體安裝","您正要為這個硬體安裝")
If Not WinActive("硬體安裝","您正要為這個硬體安裝") Then WinActivate("硬體安裝","您正要為這個硬體安裝")
WinWaitActive("硬體安裝","您正要為這個硬體安裝")
Send("{ALTDOWN}c{ALTUP}")
Sleep(10000)
Send("{ALTDOWN}c{ALTUP}")
Sleep(3000)
Send("{ALTDOWN}n{ALTUP}")
WinWait("Sun VirtualBox Setup","Start Sun VirtualBox")
If Not WinActive("Sun VirtualBox Setup","Start Sun VirtualBox") Then WinActivate("Sun VirtualBox Setup","Start Sun VirtualBox")
WinWaitActive("Sun VirtualBox Setup","Start Sun VirtualBox")
Send("{SHIFTDOWN}{TAB}{SHIFTUP}")
Send("{SPACE}")
Send("{ALTDOWN}f{ALTUP}")

參考來源

[教學] 封裝AutoIt自動安裝程式 - 軟件討論區 - SUM-HK論壇提供/新聞/娛樂/數碼/音樂/電影等資訊~~ - Powered by Discuz! . Retrieved October 5, 2009, from http://sum-hk.marlito.com/redirect.php?tid=760&goto=lastpost.

VirtualBox 3.0.6 一鍵安裝 完整封裝 圖文教學(Autoit) ( 彈指瞬間 - 社群文章 ). . Retrieved October 5, 2009, from http://itgroup.blueshop.com.tw/moan/it_club?n=convew&i=12488.

(more...)

JAVA寄信問題「HELO requires domain address」的解決方法

布丁布丁吃布丁

JAVA寄信問題「HELO requires domain address」的解決方法

image

當我利用VirtualBox架設虛擬機器時,會發現沒辦法正常地使用註冊信的功能。這是因為虛擬機器內部的domain name並不是其他domain name server認可的名稱,只是我測試用的名字。此時可以自行在伺服器當中新增此domain name,對應到127.0.0.1,也就是本機端,就可以解決此問題。

以下詳述這個問題的發生與解決過程。

虛擬機器中DSpace的郵件設定
##### Email settings ######

# SMTP mail server
mail.server = 127.0.0.1

# SMTP mail server authentication username and password (if required)
# mail.server.username = myusername
# mail.server.password = mypassword

# SMTP mail server alternate port (defaults to 25)
mail.server.port = 25

# From address for mail
mail.from.address = dspace-noreply@dspace-dlll.nccu.edu.tw

# Currently limited to one recipient!
feedback.recipient = dspace-help@dspace-dlll.nccu.edu.tw

# General site administration (Webmaster) e-mail
mail.admin = dspace-help@dspace-dlll.nccu.edu.tw

必須說明到,上述設定當中的「dspace-dlll.nccu.edu.tw」完全沒有註冊在任何domain name server當中。因此執行時就會發生錯誤。

認不出domain name的錯誤訊息

image

在此設定當中進入DSpace的使用者註冊時,就會發生錯誤。我們來到DSpace的記錄檔當中看看,預設位置在「[dspace]/log/dspace.log」,可以用文字編輯器來開啟。

錯誤訊息如下:

2009-10-02 23:58:27,828 INFO  org.dspace.app.webui.servlet.RegisterServlet @ anonymous:session_id=29633B32BF10EEEF95FCF4DC71B5C7FD:ip_addr=10.0.2.2:sendtoken_register:email=puddingchen.35@gmail.com
2009-10-02 23:58:30,669 INFO  org.dspace.app.webui.servlet.RegisterServlet @ anonymous:session_id=29633B32BF10EEEF95FCF4DC71B5C7FD:ip_addr=10.0.2.2:error_emailing:email=puddingchen.35@gmail.com
javax.mail.MessagingException: 501 5.0.0 HELO requires domain address

        at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1363)
        at com.sun.mail.smtp.SMTPTransport.helo(SMTPTransport.java:838)
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:375)
        at javax.mail.Service.connect(Service.java:275)
        at javax.mail.Service.connect(Service.java:156)
        at javax.mail.Service.connect(Service.java:105)
        at javax.mail.Transport.send0(Transport.java:168)
        at javax.mail.Transport.send(Transport.java:98)
        at org.dspace.core.Email.send(Email.java:362)
        at org.dspace.eperson.AccountManager.sendEmail(AccountManager.java:296)
        at org.dspace.eperson.AccountManager.sendInfo(AccountManager.java:256)
        at org.dspace.eperson.AccountManager.sendRegistrationInfo(AccountManager.java:101)
        at org.dspace.app.webui.servlet.RegisterServlet.processEnterEmail(RegisterServlet.java:287)
        at org.dspace.app.webui.servlet.RegisterServlet.doDSPost(RegisterServlet.java:202)
        at org.dspace.app.webui.servlet.DSpaceServlet.processRequest(DSpaceServlet.java:147)
        at org.dspace.app.webui.servlet.DSpaceServlet.doPost(DSpaceServlet.java:105)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)

你可能會發現到IP很奇怪,因為這是VirtualBox配給的內部IP。

這段記錄的重點在於錯誤訊息「HELO requires domain address」,代表的意思是HELO認不出來「dspace-dlll.nccu.edu.tw」對應到哪台主機。

設定伺服器當中的domain name對照表

用指令列來修改「/etc/hosts」,增加下列設定:

127.0.0.1       dspace-dlll.nccu.edu.tw dspace-dlll

然後得重新啟動網路,指令是「/etc/init.d/network restart」

或著你也可以用圖形介面來設定。

image

先進入「網路」當中。

image 

切換到「主機」那一頁,然後按「新增」。

image

設定位址、要對應的主機名稱跟其別名。

image

最後記得要儲存才會生效。


以上,大功告成。用虛擬機器果然是比較麻煩了一些,不過也可以藉此在精進網路知識就是了。

(more...)

VirtualBox擴大CentOS的LVM硬碟筆記

布丁布丁吃布丁

VirtualBox擴大CentOS的LVM硬碟筆記

image

前言

VirtualBox使用虛擬動態映像檔(vdi),VDI的好處在於你能夠保留最大到2TB的擴增空間,但卻又只會佔用實際儲存的資料。具體來說,vdi可以讓GuestOS(在此指虛擬機器)當中讀取起來有到2TB(大概2024GB)的硬碟,但在HostOS(在此指實際安裝虛擬機器的本機端)中只會佔用vdi中實際儲存的檔案,可能只需要23GB。當你發現VDI的大小超過HostOS所能允許的空間的話,就直接更換VDI儲存位置,放在更大的硬碟空間裡面就行了,非常方便。

問題敘述

之前在建立VDI時的錯誤決定,讓他的實體空間只有8GB,這對於我系統的要求是不夠的。所以得想辦法讓他擴大才行。

HostOS是Windows XP,GuestOS則是Linux CentOS 5 final。

GuestOS的硬碟在一開始安裝CentOS時都被切割成LVM(Logical Volume Manager)格式——而我後來才知道,這真是個麻煩的格式。因此調整大小的步驟就會多了很多繁雜的步驟。

那麼,接下來我就一步一步地去記錄我是怎麼調整VDI大小的吧。

擴大VDI虛擬大小空間

一、取得Clonezilla

VirtualBox並沒有直接擴大VDI的功能,網路上大部分的教學都是使用GPart Live CD來複製硬碟分割。但很遺憾的,GPart沒辦法讀取LVM (是的,真的很煩人),所以我採用國人自製的自由軟體Clonezilla Live

  • image下載Clonezilla Live,請選擇iso檔案下載,或是下載zip之後解壓縮成為iso。

image

在VirtualBox當中利用掛載光碟映像檔的方式將Clonezilla掛載上去之後,就可以利用Clonezilla開機來複製硬碟資料。

二、建立新的VDI硬碟

我建立一顆新的VDI硬碟,這次把大小提昇到極限值2TB。然後把舊的8GB VDI硬碟跟2TB VDI硬碟都掛到同一台虛擬機器上。

三、使用Clonezilla複製硬碟

我利用Clonezilla將舊硬碟複製到新硬碟去,細節我沒有特別記錄。但是必須讓它保持原本的分割區,不要放大分割區。因為對LVM來說,放大分割區並沒有意義。整個複製作業大概花了我30分鐘。

複製完成之後關掉虛擬機器,卸載就VDI硬碟跟Clonezilla,再以新硬碟開啟,可以成功啟動。而且利用「fdisk -l」的指令查詢,會發現到除了原本的分割區之外,還有很多空間可以利用。

四、擴大LVM的空間

鳥哥的fdiskLVM教學中還蠻詳細的,在此我僅節錄指令步驟:(我的LVM主要空間是「/dev/VolGroup00/LogVol00」,VDI硬碟代號是「/dev/hdb」)

  1. 進入fdisk,用「n」新增分割,選擇「p」主分割,編號為「3」(因為我原本系統中1為boot,2為其他空間),然後指令「w」建立分割並離開。
  2. 使用「partprobe」讓核心重新抓取一次硬碟分割表,成功建立第三個分割,代號是「/dev/hdb3」。
  3. 用「pvcreate /dev/hdb3」建立新的PV,然後用「pvscan」檢查。
  4. 用「vgextend /dev/VolGroup00/LogVol00」來加大VG。
  5. 用「vgdisplay」檢查,注意訊息中會有類似「Free  PE / Size       16486 / 2 TB」(正確數字我有點忘了),那個「16486」就是待會可以新增的空間。
  6. 用「lvresize –l + 16486 /dev/VolGroup00/LogVol00」加大空間。
  7. 用「resize2fs /dev/VolGroup00/LogVol00」把LV的容量擴大到整個檔案系統可以允許的上限。需要耗費一段時間,此時VDI實際大小也會逐漸加大。
  8. 完成後可以用「df -h」來檢查是否有真的擴大了。

到目前為止,儘管VDI的虛擬大小總算擴大到2TB了,但實體大小卻也從7GB增大到23GB。進去虛擬機器中查詢使用量,卻也只有5GB多的用量而已。我猜可能是2TB所需要得區塊量(blocks)比較多,所以也佔去了不少空間。這就跟「買了80G硬碟,實際上可用只有75G」的道理一樣。詳細的原理請回去查查「作業系統」的課本吧。

即使如此,現在VDI的實際大小還是太大了,我們下一節就來談談如何減少VDI的實體大小。

縮小VDI實際檔案大小

image

VirtualBox的VDI的實際大小似乎是取決於虛擬機器當中動到的區塊量。也就是說,即使你在虛擬機器當中刪除了檔案,但VDI的實際大小並不會因此減少。因此VDI只會越用越多,並不會縮小。

在此有兩種方法可以使用:VirtualBox的VBoxManage提供了「modifyhd」來清除被設為0的區塊以壓縮VDI的實際大小;或用檔案壓縮工具7-zip來減少檔案大小。以下一一介紹作法。

VBoxManage的modifyhd

自由流浪的心靈世界中介紹縮小VirtualBox VDI檔案的作法十分詳細,我參考其他資料之後整理的大致上步驟如下

  1. 先刪除虛擬機器裡面不需要的檔案。
  2. 安裝「zerofree」這個工具,RPM Search裡面可以找到給Red Hat/CentOS的版本。RPM安裝方法可以參考鳥哥,指令是「rpm –ivh [*.rpm]」。
    安裝完畢之後,可以用「/usr/sbin/zerofree」來使用他
  3. 重新啟動虛擬機器,進入CentOS的單機模式(single user mode)。具體作法是開機時按esc進入選單,按e編輯選單內容,再選擇有「kernal」那一項按e編輯開機參數。進入指令列之後再原有指令最後加上「singel」,然後按b開機即可。
  4. 執行init 1 (還沒去查這到底是什麼功能)
  5. 將硬碟以ro模式掛載:mount -n -o remount,ro -t ext3 /dev/VolGroup00/LogVol00 /
  6. 執行zerofree:/usr/sbin/zerofree /dev/VolGroup00/LogVol00。他需要花上好長一段時間來作這個動作,請慢慢等待。
  7. 完成zerofree之後關閉虛擬機器。
  8. 在HostOS底下執行壓縮指令:VBoxManage modifyhd 你的VDI位置.vdi compact。當然,VBoxManage的執行位置你也要修改成你安裝VirtualBox的位置才行。
    整個壓縮過程大概耗費2小時完成。

完成之後,原本在虛擬機器中刪除檔案所減少的空間,也讓VDI實際大小減少了。

7-zip壓縮

image 使用modifyhd之後讓VDI的實體大小從23GB減到22GB,但這大小對我來說仍然是過大的負荷。當我架設完虛擬機器而不需要執行時,可以考慮採用7-zip之類的壓縮軟體來壓縮檔案。我選擇使用7-zip Portable,一來這是開放原始碼的自由軟體;二來7-zip可以壓縮超過2GB大小的檔案,而且壓縮比例又很高,儘管比較需要花時間;最後Portable則是不需要安裝即可執行的版本,下載下來馬上就可以使用。

利用7-zip壓縮了22GB的VDI檔案之後,我取得了2GB的壓縮檔,成果讓我非常滿意。


一邊找尋資料、一邊實際操作,然後又來不斷修改這篇Blog。這一篇是我大概一天多的成果,又是一篇用時間跟精力換來的筆記記錄,還好最後有達到我想要的成效,真是可喜可賀。

(more...)