2008年4月15日 星期二

[愛玩]建立多個作業系統

我的小筆記型電腦為ASUS M5 series,記憶體只有256mb,硬碟也只有小小的60G,想拿他來做什麼比較累人的運算也不太可能,不過如果可以利用硬碟空間來玩玩其他套linux,應該是一個比較物盡其用的方式;於是我花了NT$1250買了一個512mb的ram(micro-dimm的還真難買到),就開始建立我的多個linux OS。 但是選擇哪幾個linux比較好呢?其實這就是個人喜好問題,我是覺得真正要玩到一定的程度,應該要多去碰gentoo, knoppix或是slackware這類型的linux才對;可是我的功力尚淺,我需要選擇擁有較多套件庫支援distributions,支不支援中文倒無所謂,反正裝個中文字型給他就可以解決;另外社群裡要有夠多人玩這套linux,這樣遇到問題才有人可以問;最後就是:自己到底願意花多少時間來維護他呢?衡量這三項因素,我選擇安裝opensolaris, opensuse, fedora, mandriva, scientific linux, debian, ubuntu這七個作業系統;當然,opensolaris並不是linux,不過他是純的GNU/solaris,有全新寫過的kernel,多年前第一次玩Nexenta(opensolaris)時發現他也採用了dpkg的管理方式,跟我在debian的習慣一樣,這使我對於Nexenta深有好感!七個作業系統,真的可以天天開一個來玩呢! 1.分配硬碟空間: 當然我希望可以讓swap越前面越好,於是我設定hda1為1G,Nexenta為8G,其他各套linux都7G,Ubuntu給他7.5G,另外剩下的空間就可以當作各個linux的共用空間。 不過從圖上可以看到,最後卻變成了swap跑到了hda2,怎麼會這個樣子呢?唉!這就是因為我不清楚unix檔案系統怎麼定義linux swap的結果囉!並且我決定要裝在MBR的boot loader是用ubuntu的grub。決定好後,就可以開始安裝了。 2.安裝Nexenta alpha 7 實際上下載nexenta的iso時,會發現有兩種光碟版本,一種叫做core platform,另一種叫做install_cd_alphaX,實際上都是一樣的東西,差別在於預設有沒有x-window。舉一個簡單的例子:debian的使用者我想應該很少人會安裝時選擇安裝「桌面環境」,因為你選擇安裝整個桌面環境代表你會安裝整個gnome,這樣就浪費了debian提供給你「精簡」系統的目的了。大部分的debian users會不選擇安裝桌面環境,而會選擇僅安裝base system,爾後再根據自己的需要滿慢慢建立;而這兩種iso也是一樣,第一是給你一個base system without x-window,需要什麼東西在讓你爾後慢慢疊加,而install_cd則像是你選擇安裝debian的桌面環境,邦你安裝好一個gnome的環境,也可以藉由apt安裝、管理所想要的東西。 不過unix的檔案系統以及對硬碟的使用方式、定義都跟linux不一樣,我整理如下:
partition/disk : [linux表示法] [unix表示法]
-----------------------------------------------------------------
primary master      /dev/hda    /dev/dsk/c0d0
primary slave       /dev/hdb    /dev/dsk/c0d1
secondary master    /dev/hdc    /dev/dsk/c1d0
secondary slave     /dev/hdd    /dev/dsk/c1d1
                   /dev/hda1   /dev/dsk/c0d0p1
                   /dev/hda3   /dev/dsk/c0d0p3
