:::

解決Proxmox VE KVM虛擬機器硬碟與光碟常見問題 / The solution for KVM virtual machine’s hard drive and ISO mount misconfiguration in Proxmox VE

解決Proxmox VE KVM虛擬機器硬碟與光碟常見問題 / The solution for KVM virtual machine’s hard drive and ISO mount misconfiguration in Proxmox VE

proxmox-logo

最近我們在大規模地遷移Proxmox VE中的虛擬機器,其中KVM類型的虛擬機器在轉移時常常會遇到許多各種不同的問題,像是硬碟設定或是光碟設定錯誤。我將這些問題的處理方式記錄如下。

When I migrated KVM virtual machines at Proxmox VE, I encountered many problems, such as hard drive or CD/DVD drive misconfigured. This article I describe the solutions for those problems.


硬碟驅動錯誤 / Hard Drive Misconfigured

Image 3

最常見的就是硬碟驅動配置錯誤。有段時間我常常先在VirtualBox建立虛擬機器,再轉移到Proxmox VE。這種轉移方式通常只是上傳最重要的硬碟映像檔,像是vmdk或是qcow2 (但是在VirtualBox上運作qcow2的效率其差無比就是了)。

從VirtualBox到Proxmox VE的配置 / Configuration From VirtualBox to Proxmox VE

如果只是轉移硬碟映像檔的話,必須特別注意他們的硬碟驅動設定必須一致。如果當初建立的時候使用IDE,在轉移之後建立也就必須使用IDE。

2014-03-04_063543

舉例來說,這是VirtualBox的操作介面,你可以看到這台虛擬機器的硬碟是被設定成SATA

Image 5

但是在Proxmox VE上,這臺虛擬機器的硬碟卻被設成了IDE。在Windows XP或是Linux卻使用LVM的情況下,往往會造成開機失敗。

Image 6

因此,在建立虛擬機器的硬碟時,必須特別注意其使用的硬碟驅動器。

解決方式:修改硬碟控制器 / Solution: Modify Hard Drive Controller

如果你已經將硬碟安裝成錯誤的硬碟驅動器,那Proxmox VE網頁介面上是無法直接修改。我建議是使用SFTP直接操作伺服器的檔案系統,作法如下:

  1. 先以正確的硬碟驅動器新增一個硬碟映像檔,檔案大小不拘。
  2. 以SSH登入Proxmox VE:預設連接埠22。
  3. 進入KVM的硬碟擺放位置:以VMID為260的虛擬機器為例,路徑位置就是/var/lib/vz/images/260
  4. 新建立的硬碟映像檔檔名通常會是「vm-260-disk-2.vmdk」,而用錯誤方式建立的硬碟映像檔通常會是「vm-260-disk-1.vmdk」。
  5. 記住新映像檔檔名,把新的硬碟映像檔刪除,再把舊的硬碟映像檔換個名字
  6. 回到Proxmox VE網頁介面,刪除舊硬碟映像檔的設定,只留下新建立正確的硬碟設定

這樣就完成了。


CD/DVD光碟掛載錯誤 / CD/DVD Drive ISO Mount Misconfigured

Image 7

前一種情況大多是只轉移硬碟映像檔的時候,這一種情況則是使用Proxmox VE的備份功能vzdump匯出虛擬機器之後、再匯入新的Proxmox VE的情況。細節作法可以看我寫的另一篇「Proxmox VE用備份(vzdump)與還原(restore)複製虛擬機器」。

使用vzdump的時候,虛擬機器的設定會鉅細靡遺地被保留,並還原到新的虛擬機器環境中。問題是在於新的環境中可能使用的Storage ID(儲存空間名稱)不一樣,就會導致無法正常開機的問題。

Image 8

以上圖為例,當Storage設定錯誤時,發生錯誤訊息就會是:

TASK ERROR: storage 'proxmox-nas' does not exists

這是因為這個Proxmox VE虛擬機器環境下沒有名為「proxmox-nas」的Storage的緣故。

