阿貴的系統管理撇步


我用 linux 很多年了, 玩出一些不太正統的系統管理心得, 在這裡跟大家分享。 當然, 每個人的需求與癖好不同, 這裡提供的撇步不見得適合您。 我的生活哲學是: 降低對外界的需求, 提高自己適應不同環境的彈性, 隨時準備好面對最艱困的環境。 因此我選擇的應用軟體與安裝的系統有一些特性:

  1. 盡量用小支, 依賴套件少, 文字介面的工具。 例如用 lynx 與 w3m 瀏覽; 用 mutt 收發信件, 用 vim 編輯 html 檔並用 tidy 整修, 用 soffice2html 轉換 OO.o, ... 等等。 又如視窗管理員, 我既不用 gnome 也不用 kde, 而是選擇輕薄短小卻聲效十足的 enlightenment, 強力推薦!
  2. 用不到的套件盡量砍掉!

所以要安裝一套每天工作娛樂使用的系統, 其實 2G, 最多 3G 的硬碟空間就用不完了。 (我的系統通常大約使用 1.2G 到 1.5G 的空間) 以下許多安排的合理性與實用性, 都基於這樣的假設。 另一方面, 如果您的生活哲學與我不同, 這裡談的資源配置就不見得適合您。 (例如備份光碟可能會超過 700MB)

分割硬碟

首先盡其可能地多切幾個 partitions。 如果沒有經過特殊設定的話, 一顆硬碟最多可以切成 16 個分割。 其中 1 個 extendend partition 只是用來容納 logical partitions 的空殼子, 不能直接用; 其他 3 個 primary partitions 與 12 個 logical partitions 都可以用。

按照大小, 不要按照功來能切割。 這部電腦用幾年下來, 可能會升級好幾次, 安裝很多套不同的 Linux 或 BSD (如果不幸的話, 甚至還必須安裝 Windows...)。 從這個角度思考, 留各種不同大小的空間, 比現在決定如何分出 /var /home /usr ... 更有意義。 事實上大部分時候我只掛載兩個分割在用: 系統與資料; 而資料要由不同版本的系統共用, 所以有另外的設定方式, 下詳。 例如 40G 的硬碟, 它的 logical partitions 可以切成 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 6, 6; 其他留給 primary。 有各種大小的分割, 最常用的大小多切幾個, 這樣將來要調整/安裝多套/對調/... 就很方便。

Windows 很難養, 一定要 primary partition, 所以把 那三個 primary 留給它, 萬一那天不幸需要的時候可以用。 選一個分割 (例如叫做 worksp) 存放資料, 包含未來的 /home 。 從前我還必須 dual boot 回 windows 或 OS/2 的時候, 另外還有一個格式化成 vfat 的分割 (例如叫做 share), 用來與這些作業系統交換檔案。

安裝系統

選一個 2G 的分割, 開始進行 最小安裝。 如果新版的光碟片/系統/驅動程式/... 有任何問題, 很快就會知道; 避免花了很多時間選套件, 最後才發現根本無法開機。

確定可以開機沒問題之後, 趕快重新開機切換到另一個系統 (例如舊版的 Linux; 或直接用光碟開機, 並在 boot 的提示符號上打 linux rescue 進入救援模式)。 假設剛剛裝在 /dev/hda17 上面, 於是檢查一下系統 fsck -f /dev/hda17, 掛載進來 mount /dev/hda17 /mnt/hda17, 備份 cd /mnt/hda17 ; tar czf . /some/large/data/partition/mdv-06-a.tgz 這裡的 "/some/large/data/partition" 當然是指另外掛載的, 專門放大量資料的大容量分割。 將來要還原或是複製系統, 可以直接拿這個映象檔來解壓縮 (下詳), 不必再經過繁瑣的交談式安裝手續。 這要蠻久的, 起來活動活動筋骨吧。