-----------------------------------------------------------------
但是事情並沒有那麼單純。unix系統有以下的限制: *只能安裝在主要分割區。 *只能存取主要分割區。 *安裝時檔案系統不能掛載在一個partition--unix會使用一個主要分割區切成數個小的slices來掛載檔案系統。 *注意:家目錄的位置是在/export/home而不是/home。 當安裝Nexenta到分割硬碟時,由於我只有一顆硬碟,相對單純很多,共有四個欄位可以讓你設定(就是ide的限制--只能讀取4個主要分割區),你可以選擇solaris/solaris2/msdos等的檔案系統,其中可以注意的是,linux swap他定義成solaris檔案系統,而安裝Nexenta所需的ZFS或是UFS則要選solaris2的檔案系統。但是由於我是選用install_cd來安裝,這張光碟片只允許我安裝時使用UFS傳統的unix檔案系統;如果你想用sunos比較傑出的ZFS,則要用core platform這片光碟來建置。 目前的硬碟配置而言,我必須把Nexenta安裝在primary master的第一個partition裡,也就是/dev/dsk/c0d0p1,而unix不直接使用整個partition,分成數個slices則會寫成c0d0s{1,3-7},而c0d0s2則是代表整個partition,所以沒有任何檔案可以掛載在c0d0s2裡面。以我的例子而言:
/               c0d0s0
swap            c0d0s1
/export/home    c0d0s7
以此觀念就可以安新的安裝unix了。至於為什麼我不選用opensolaris其他版本呢?因為諸如SUN的solaris express的community或是development版本,他們需要的硬碟空間最好要12G以上,記憶體也要求最少1G,我的M5肯定會跑不起來,所以不再我這次的測試裡考慮。 安裝bootloader時,我選擇安裝在他的boot sector而非MBR。 3.安裝opensuse 10.3 opensuse是一套很先進的linux OS,可惜我不喜歡用SUSE,opensuse純粹是為了準備NCLP所使用的一個環境,雖然不完全一樣,但總比安裝一個不能update的linux來得好。 之前有幾次使用openesuse不愉快的經驗是,依照nvidia官方驅動程式for suse的教學,將nvidia download加進了套件庫,安裝了x11-video-nvidiaG01,結果重開機之後在x下鍵盤滑鼠都不能動,sax2重跑了也不行。也許是我不懂suse(因為大家好像都用得很開心),所以我使用suse都不裝nvidia的驅動程式的。(鴕鳥心態) 因為我使用debian的習慣都是修改設定檔,頂多重跑一下daemon就可以生效,但是suse系列的linux需要多跑SuSEconfig,因此改了設定檔未必有用,所以我真的不太習慣opensuse。不過他對於一些服務的整合真的很棒,包含對xen的支援,最自豪的apparmor等等,都整合在yast裡面,所以很多人聽說是為了用yast的方便性而使用SUSE!(聽說的啦) opensolaris的ufs,linux的kernel預設是不能辨認的,因此這邊看到的unknown是可以預期的。 4.安裝Fedora 8 Fedora是老牌的redhat不再提供免費版本後的計畫之一,同樣的計畫還有centOS;只不過這次我沒有選centOS的原因是因為他跟fedora太像了,所以就選擇了Fedora。 令人驚訝的是,為什麼各大linux的核心都預設支援了reiserfs,就是redhat家族的沒有...使用ext3有太多不愉快的經驗,對硬碟的使用效率也不好,reiserfs是一套真的很優秀的檔案系統。 在google上可以看到其實有許多方法可以讓Fedora一開始就支援安裝在reiserfs,就是在開機時輸入selinux=0, reiserfs,按enter就可以讓核心支援reiserfs了。 RH官方網站說明預設不支援reiserfs的原因據說是因為selinux的關係,無法完全support acl以及xattr,不過我不懂,因為在suse裡,reiserfs可是支援acl/xattr的阿! 當然在磁碟分割時無法看到ufs,並且boot loader也安裝在/boot裡。 5.安裝Mandriva 2008 Mandriva2008安裝光碟我不選擇那片包山包海dvd,那不但下載很久,很多東西我也用不到。我選擇包含gnome(但不包含中文語系支援)的那片光碟,而且重點是,這片光碟是live_CD,跟ubuntu一樣可以先用live_CD玩玩在安裝唷!沒有中文沒關係,稍後在安裝就好,重點是系統先建立起來;不過此時我發現了兩件非常搞笑的事情.... *安裝時Mandriva竟然給我兩個選項: 1. 升級Fedora release 8 (Werewolf) -->哇哈哈我不知道Fedora可以升級成Mandriva耶! 2.全新安裝 *分割硬碟時,hda1那個UFS,mandriva竟然把他辨識成"Microsoft Xbox filesystem" 我的天阿,mandriva會不會太屌了一點,還是說連這都蓋得出來阿!^^莫非微軟偷偷使用unix來當作xbox的作業系統!原來李連杰說的:「兵不厭詐,這是戰爭!」是真的!^^ Mandriva一如往昔的Mandrake,給人方便使用且親切的感覺,安裝的過程也會偵測是否有windows以進行使用者設定的匯入,不錯,相當貼心,而且mdk.linux.org.tw的速度也很快,其實以後家裡的電腦,mandriva是我的第二選擇。 不過,我嚐試自己編譯oxim,也安裝成功了,但不知為什麼在/etc/sysconfig/i18n裡我就是無法成功的把oxim叫出來...還導致nautilus開不起來...對不起我還不熟mandriva,不過,一些codec都幫我們裝好了,可以看mpeg4的影片唷! 6.安裝Scientific linux 這套linux主要是由美國費米實驗室所主導,核心改編自redhat linux 3,詳細的介紹請參考自由軟體鑄造廠,至於選擇這套linux的原因有很多,因為我對他不熟,想玩玩看,就這麼單純而已。由於也是使用anacoda的安裝程式,所以只要會裝fedora,那麼你就會裝centos, scientific linux, pclinux, pupa5等等的發行套件。 不過這回用selinux=0, reiserfs就無法再次將SL安裝在reiserfs上了。 中文支援度不高,不過只要看官不介意英文介面,那麼安裝個中文字型就可以work for fun了! 7.安裝debian 我第一次玩linux就是玩debian,那安裝可真是難,可是苦有苦的好處,我的好朋友焜銘他訓練我要一步一步安裝自己所要的套件,因此從windows轉到linux的我可真的是遇到超多初學linux沒遇到的問題--openoffice的工具列不會隨著gtk的設定而變化,輸入法出不來,x跑不起來,等等的許多初學的問題都很難解決,可是後來最起碼,我們debianer對於套件名稱都非常熟悉,甚至可以不用作筆記就能從一個base system一個指令一個指令安裝出一個另自己滿意的特製系統,我想有了debian的訓練,跨越其他linux distribution真的相當容易。 不過,我覺得真正強的linuxer其實是那些一開始就玩gentoo/slackware的那些高手,因為那些發行版本似乎開始安裝就要針對系統進行編譯,而且也沒有項我們可以用yum/apt/urpm/yast來進行升級或是安裝套件,這樣的情況下要什麼東西都要先下載他們的tarball來編譯,這針的是花功夫也花時間的事情!!所以其實我真的對於gentoo/slackware users很是崇拜~ 8.Ubuntu的安裝 這真的是我看過最容易安裝的系統了,其安裝過程比windows還簡單,連『下一步』都比windows還少。此時我才把boot loader安裝在mbr,也就是說我用ubuntu的grub來啟動其他的linux。另外有一套linux mint,是一套based on Ubuntu的linux,安裝過也是挺漂亮的,不過站台都在國外且套件庫都比較舊,好笑的是他的sources.list裡預設給你很多ubuntu 7.10的list,我只不過是依照安裝後給我的設定去upgrade,結果...開機的進度bar就變成了ubuntu的,整個傻掉... 9.多個作業系統所要注意的事情: 其實我們的環境很單純,一套unix,然後一些linux,這些*nix們可愛的地方在於自訂性很高,你要他們怎麼跑他就怎麼跑。每一套linux都要開機,其實我可以有兩種選擇: *只在一套作業系統安裝boot loader,其他完全不裝。這樣的配置可以不用管理每一套的開機管理程式,只要在grub裡面寫下欲開機的partition, kernel image的位置以及initrd的位置(有些linux甚至不用initrd,如slackware)就可以開機;不過缺點是,更新kernel之後可能有些版本不會幫你作軟連結,可能要手動去指定精確的kernel-image的名字。 grub(mbr) ---▼ root (hd0,1) ---▼ kernel=/boot/vmlinuz initrd=/boot/initrd.img -----boot *每套linux都把boot loader安裝在自己的boot sector,只有一套裝在MBR。這樣的好處是你可以利用grub的chianloader的威力,讓每一套linux的boot loader管理自己的開機,另一個安裝在MBR的boot loader當大總管,利用chianloader 的方式chianload到其他套開機管理程式。聽起來麻煩或複雜,其實這樣作才真的便利: grub(mbr) ---grub(hd0,5)→grub(hd0,3)→boot -----------------grub(mbr) ---kernel=/boot/vmlinuz initrd=/boot/initrd.img -----boot 也就是可以藉由chainloader指令連到其他管理程式去,甚至連回來也行(假設認為自己容易按錯),這是一個可以參考的好方法。事實上,如果有windows的多重開機,就是利用chianloader的方式把開機的stage0再次交給windows的boot loader;所以說穿了,也沒什麼大學問。 好累喔...改天再來寫各個系統的升級方式吧!