解決方式:取消掛載映像檔 / Solution: Unmount ISO

Image 9

解決方式很簡單,就是把掛載的映像檔取消掉就好了。

  1. 指定該硬碟,按下Edit
  2. 設定Do not use any media,或是重新掛載正確的ISO映像檔,按下OK即可

這個問題警惕了我們,如果虛擬機器設定完畢之後,記得取消掛載安裝時使用的映像檔設定。


結論:不要害怕使用虛擬機器 / Conclusion: Embrace Virtual Machine

每次遇到虛擬機器的各種問題,我常常聽到的抱怨都是:「為什麼要用這種東西?你就不能裝在實體機器上嗎?」就我個人來看,這種抱怨是一種誤解。

如果你仔細看看這篇敘述的兩種問題,其實是很容易類比到實體機器上──就像是拿著SATA線去接一顆IDE硬碟,或是在光碟機裡面指定放進一片不存在的光碟。儘管實體機器操作中,有些常識的網管可能不會卡在這麼奇怪的問題上,但這的確是可以從實體機器類推到虛擬機器上的情況。

我想說的是,其實虛擬機器的設定跟實體機器沒有這麼大的差別,但比實體機器設定更為容易。以硬碟控制器的問題來說,實體機器的情況可能是一顆舊的IDE硬碟要裝到新的伺服器上,如果伺服器只剩下SATA線,那要裝IDE硬碟還必須搭配張SATA to IDE的轉接卡才能使用,安裝時還得考量到轉接卡阻礙線材空間等問題,處理起來挺費工夫的。但是虛擬機器只要設定幾項參數即可完成調整,方便許多。

虛擬機器除了有助於網管之外,快速還原的能力還能夠用於程式開發上。在「成为一个PHP专家:缺失的环节」一文中建議PHP時使用虛擬機器建立個Linux,以方便隨時重新開始或還原到程式開發的某個狀態。這些都是非常有用的功能。

因此,我會對VirtualBox、Proxmox VE、OpenVZ、KVM等多種開放自由的技術抱持最高的敬意,並繼續擁抱虛擬機器。

(more...)

不太好用的Vento MW-96 E指鼠 / The problem of Vento MW-96 wireless mouse

布丁布丁吃布丁

不太好用的Vento MW-96 E指鼠 / The problem of Vento MW-96 wireless mouse

DSC_1346

為了讓筆電帶來帶去時不要讓體積過大,我特別挑了一隻小型的無線滑鼠來作為筆電的配件。這種小隻好攜帶的滑鼠是我長久以來關注的重點,不論是前一代的e指鼠或是這一代的Vento MW-96都讓我很心動,網路上也看不太到什麼負面評價。後來決定購買造型比較好看的Vento MW-96 E指鼠(以下簡稱MW-96)。

DCAN2G-A61784839000_4f5dc6dc6bc3b

MW-96大概是在2010年上市,上市至今已經很難找到購買的地方,我是在露天拍賣上找到賣家的。購買時上網看到的大多是廣告文宣,實際使用報告並不多,但是買來之後一陣子,我才發現MW-96最大的問題:材質

DSC_1347

上圖是最近放在包包一段時間之後的MW-96。體積小不好握、電池續航力大概只能擺包包擺個半個月,這都不是我在意的問題。問題是MW-96兩旁的黑色塑膠材質非常容易變質,容易變得黏黏的,沾滿各種污塵。這樣握起來感覺很差,手指一直感到黏黏的。

因此,激發我寫下這一篇負面評價的文章,警惕因為造型而想要購買的人,趕快打退堂鼓吧。

(more...)

修復Proxmox VE Cluster無法備份的問題 / Repair Proxmox VE Cluster cannot backup problem

修復Proxmox VE Cluster無法備份的問題 / Repair Proxmox VE Cluster cannot backup problem

2014-03-02_215010

