[2018/2/25] 改推薦 老舊電腦救星 antix 或 grml linux 或 SystemRescueCD。
好吧, 「鳳凰」 是我亂取的名字 (因為讀起來很像 phoenix)。 Finnix 是專為系統管理員所設計的 LiveCD, 沒中文、 沒圖形, 只有英文文字介面, 所以很精簡, 小於 180 MB。 它以 Debian 為基礎, 打包/壓縮方式類似 knoppix, 所以對我來說比較容易修改/客製 :-) 自從我淡出 slax 之後, 複製救命碟變得有點麻煩 -- 開機、 來源、 目的地總共要三支碟。 (就是只能 「幫別人無性生殖」 的意思 (咦?)) 前幾天成功地把 mk-boot-usb 裝進 finnix 裡面, 從此以後, 救命碟的用戶又可以自嗨了, 耶! [2014/10/03 更新: 建議改下載我製作的 中文版]
一、 開機
請到 這裡 下載最新版的 finnix-ckhung*.iso 。
你可以直接燒成開機光碟。
以光碟開機之後, 還可以試著進一步用
mk-boot-usb -b -v 1 -z '100+ 6400' -d /dev/sdx
製作你的第一顆空殼救命碟。
這個範例會把 /dev/sdx 切出一塊 6.4G 的 /dev/sdx5
作為存放 linux 的空間, 然後把剩下的空間
(至少要有 0.1G) 全部都留給 /dev/sdx1 的 vfat 分割。
如果你手中已有救命碟 (例如我幫你製作的舊版, 或是剛用 finnix 光碟開機所製作出來的空殼開機碟), 也可以直接把 iso 檔的內容物 (不是 iso 檔本身) 複製到某個分割裡 (比方說 /dev/sdx99 好了) 並且編輯 /dev/sdx4 掛載點之下的 /boot/grub/menu.lst 檔, 加上這幾句:
title Finnix 109 kernel (hd0,98)/boot/x86/linux vga=791 finnixdir=/finnix nomodeset quiet initrd (hd0,98)/boot/x86/initrd.xz
一般完整版 linux (例如 antix 或 SimplyMepis) 無法一邊正常運作一邊把自己複製給別人。 現在你只需要把 finnix 加到既有的救命碟上面 (只要還有任一分割有足夠的空間就 OK; 完全不需要重新分割等等), 就可以改用 finnix 開機, 然後按照 這一篇 把自己複製給別人了!
因為我經常需要把好幾個不同版本的 linux 放在同一個分割, 為了避免彼此互相干擾, 最好能讓每個版本有自己的子目錄。 例如當初若把 finnix 相關的所有檔案放在 /dev/sdx99 的 /finnix-109 子目錄 (而不是它的根目錄) 底下, 那麼根據 boot parameters 這一頁, menu.lst 就應該要這麼改:
title Finnix 109 kernel (hd0,98)/finnix-109/boot/x86/linux vga=791 finnixdir=/finnix-109/finnix nomodeset quiet initrd (hd0,98)/finnix-109/boot/x86/initrd.xz
二、 使用
開機後打 df
會看到一個 /cdrom 子目錄,
那就是 /dev/sdx99 的掛載點。
要注意的是: 除非你特別指定儲存路徑, 要不然 finnix 並不寫入隨身碟或硬碟。 比方說, 你現在所下的指令, 下次開機就全忘光了。
我所包裝的版本已有 mk-boot-usb 指令可用。
事實上你可以 cat docs/mk-boot-usb.txt
把裡面的指令剪貼出來改。
下這個指令: dpkg-query -W -f
'${Installed-Size;6} ${Package}\n' | grep -v '[0-9] lib' | sort -n
看到以下最大的幾個套件:
... 11513 perl 13382 coreutils 16103 perl-modules 17074 nmap 18197 binutils 41474 smbclient
看來, 如果不需要用網路芳鄰連線的話, 還可以省下 20MB 左右。 (因為 squashfs 有壓縮; 下詳) Finnix 除了內建許多網管及系統管理套件之外, 也包含 gnupg 與 python2.7-minimal 等等套件。
如果是 dhcp 的有線連線, 當然就很容易上網沒問題。 如果是無線網卡, 則可以 這樣連線上網。
三、 毫邁帥氣裸奔
如果開機時在 grub 命令列上多打一個 toram
選項, 那麼開機時會稍微頓久一點, 系統會整個拷貝到記憶體裡面去。
開完機後打 df
就看不見 /cdrom 子目錄。 這時把隨身碟拔出來,
電腦照樣可以運作。 請想像你面對著一群資工系的學生展示一部沒有機殼、
沒有軟硬碟、 沒有光碟電腦。 你用 finnix 隨身碟開機,
開完之後, 下一個執行很久的指令
(比方說, find /
),
然後電腦一邊執行, 你一邊以慢~動~作~拔掉隨身碟, 而它卻繼續執行。
find 之所以執行得很慢, 那是為了配合遲緩人類。
如果 ctrl-c 切斷它, 重新執行一次並 output redirect
到檔案裡面, 學生們就會感受到這部光溜溜的機器以
DDR3 數百 MHz 當作硬碟的速度狂風般裸奔的毫邁帥氣!
但若你若按照第一節最後面, 把 finnix 放在某分割的子目錄 (而不是它的根目錄) 底下, 那麼還必須 (1) 把 md5sums 搬回根目錄底下, 並且 (2) 把其中所有路徑都加上子目錄的名稱, toram 才會成功。 以上面的設定為例, md5sums 當中原來的一句
886b16bb9ab0b960048af31156724bef finnix/arch/x86/root.img就應該變成
886b16bb9ab0b960048af31156724bef finnix-109/finnix/arch/x86/root.img
其餘類推。
[2015/3/4 補充] 如果在隨身碟上放了好幾個不同版本的 finnix, 只要分別放在各自的目錄, 還是可以共享同一個 md5sums 檔 -- 就直接把 (加上各自不同目錄名稱後的) md5sums 檔 cat 在一起就可以了。 但是這樣系統會把所有版本 (包含用不到的版本) 的檔案全部載入記憶體, 有點浪費空間。 所以最好還是分開, 只有常用的那一個叫做 md5sums。
四、 製作你自己的 finnix
如果想要自己客製 finnix, 有兩個方法。 如果只是要加幾個檔案, 採用 overlay 比較簡單; 如果還想刪除套件、 新增 (相依套件很多的) 套件, 就要改採 remastering。 以下是我的 remastering 筆記。
mount /dev/sdx99 /media/sdx99 # 掛載硬碟的某個分割作為工作磁區 # 客製化 finnix 的過程, 至少需要用到 700+200+200 MB 的空間! mkdir /media/sdx99/finnix-build # 建立空的工作目錄 mkdir /srv/finnix ln -s /media/sdx99/finnix-build /srv/finnix/build cp -a /cdrom /srv/finnix/build/master # 可以在 .../master/ 底下加入一些圖片或文件等等與系統無關的檔案 # 如果要改系統的話... mkdir /srv/finnix/build/source cp -a /FINNIX /srv/finnix/build/source # 如果要改 initrd 的話... mkdir -p /srv/finnix/build/initrd cd /srv/finnix/build/initrd xz -d < ../master/boot/x86/initrd.xz | cpio -idm # 例如儘早載入某些模組 ... vi /srv/finnix/build/initrd/init # 加入兩句: modprobe ext4 ; modprobe ext3 # 「改 initrd」 的 "如果" 結束 export FINNIXDEV=1 # 讓等一下的 chroot 環境知道自己是在 chroot 環境裡面正在修改 finnix chroot /srv/finnix/build/source/FINNIX /bin/bash -l apt-get update apt-get upgrade apt-get remove 一些套件 apt-get install 一些套件 # 其他修改 exit finnix-build-stage1 # 把 /srv/finnix/build/source/FINNIX 壓縮到 # /srv/finnix/build/master/finnix/arch/x86/root.img 去。 很久。 # 如果要改開機選單或開機 kernel 命令列的話, 請改 /srv/finnix/build/master/isolinux.cfg # 「改系統」 的 "如果" 結束 finnix-build-stage2
上面的兩層 "縮排" 代表可略過的步驟。
內層的 "如果" (改 initrd) 你多半可略過。
我當初發現 finnix 若裝在 ext4 分割上, 開機會失敗;
但若裝在 ext2 分割上, 則可正確開機, 並且之後也可以掛載 ext4 分割。
最後找到出問題的 init 命令稿, 加上 modeprobe ext4
與
modeprobe ext3
兩句就 OK 了。 如果你從我的版本開始改,
就不需要做這個修正。
chroot 結束之後的 finnix-build-stage1
會把 /srv/finnix/build/source/FINNIX/ 底下的所有東西打包壓縮成一個
squashfs 放在 /srv/finnix/build/master/finnix/arch/x86
底下叫做 root.img。 注意: 不只 /var/cache/apt/archives 底下的
*.deb 會被清空, 連 /root 底下的東西也會被清空!
最後的 finnix-build-stage2 指令會把 /srv/finnix/build/master/ 底下的所有東西打包成一個新的 iso 檔, 放在 /srv/finnix/build/ 底下。
五、 就算比亞當夏娃更孤單也能隻身恢復文明
終於找到接近完美的組合了, 超開心的啦! 以後 8G 或以上的隨身碟, 就安裝 antix + finnix; 1G 到 4G 的隨身碟, 就安裝 puppy linux + finnix。 就算全世界其他的硬碟與隨身碟都被消磁了, 只剩一支救命碟, 也可以恢復文明啦!
The download link of "ftp:/v.im.cyut.edu.tw/14/" is not correct because the ":" is a fullwidth colon.
回覆刪除謝謝, 已更正! (我打字習慣打半型; 先前 「貼文之前半型轉全型」 的程式有 bug...)
刪除請問老師:我把你打包的Finnix 下載後,燒成CD。然後用這CD開機,用裡面的mbu 做了第一支切成4個分割區的可開機USB。我現在可用這個mbu USB開機,可從boot list 進入 ttylinux。之後,我按照你上面說的,把 finnix-mbu-14a.iso 的內容物(不是 iso 檔本身), 複製(用另一台圖形介面的linux)到第三個分割(也就是extion 的第二個邏輯磁碟),我的問題如下:
回覆刪除1. 我如何得知這支mbu USB開機後的磁碟代碼及檔案格式代碼,也就是 kernel (hd0,98) 中的0及98?我會用 DOS 的指令,但進入ttylinux 後的指令我就不會了。在ttylinux裡,如果得知這支mbu USB 的各個預設分割
a. hd0 或 hd1 或需要用其他代號?
b. (hd0,98) (hd0,4),到底需要用98還是4?哪裡可以找到檔案系統的號碼表?
謝謝!
看了grub的文件,改好了。主分割從0開始,邏輯分割從4開始。
刪除title Finnix 109 + mbu-14a
kernel (hd0,5)/finnix-mbu-14a/boot/x86/linux vga=791 finnixdir=/finnix-mbu-14a/finnix nomodeset quiet
initrd (hd0,5)/finnix-mbu-14a/boot/x86/initrd.xz
嗯, 也請參考 硬碟分割的觀念。
刪除