2008年4月10日 星期四

惡夢一場

這幾天,我都會不自覺的想起在部隊的事情,一想起那些在部隊的人渣們,真的就不自覺的火氣上升;雖然退伍那麼久了,但心中的怨氣跟委屈可能還是沒有釋懷,雖然只是想到,無預警的,我還是覺得非常的憤怒。

但取而代之的是,每當我心情不好的時候,我就想到我不用回日薪山莊,不用在累死人不償命的戒護隊,不用在當個士官還要忍受勤務排小阿兵哥的氣...總之遠離了那畸形的部隊型態,每每想起來都覺得開心,我再也不用趕晚上7:23到隆田的火車了。

昨天晚上我做了一個夢,我夢見我回家時,我媽竟然拿一張兵單給我(我是預士,我沒看過真正的兵單),說我怎麼又被徵召一次?我沒有親眼看召集令,我心想反正我已經有退伍令了,就先去部隊集合,然後再跟那邊的輔仔說明白就好了。

結果一去,就回不來。

在那邊我還是憲兵下士,不過幸運的是不用待在監獄,在我的宿舍外面是一大隊海巡署的橘色制服在那邊不知道在幹嘛(實際上我常覺得海巡署完全沒有戰鬥力可言,又幾乎都會出現很多負面新聞,可是到最後憲兵也好不到哪裡去,所以我就很少在批評海巡了),然後也沒人催我要趕緊著整齊服裝到哪裡集合,所以我有很多時間可以一直看這到底是哪裡。