最近我處理的Proxmox VE因為Cluster眾多功能異常,導致很多功能都無法正常使用。這次遇到的問題是備份時被鎖住的問題,解決方法是重新啟動Proxmox VE所有的服務,然後將該節點設為expected。

When Proxmox VE Cluster cannot work properly, the backup function maybe disabled,  due to permission is locked to read-only. This article describes how to repair this problem.


錯誤訊息 / Error Message

我在node(Proxmox VE Cluster中運作的一台伺服器,稱為node)名為「proxmox-master-c」為KVM類型的VMID 260虛擬機器進行備份。遇到的錯誤如下:

INFO: starting new backup job: vzdump 260 --remove 0 --mode snapshot --compress gzip --storage <STORAGE ID> --node <NODE>
INFO: Starting Backup of VM 260 (qemu)
INFO: status = stopped
INFO: update VM 260: -lock backup
INFO: unable to open file '/etc/pve/nodes/proxmox-master-c/qemu-server/260.conf.tmp.3682' - Permission denied
ERROR: Backup of VM 260 failed - command 'qm set 260 --lock backup' failed: exit code 2
INFO: Backup job finished with errors
TASK ERROR: job errors

關鍵在於紅字的地方。要備份時,Proxmox VE會寫一個暫存檔在虛擬機器設定檔的目錄,但是錯誤訊息顯示該目錄有權限問題,只能讀取不能寫入(read-only)。

為什麼被設定成只能讀取的權限了 / Why Permission is Read-only Permission?

這是因為Proxmox VE加入了Cluster中,並啟用了Proxmox Cluster file system (pmxcfs)。pmxcfs的特色其中有一項:

read-only when a node looses quorum

意思是,當Proxmox VE運作喪失了quorum元件時,Proxmox VE節點的虛擬機器設定會被轉換成read-only。儘管虛擬機器本身是可以正常運作的,但是卻不能進行任何設定,包括備份。因為權限備份被鎖起來了。

而這個問題另一篇Wiki中有敘述。簡單來說,因為Cluster異常,quorum無法順利讀取,讓整個Cluster中的node彼此之間無法正常連線,導致每個node都只能看到自己的運作狀態,這時候node就會自動鎖起來。

警告 / Warning

以下方法是我摸索解決方案的一個過程,很多細節我不清楚,有幾台node可以如此解決,可是有幾台不行。我還沒有了解整個原因細節,在此只是記錄一下目前的解決方法。

Wiki的解決方式 / The solution from Wiki

根據wiki的介紹,最簡單的方式是在有問題的node上輸入指令:

# pvecm expected 1

但是當我要這樣做的時候,卻又有另一個錯誤訊息發生,告訴我cman並沒有正常啟動。我嘗試想要用「service cman start」,但是卻依然不能執行「pvecm expected 1」。

我的解決方式 / My solution

因此我決定參考Re-installing a cluster node的方法,先關掉所有相關服務,再開啟相關服務,最後再執行expected指令。我將這些指令建置成了expected.sh,可以從GitHub上下載,檔案內容細節如下:

#!/bin/sh

service pvestatd stop
service pvedaemon stop
service cman stop
service pve-cluster stop

service pve-cluster start
service cman start
service pvedaemon start
service pvestatd start

pvecm expected 1

執行的時候依然會遇到很多問題,quorum等待過時(time-out)的問題依然沒有改變,如下圖:

2014-03-02_215458

儘管如此,執行完之後,有一定機率可以正常啟用整個Cluster。

其他注意事項 / Other Note

說是一定機率的原因是,有時候可能要重開機之後再執行一次expected.sh。但是這不一定每次都會成功,我試了好幾台,結果都不一樣。必須注意的是,重開機之後,虛擬機器不會正常地Start on boot,需要手動開啟。

其中有幾台因為網路交換器出了問題(ASUS的,真是堅若磐石)而導致quorum無法正常運作。更換交換器之後就正常運作了。

目前我手邊已經沒有需要做這樣修復的node,所以我接下來就不會繼續深入探究了。就做到這邊吧。