重新開機回到剛裝好的迷你系統, 開始增刪套件。 rpm -qa --qf '%10{SIZE} (%{NAME}) %{SUMMARY}\n' | sort -n | less 從最下面 (最大) 的套件開始向上檢查, 看看有那些套件自己從來不用, 可以刪除。 至於新增套件, 在 Mandriva 底下可以用 urpmi, 在 Fedora 底下可以用 yum; 這兩個指令都會查看欲安裝套件的相依關係, 如果有必要, 會自動安裝使用者未指定, 但需要用到的其他套件。 一切 ok 沒有問題之後, 記得下 rpm -qa > .../worksp/mdv-06-b.rpm-qa 將系統目前安裝的套件列表記錄到資料分割某處。 這可是經過幾小時精挑細選的心血, 要好好保存。 另外, 我習慣把新增的 user (例如 ckhung) 的家搬到工作分割 worksp 底下, 並從 /home 底下建立 symbolic link: ln -s /mnt/worksp/home/ckhung 這樣將來不論從那套 linux 開機, 自己家中的設定都不必重新改。

複製系統

再度 reboot, 切換到舊的 Linux 或用光碟開機。 就像先前備份的動作一樣, 再把剛才辛苦挑選套件安裝完成的系統壓縮起來, 叫做 mdv-06-b.tgz 好了。 (一樣, 放在另外的大容量資料分割。) 現在將整個系統複製到 /dev/hda18 去:

	mkfs -t ext2 -j /dev/hda18
	mount /dev/hda18 /mnt/hda18
	cd /mnt/hda18
	tar xzpsf /some/large/data/partition/mdv-06-b.tgz

再來只要改兩個地方, hda18 也變成可以開機的系統了:

  1. 修改 /mnt/hda18/etc/fstab, 把原來的 "/dev/hda18 /mnt/xxx ..." 改成 "/dev/hda18 / ..."
  2. 修改 /boot/grub (或是 /lib/grub ?) 底下的 menu.lst -- 把安裝時自動產生的 /dev/hda17 那幾句抄過來類比修改。

重新開機, 選 hda18 進入試試看吧。 Linux 要複製在同一系統的不同分割上面就這麼簡單! 是不是比 Windows 乾淨清楚多了呢?

有了複製系統, 就不怕臨時出狀況。 雖然說 Linux 不太當機, 但是偶爾總會遇到停電不正常關機, 或不經意刪除一些很久以後才會發現/悔恨的套件, ... 等等意外狀況。 特別是經常帶著筆記電腦四處奔波的朋友, 只要遇到一次, 您就會感受到複製系統的方便。

每隔幾個月, 可以檢查這段時間以來新增了那些套件, 準備再製作新的映象檔 mdv-06-x.tgz 。 (x=c,d,e, ...) 但不要直接在現行使用的系統上面製造, 而是切到乾淨, 從來沒有在用的複製系統, 把新增套件一次裝完, 立即重新開機回現行使用的系統, fsck -f 之後, 對複製系統備份。 這樣你的備份系統又乾淨得跟剛安裝完畢時差不多。 當然前提就是平常你不會在現行使用系統上用 "非 rpm" 的方式安裝套件; 或者說, 如果對它做了任何增刪 rpm 套件之外的修改, 記得要記錄下來, 以便製作新映象檔的時候可以使用。

把 grub 搬到 資料分割

到目前為止, grub 都還是跟著 hda17 跑; 但事實上它應該像 home 一樣, 超然獨立於任何版本的 linux 之外。 用 rpm -ql grub 看一下最重要的檔案是那些 (通常放在 /lib/grub 底下), 把它搬到 /mnt/worksp/boot/grub 去, 並且重新安裝一次。 ... 不知為什麼, 較新版本的 grub (0.95, 0.97) 對於 --config-file 沒有反應, 它的設定檔不能改名字, 一定要叫做 menu.lst 。

(本節待補充)

製作救援光碟

把 /mnt/worksp/boot 壓縮起來, 和最新的備份映象檔 mdv-06-x.tgz 一起放到光碟上, 並用 syslinux 安裝幾套小型的 linux, 就變成客製化的救援光碟。 就算機器換了一顆全新的空硬碟, 也可以靠著這張救援光碟, 在半小時內還原成平常工作的環境。

(本節待補充)