這是一個冰天雪地的海邊,海灘上佈滿了白雪,其實那種寒冬的美麗真的蠻棒的;外頭兩個憲兵阿兵哥在練戰技,我記得我好羨慕他們(可以戴上勤務盔、勤務腰帶,帥氣的在各軍種前面練習戰技,我以前在憲校的時候最喜歡練戰技的!也覺得自己各項戰技都不錯,特別拿手步槍跟機槍的細部分解,只是無奈我抽到那該死的單位,唯一的戰技就是喊起床跟就寢...),好想衝出去跟他們一起練;接著海空兩軍聯合演練,迎面而來的戰機和海上的大型戰艦一起對著山頭猛轟,一片白雪皚皚中的演練發揮了軍人應該有的本質,就是接受戰鬥訓練,整個當兵的過程才有意義,才顯完整。

看久了之後我發現我此行真正的目的是要找一個輔仔說明我已經退伍的事實,於是我趕緊找到我的軍便服,把銅環擦亮,衣服拉現拉整齊確定OK之後,就往外面走出去,我發現這似乎比較像一間軍事學校,人來人往的,找不到一個看起來比較閒的軍官(這顯然又不是學校);後來赫然發現我竟然穿著拖鞋就走出來...天阿一個憲兵穿著整齊的軍便服然後穿拖鞋...能看嗎?趕緊跑回宿舍,穿好皮鞋著後,一個很漂亮的女上尉軍官來接我,說她是輔仔,要帶新進弟兄適應環境(媽的我一定是莒光園地看太兇了...這怎麼可能嘛!!!),我只好說OK,搭上吉普車之後,發現司機是一個帥氣的憲兵一兵,這真是一個悠閒的缺,我想他可能是傳令之類的職務吧!?在日新那個垃圾所在,這些爽缺都是關說來的,只要你有星星的親戚,你都可以佔到爽缺,否則你就算學歷再高條件能力再好,完全沒有用,管你下士還是二兵,反正就一起站哨;沒有佔到領導缺的下士更慘,地位比兵還不如,真的覺得如果命運就是要我到日新山莊當兵,我寧願當阿兵哥就好,我不要去憲校接受這麼崇高道德的軍政訓練,然後打落冷宮,在這個死氣沈沈的鬼監獄當個閹割的憲兵下士。