(more...)

資訊視覺化的演進 / The challenge of information visualization evaluation

資訊視覺化的演進 / The challenge of information visualization evaluation

image

書目 / Bibliography

Plaisant, C. (2004). The Challenge of Information Visualization Evaluation. In Proceedings of the Working Conference on Advanced Visual Interfaces (pp. 109–116). New York, NY, USA: ACM. doi:10.1145/989863.989880

摘要 / Abstract

這一篇2004年文章的介紹了資訊視覺化(Information visualization)的定義、特色以及理論基礎,並描述未來資訊視覺化發展的方向,包括人類與人工智慧的多方互動(Mixed-Initiative Interaction)、合作式與社群網絡的視覺化(Collaborative and Social Visualization)、演算法的改進等等。

其中個人覺得最有意思的地方是討論資訊視覺化跟科學視覺化(scientific visualization)的差異,並點出了資訊視覺化的目標「洞見」(insight)的意涵。

閱讀筆記 / Reading Note

(Google Drive, OneDrive, Bot.net)

(more...)

Proxmox VE集叢重新加入節點 / Proxmox VE Cluster re-add (decluster) node

布丁布丁吃布丁

Proxmox VE集叢重新加入節點 / Proxmox VE Cluster re-add (decluster) node

proxmox_logo2configuration2

因為原本Proxmox VE集叢(Cluster)中有些節點(node)故障了,我想要移除該節點再重新加入,可是加入的手續卻沒這麼單純。參考sigxcpu的說明,我將作法摘要再這篇供大家參考。

This article will introduce how to re-add node in Proxmox VE Cluster.


不能直接用pvecm操作 / pvecm delnode & add not work

image

原本我的想法是先做delnode,再將自己加入。原本想像的指令如下:

pvecm delnode <self-node>

pvecm add <another-node>

可是實際上,雖然delnode不會顯示錯誤訊息,但是卻也無法順利從集叢中移除自己的節點。而且在用add加入節點時,也會發生以下錯誤訊息:

authentication key already exists

重新加入節點的腳本 / Script for Re-add node

在Proxmox論壇找了一下,才發現sigxcpu寫的解法

Step 1. 移除節點設定 / Delete Cluster Configuration (Decluster)

首先要停止服務、移除相關設定,然後重新開機。我撰寫了腳本上傳到github,你也可以直接用此腳本來操作。

decluster.sh檔案內容如下:

#!/bin/bash