不過,我的心竟然有一點高興!雖然我並不想再浪費一年當兵,可是這裡有很開闊的土地,很紮實的作戰訓練,拿起槍來不管是憲兵還是陸戰隊,都有一種自豪的氣勢(還是我真的看太多莒光園地),我那些211的同梯,我想他們應該快要被操到往生了,可是他們絕不能想像在監獄每天生活的氣氛如此沈悶,在這裡志願役地位>>義務役,帶隊時只有志願役士官能帶,有時連分隊長都會叫志願役士兵來帶(隊子裡面起碼有10個義務役下士耶!),這個地方就是一個亂七八糟,希望新隊長能夠挽救這種局勢,下士的責任就是領導跟管理士兵,不要分發了那麼多個士官,最後又不用他們,讓他們還要叫阿兵哥叫「學長」,成何體統! 所以在這個新的單位,我反而有一種開心的感覺。

夢結束了,醒來之後有一點不知所措。想起當兵的時候,同梯彼此勉勵的一句話:「當兵什麼都是假的,只有退伍才是真的!」也許,是我對憲兵的期望太高:

整軍飭紀 憲兵所司 民眾之褓 軍伍之師
以匡以導 必身先之 修己以教 教不虛施
充爾德性 肅爾威儀 大仁大勇 獨立不移
克勵爾學 務博爾知 唯勤唯敏 唯識之宜
軍有紀律 國有綱維 孰為之率 唯爾是資
完成革命 奠固邦基 匪異人任 念茲在茲

所以也許我是個超容易接受政治教育的人(如果我生在中國可能是個可憐的共產愛國青年),在憲校我一直覺得我是個軍法警察,應做三軍表率,我連每個禮拜休假回家都在做伏地挺身跟練習戰技,看來最笨的是我自己,不知道其實當兵真的只是一場戲,去問部隊裡每個臂章繡著「憲兵」兩字的軍官或士官,軍官只想升官,士官就想趕快幹到士官長領終生俸,也不想想自己的責任,還是實際上沒有責任,全台灣只有我覺得憲兵有責任?

看來我真是個白癡....

(耶!不用收假!不用受勤務排的氣!不再是累死人不償命的戒護隊!)

2008年4月6日 星期日

捏把冷汗--reiserfs重建b*tree實戰

前幾天突發奇想,想要試試chroot的功能, 由於喜歡/習慣於Debian和Ubuntu,我想試試看能否用chroot來模擬多個linux的環境, 於是我的小筆記型的小硬碟只有60G, 必須先把我收藏很久的gnome的themes、wallpapers還有各distribution的設定文件給備份起來, 於是我就用家裏的一顆舊的60G Maxtor硬碟來裝這些東西,
dmesg | tail
確定這顆硬碟/by-path識別名稱之後,
fdisk /dev/sdb
新增一個linux的分割區,選擇成主要分割區,使用整顆硬碟。
mkreiserfs -l progs /dev/sdb1
建立reiserfs的檔案系統並標籤為progs。 經過了幾分鐘快樂的使用之後(我是用sata/ide轉usb介面) 突然間錯誤訊息出現"I/O error"! 心裡大驚:不會吧! 開始出現有一些檔案他的顯示有灰底, ls -l 顯示的資訊全為???? ???? ???????? 然後利用root去刪除也出現permission denied! 我知道終於發生了最不想發生的事情.... 最有可能是我superblock區域毀損了! 果然我umount之後再mount的結果, 告訴我bad filesystem or superblock broken...一般而言看到這訊息通常只是新手在/etc/fstab寫錯option或是filesystem罷了,唉我怎麼會這麼倒楣,我是用mv過去的耶!!!(失敗了就找不回來了) 真是不死心,再次remount之後的結果更慘:
"operation invalid"....
於是只好很小心的展開了無止盡的修復工作.... 1.由於他不是ext2/3系列的檔案系統,我沒有dump有關的指令給reiserfs來備援他的superblock, 我可能得去重建他的b*tree:
reiserfsck --check /dev/sdb1
*************************************************************
** If you are using the latest reiserfsprogs and  it fails **
** please  email bug reports to reiserfs-list@namesys.com, **
** providing  as  much  information  as  possible --  your **
** hardware,  kernel,  patches,  settings,  all reiserfsck **
** messages  (including version),  the reiserfsck logfile, **
** check  the  syslog file  for  any  related information. **
** If you would like advice on using this program, support **
** is available  for $25 at  www.namesys.com/support.html. **
*************************************************************

Will read-only check consistency of the filesystem on /dev/sdb1
Will put log info to 'stdout'

Do you want to run this program?[N/Yes] (note need to type Yes if you do):
我當然要答Yes羅!
###########
reiserfsck --check started at Sun Apr  6 11:21:50 2008
###########
Replaying journal..
Reiserfs journal '/dev/sdb1' in blocks [18..8211]: 0 transactions replayed
Checking internal tree..

Bad root block 0. (--rebuild-tree did not complete)

Aborted (core dumped)
真令人沮喪...看來是我沒有去rebuild b*tree的原因,
reiserfsck --rebuild-tree /dev/sdb1
經過漫長的rebuild,還是失敗,唉真的有如此的倒楣嗎?
sync && sync && sync && init 0
冷靜下來,一定有辦法的,大不了佈景主題重抓,設定的筆記自己重寫吧><||||||||| 我把硬碟電源線拔掉,發現他的jump竟然是在cable select的地方(一般而言應為master的位置) 可是心想,跟這個應該沒關係吧...可是我已經沒招了, 在這之前,我已經試圖重建superblock, 但都還是被終止,反正我已經沒招了,已經有一切從零開始的心理準備了, 把jump調到master之後,開機, 一樣執行
reiserfsck --rebuild-tree /dev/sdb1
一樣經歷漫長的等待,咦,有眉目了,一直不斷的替我flushing, 也不抱任何希望的整理我的書本,沒想到完成了,沒有之前被中斷的錯誤訊息, 我還不敢相信,把他mount起來眼見為憑:
mount -t reiserfs -o defaults,user,exec,noatime
令人感動得說不出話來:nautilus自動彈出了視窗,是我心愛的設定檔跟themes! 趁剛剛才修復好的硬碟還沒出差錯之前之前,趕快備份! 終於了解平時備份的重要性了!