service cman stop
killall -9 corosync cman dlm_controld fenced
service pve-cluster stop
rm /etc/cluster/cluster.conf
rm -rf /var/lib/pve-cluster/* /var/lib/pve-cluster/.*
rm /var/lib/cluster/*
reboot
Step 2. 重開機後加入節點 / Add to Cluster

重開機之後再正常執行加入節點的指令即可:

pvecm add <another-node>

這個節點必須是已經是目標集叢中的一員,可以用IP指定。大致上這樣就完成了。


小結:隱憂? / Conclusion: Something Strange…

今天下午我按照這個作法重新加入節點之後,集叢中的其他節點就無法正常運作了,整個集叢無法連線,但各別機器可以正常提供服務。

我現在還不清楚原因為何,是不是跟我重新加入節點有所相關。總之之後有其他發現的話,我會再介紹其他解決的方法。

(more...)

WordPress定期管理debug.log / Reducing oversized WordPress’s debug.log

布丁布丁吃布丁

WordPress定期管理debug.log / Reducing oversized WordPress’s debug.log

image

WordPress的debug.log會在不知不覺的時候無限增加。本文章介紹如何定期壓縮debug.log以避免容量暴增。

In WordPress, it's very easy to have a oversized debug.log. This article is aim to reduce the oversized debug.log in Linux.


前言 / Profile

最近我在管理WordPress的時候,赫然發現WordPress的目錄異常巨大,但是明明沒有上傳什麼大型檔案。查看之下才發現是debug.log的異常檔案過多,該檔案的路徑位於:

[WordPress安裝路徑]/wp-content/debug.log

網路上查了一下,發現大家並沒有什麼徹底解決該問題的方法。所以我決定自己撰寫Linux的Shell Script來壓縮debug.log。

解法流程 / Solution

我的解法如下:

  1. 配置compress_debug.log.sh腳本檔。
  2. 每天早上1點執行腳本檔。
  3. 腳本檔檢查debug.log容量是否大於100MB。
  4. 如果大於100MB,則壓縮到archive_debug_log目錄底下,依照日期命名,例如「debug.log-2014-02-18.zip」。然後清空debug.log。

以下介紹安裝的流程。

Step 1. 配置compress_debug.log.sh腳本檔 / Setting compress_debug.log.sh

腳本檔已經上傳到GitHub了,請從此連結下載。該檔案放置路徑如下:

[WordPress安裝路徑]/wp-content/compress_debug.log.sh

接著開啟該檔案的執行權限:

# chmod +x compress_debug.log.sh

你可以執行該檔案,看看archive_debug_log底下是否有出現備份檔案。

Step 2. 設置排程 / Setting crontab

修改排程檔案:

# vim /etc/crontab

加入以下設定

0 1 * * * root [WordPress安裝路徑]/wp-content/compress_debug.log.sh

其中的1就是指早上1點執行。


結語 / Conclusion

最近常常在處理備份檔的事情。這次備份腳本跟以往最大的不同在於加入了檔案大小的測試。很多每日備份檔案的行程,其實檔案大小並沒有大到值得備份的程度。這次加入了測試檔案大小來減少備份檔案的數量,也算是比以前更進步一些吧。

(more...)

Acer Aspire S7電池異常復原方法 / Acer Aspire S7 Battery Failure Recovery

布丁布丁吃布丁

Acer Aspire S7電池異常復原方法 / Acer Aspire S7 Battery Failure Recovery

20140217_221405

Acer Aspire S7(簡稱S7)最近電視廣告打很大,可是過保固之後就整個怪怪的。

我的S7最近常常關機後無法正常開機。即使電量充飽了,可是按下電源鍵卻仍無反應。後來發現是電池異常的緣故,要做電池重置的動作才能正常開機。

image

電池重置作法如下:

  1. 拔掉S7電源線,讓S7由電池供電
  2. 按下S7的電池重置按鈕。重置按鈕在底部風扇旁邊。如上圖紅圈圈。
  3. 按著10秒左右再拿出來。
  4. 按下S7電源鍵。如果順利重置就能夠正常開機。

20140217_222448

圈圈非常小,我是用鑰匙圈轉開之後才能戳進去,真的是非常麻煩。現在幾乎三天兩頭關機一次就會再起不能,必須要一直作電池重置的動作。哪天連電池重置都無效的話就得送修了吧。


以下附贈別人的S7遇到的問題:搖搖筆電。

我想應該也是電池的問題吧。

(more...)

OpenVZ掛載NFS的虛擬機器設定 / OpenVZ container configuration to mount NFS

OpenVZ掛載NFS的虛擬機器設定 / OpenVZ container configuration to mount NFS

image

如果要讓OpenVZ架設的Linux虛擬機器掛載NFS(Network File System),Host端必須先設定虛擬機器(container)的"nfs:on"。以下介紹詳細作法。

If you want to let OpenVZ container to mount NFS (Network File System), you have to enable "nfs:on" feature on host server first. Following is the details.


不能掛載NFS:mount.nfs: No such device / Mount NFS Error

image

如果NFS用戶端設定正確(可以參考鳥哥的NFS用戶端設定教學),可是仍出現錯誤訊息:(Debian上的)

mount.nfs: No such device

或是錯誤訊息:(CentOS上的)

mount: wrong fs type, bad option, bad superblock on 10.9.5.95:/raid0/data/_NAS_NFS_Exports_/email-km,
       missing codepage or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

這時候可能是因為OpenVZ尚未開啟NFS的功能的關係。

包括Proxmox VE在內,大部分OpenVZ虛擬機器(OpenVZ Container)在建立時都沒有開啟NFS的功能。如果要讓虛擬機器本身能夠掛載NFS目錄,請依照以下方法來開啟。

開啟虛擬機器的NFS功能 / Enable Container’s NFS Feature

Step 1. 將虛擬機器關機 / Shutdown Container

要進行設定之前必須先將虛擬機器關機。關機指令為:

# halt
Step 2. 進入Host端命令列 / Enter Host Shell

首先先進入Proxmox VE的網頁管理介面,預設連接埠為8006,必須用https進入。

image

登入之後,找到該虛擬機器的Host伺服器,進入右上角的「Shell」介面。

image

Proxmox VE提供了Java Applet連線的主控介面(console),可以在此直接以root身分操作Host端伺服器。

Step 3. 設定"nfs:on" / Setting "nfs:on"

接下來要照OpenVZ的說明設定虛擬機器。該機器的VMID若是101,那麼開啟NFS的指令如下:

vzctl set 101 --features "nfs:on" --save; vzctl start 101

image

設定完成之後,虛擬機器會一起啟動。

Step 4. 完成掛載設定

image

這時候再開啟虛擬機器,掛載NFS的時候,指令就能正常執行。


NFS掛載指令與設定 / NFS Mount Configuration

參考鳥哥的Linux私房菜中NFS客戶端的教學,OpenVZ要使用NFS,通常必須先做以下設定:

Step 1. 安裝nfs-common / Install nfs-common

Debian或Ubuntu系列請用apt-get安裝:

apt-get install nfs-common

CentOS或RedHat系列請用yum安裝:

yum install -y nfs*
Step 2. 測試NFS掛載指令 / Test NFS Mount Command

NFS的掛載位置必須參考NFS伺服器的設定。每一台NFS伺服器設定都不一樣,特別是現在各家NAS使用自家作業系統之後,提供的路徑千奇百怪,我在這邊卡了許久,後來升級NAS的韌體才知道NFS掛載路徑。

舉例來說,NFS伺服器設定如下:

  • IP網址:10.9.5.95
  • NFS的掛載路徑:/raid0/data/_NAS_NFS_Exports_/cluod-rstudio-2013
  • 本機的掛載路徑:/tmp/nfs(請預先用mkdir建立好該目錄)

那麼NFS掛載的指令就是:

mount -t nfs 10.9.5.95:/raid0/data/_NAS_NFS_Exports_/cluod-rstudio-2013 /tmp/nfs

試著執行看看。如果沒有任何訊息,那就是順利成功了。

Step 2-1. 錯誤: rpc.statd / Mount Error: rpc.statd

我在CentOS遇到以下錯誤訊息:

mount.nfs: rpc.statd is not running but is required for remote locking.

mount.nfs: Either use '-o nolock' to keep locks local, or start statd.

mount.nfs: an incorrect mount option was specified

那麼就必須先開啟rpcbind,指令為:

service rpcbind start

Step 2-2. 錯誤:mount.nfs: Connection refused / Mount Error: Connection refused

舊版本的CentOS會遇到這個問題。掛載時遇到的錯誤訊息如下:

mount.nfs: Connection refused

這版本的CentOS不是用rpcbind,而是用portmap。所以要先開啟portmap服務:

service portmap start

這樣就能夠正常掛載

Step 3. 開機自動掛載 / NFS Mount On Boot

修改 /etc/rc.local,加入剛剛測試成功的設定:

mount -t nfs 10.9.5.95:/raid0/data/_NAS_NFS_Exports_/cluod-rstudio-2013 /tmp/nfs

或是加上額外設定需要的「service rpcbind start」或「service portmap start」。

這樣就完成了。

(more...)

一小時的朋友 / One hour friends

布丁布丁吃布丁

一小時的朋友 / One hour friends

這個年假沒有幫到跳跳床的忙而只是在顧家,反而讓我懷念起之前寫的跳跳床打工的經驗。找了老半天才在噗浪中找出來,那我就在此備份一下吧:


時間:2012-01-28 15:24:51

 

這個年假如同往常一樣,我幾乎每天都在認識「一小時的朋友」。

 

***

 

「Hello~」瞪圓著的眼睛面對著打招呼的我,他一臉茫然。這是一位剛穿越氣墊床的越野叢林、準備爬階梯上到溜滑梯的四歲左右的小男孩。看他就這樣楞在那邊不接話,我就乾脆主動問他:「你知道怎麼爬嗎?」他看了看我,又看了看階梯,然後一整個身體撲上了階梯。

這種階梯類似繩梯,氣墊床本身是用帆布組成,而且軟趴趴的,所以小男孩撲上去倒也不會受傷。我看著他兩手抓著階梯的踏階,一階的高度大概是他的三分之二高,然後墊起腳尖、努力伸手想要抓到上面一階的階梯。伸了好久終於抓住了,他藉此攀爬了一階。但當他要在爬到更上層一階時,左腳一滑,他全身趴著階梯滑了下來。我趕緊用雙手扶住他,讓他站穩最下面的階梯。他仍然是一臉茫然,他不知道我是誰,也不知道到底要怎麼往上爬。

「我教你怎麼爬,來看著喔。」我扶著他的右手去抓著階梯旁邊的繩索,「抓緊右邊的繩繩。」他沒有回我,但是小小的右手確實地抓住了繩索。「然後是左邊的繩繩。」我一樣帶著他的左手抓住了階梯左邊的繩索。「就這樣,右邊、左邊、右邊、左邊,」我一邊扶著他,一邊指引他繼續往上爬,「繩繩抓得越高,你就越爬越高喔。」

小小的身體用上了全身的力氣,小男孩一階一階地往上攀爬。最後,終於坐上了階梯的頂端。「好棒喔,你成功了!」面對我的稱讚,他依然只是呆呆地看著我。「好,溜下去喔~」隨著我的話語,他也轉頭溜下滑梯,消失在我的視線範圍內。

 

***

 

過幾分鐘,小男孩穿越叢林來到了樓梯前。

 

「Hello~又看到你了。」「Hello!」他很開心地回應了我的問候,我想,這應該是溜滑梯魅力的效果。

這次他馬上抓住了繩索,兩三下就爬上了階梯。不過,「小心!」我又接住了腳滑的他,然後扶他爬上階梯。階梯頂端的他看著我,看起來十分期待待會溜下去的快感。「掰掰~」我對他揮揮手,「掰掰」他也笑著回應我,然後往另一邊溜了下去,伴隨著開心的大叫。

 

「Hello~我又看到你囉!」「Hello,嘻嘻嘻。」

過了幾分鐘,他又出現在我面前。而這次非常順利地爬上了階梯,然後「掰掰~」「叔叔掰掰~」地消失在另一端。

 

***

 

「Hello~你幾歲?」「5歲~」

 

「Hello~你要讀國小了嗎?」「幼稚園~」

 

「叔叔你有Angry Bird嗎?我有好多隻喔。」「真的喔,下次帶給我看吧。」

 

隨著見面次數越多,雙頰通紅的他越來越開心,而我們每次在攀爬階梯時的對話也越來越多。

 

***

 

不知道見了第幾次的時候,外面響起了來自櫃檯的廣播:

 

「手環上寫著10點30的小朋友,10點30的小朋友,你們的時間到囉,請到櫃檯剪票離開。」

 

他又是一臉茫然地看著我,我對他笑了笑,說:「來,可不可以讓我看看你的手環呢?」掀開他的左手袖子,綁在左手上、作為售票證明的手環上,有著黑色簽字筆寫的10:30。

「你的時間到囉,你去跟爸爸媽媽說。」「嗯。」他轉身打算從叢林離開,不過我拉住了他,跟他說「再溜最後一次吧?」他臉上綻放出了笑容,點點頭,然後一下子就爬上了階梯。

「叔叔掰掰~」他在階梯頂端叫我,一邊開心地揮著手。我也一樣,對他揮著手,笑著跟他說聲「掰掰」,並目送他溜下滑梯。
然後,我就再也沒有看到他穿越叢林來到階梯前了。

 

***

 

不過即使如此,

 

「Hello~是新來的呢。」下一位沒見過的小朋友很快地就出現在我面前。

 

而我又會微笑著問他:

 

「你會爬嗎?」

 

走了一位小朋友,我又很快地認識下一位。這就是我在年假時結交的,「一小時的朋友」們。

(more...)

回家

布丁布丁吃布丁

回家

DSC_0963

人家常說,「家家有本難念的經」。春節回家的時候,往往會聽到周遭朋友在抱怨回家所遇到的大小事。要嘛就是親戚嘮叨,老是在問交往、婚姻、工作、學歷;要嘛就是跟家人處不合,爸媽吵架、兄弟姊妹脾氣差;要嘛就是過年在家也一刻不得嫌,不光是打掃煮飯,還要去擺攤搶賺過年錢潮

要說的話,我回家的時候,也是有令我感到難過的事情。不過倒不是家人難相處、也不是討厭家事幫忙,而是生理上的難過──過敏。而這個過敏原不是貓狗、不是食物(是的,其實我吃海鮮也不會過敏),而是壁癌

我的鼻子呼吸道不太好,主要原因是因為從小就待在過敏。現在這個家大概是國中時候遷入的,從那開始之後,我的鼻子就變得很糟。開始帶手帕的原因也是因為常常會擤鼻涕擤到變成鼻血,因此嚇到周遭不少人。到了高中學校念得比較遠,就越來越不想回家──因為一回家,就會覺得很不舒服。直到上了大學來到台北,我才知道到底原來造成我鼻子的問題,就是因為壁癌。

DSC_0423

不光是我自己,我家人也多少因為壁癌的關係,不僅常常久病難瘉(幾乎都是鼻子的問題),甚至嚴重到氣喘的程度。得知原因之後,爸媽很辛苦地將整間房子有問題的地方打掉,發現不少排水溝滲水、水管破裂導致壁磚潮溼的地方,然後想辦法弄乾、水管重接、排水溝重鋪、防水油漆努力補強,工程浩大。那段期間我一直沒幫上什麼忙,真是感謝家人的辛勞。

但是,儘管這個大工程已經經過了快兩年,我在家裡還是會覺得很不舒服。年假這段期間,只要家事做完告一段落,我總是揹起筆電就躲到j附近的7-11去工作。每天晚上聽到爸爸因為鼻涕倒流導致咳嗽不止的慘狀,我覺得睡覺也像是在賭運氣一樣,要嘛就是因為呼吸不順、睡眠不佳而昏迷到中午,要嘛就是過敏嚴重到因為鼻子痛而醒來。

心疼孩子的媽媽老師拿屋子老舊讓大家過敏這點來唸爸爸,而爸爸總是開玩笑地說:「好啦好啦,那我出門去買房子就是。」然後騎摩托車前去彩券行。可惜我們家沒偏財運,房子還買不起,倒是先捐了一堆錢做公益。

隨著初五年假結束,我也回到了台北。但這時候身體總是像奇蹟般地自動痊癒。鼻子不塞了,鼻涕不濃了,喉嚨不咳了,呼吸也正常多了。這時候我總是覺得非常諷刺,這個身體就這麼討厭我家嗎?

雖然身體不太老實,不過我還是很喜歡我家人啦。這個年假沒幫上家人什麼忙,就只有一些打掃、幫忙煮個飯、收收碗筷,跟家人聊聊天而已。

即使是這樣,這也是我很重要的小小幸福。能跟大家在一起的時間不多,有機會就要好好把握啊。

(more...)