老筆電從 usb 開機時使用 usb 3.0 與 cd fs 的問題

試著把家裡一台老筆電 acer travel mate 4000 開機, 想開機成 linux 作業系統。 bios 沒顯示可以從 usb 開機,但確實是可以, 只是他開機時不認 cd fs 格式的隨身碟,只認 mbr; 而且不能是 usb 3.0 的隨身碟。 後來就用了 i386 的 antix 開機成功。

生出一台光碟機

事件起因是需要讀光碟, 一開始想法是弄一個外接光碟機, 本來拆了一台桌機的 sata 光碟機, 再用 sata 轉 usb 的轉接頭,接到筆電上, 結果筆電讀不到光碟機。

筆電讀到時都是顯示為 /dev/sd? , 但光碟機應該是 /dev/sr? ,我猜是轉接頭的問題。 可能一種轉接頭只能對應一種裝置, 因為用 lsusb 時會看到該 usb 是何種裝置, 而那個種類可能是寫死在轉接頭裡的。 而我當時買的是對應硬碟的,所以電腦會認成硬碟, 把光碟機當硬碟來讀來就會出錯。

問了 ccns 的朋友,說可能是電壓不足, 因為筆電的電壓可能不能供應桌機的; 但我按退片鍵是可以退片的。 總之我就想到另一條路,用筆電的光碟機去試。

想起家裡有一台老筆電 acer travel mate 4000 有光碟機,於是就翻出來用。 本來拆到一半拆不掉,翻維護手冊才發現拆光碟機要拆到鍵盤, 覺得太麻煩了,就試著直接開機,如果可以開機, 就用隨身碟開進 linux,再用 linux 來讀光碟。 (因為我想要完整拷一張光碟,而不只是讀出裡面的資料。)

開機進 linux

這台是小時候買的,那時候還拿來打楓之谷。 家裡電腦都是超舊的 32 位元的,有 windows 7 也有 xp。 只有後來升大學後買的電腦比較新,也就都是 64 位元。

本來還不確定能不能用 usb 開機, 因為我聽說以前電腦都是光碟開機, 只有比較新的有隨身碟開機的功能。 看了 bios 裡面只有 hdd cd floppy 三種選項, 本來想沒救了,但還是姑且一試插著開機碟, 結果竟然可以;原來隨身碟會顯示在 hdd 下面。

但按 F12 進開機選單時,所有 hdd 都在同一個選項下, 包括內建的硬碟和外接的隨身碟, 不能選要用哪個開,要改得要按 F2 進 bios, 按 F5 F6 調硬碟的開機順序。

開機光碟 cd fs 格式的問題

於是就隨便拿了一顆隨身碟來開機,因為 cpu 是 32 位元, 就拿了 玩具烏托邦finnix 來用, 這張映像檔有 32 也有 64 位元, 而且用來救援的 os,相容性應該不錯。

結果開機後開機碟的 boot loader isolinux 一直顯示 operating system not found, 我也不知道怎魔回事,一開始還以為是筆電不支援隨身碟開機。 後來死馬當活馬醫,隨便換一顆 ubuntu 64 位元的,竟然就可以了; 只是會顯示該 cpu 為 32 位元,無法開機。

檢查了二個隨身碟有什麼不同, 這二顆都是用 cat cdrom.iso > /dev/sdz 做的, 結果發現用 file 檢查映像檔時,顯示的訊息不太一樣:

~ $ file finnix-ckhung16c.iso ubuntu-18.04-desktop-amd64.iso 
finnix-ckhung16c.iso:           ISO 9660 CD-ROM filesystem data 'Finnix 110' (bootable)
ubuntu-18.04-desktop-amd64.iso: DOS/MBR boot sector; partition 2 : ID=0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startsector 3672780, 4672 sectors

finnix 的檔案開頭是 32kb 的 null,而 ubuntu 開頭有東西。 所以 finnix 的檔案就是 cd 映像檔沒錯, 但 ubuntu 似乎是一個 mbr 分割的硬碟的映像檔。 (可是我掛載 ubuntu 映像檔時, 也是用 cd 的格式去掛載,這我就無法解釋了。)

所以我推測是該筆電用隨身碟開機時,是只把隨身碟當硬碟來讀 所以如果是 cd 格式會開不起來。 我知道 ubuntu 和 debian 的開機碟映像檔都是 mbr 格式, finnix 可能因為本來是設計來燒成 cd 的,所以就是 cd 格式。

另一可能是下載時,其實 ubuntu 也有分很多版本, 有 cd dvd usb,可能是 finnix 是 cd only 的, 而一般隨身碟要用 hybird image,同時是 mbr 也是 cd 的。

antix 與切割開機碟

我後來是用 antix,這款號稱設計給老舊機器的發行版, 選了他的 i386 full 版本。 antix 的開機選項蠻多的,開機選單也很華麗, 可以選視窗管理程式、解析度、是否要存檔, 但倒是沒有像 finnix 把不同位元放在一起, 可能是會讓空間變二倍吧。

antix 還有一個功能是能在隨身碟上永久使用; 用 overlay fs 技術加上 loop device, 先建一個大檔案,把該檔案掛載成塊裝置, 之後格式化為作業系統,再用 overlay fs 在原本唯讀的開機碟系統上疊一個可寫的檔案系統。

而且由於 antix 才 1G 多,隨身碟後面還有空間, 可以用 fdisk 再切出新分割,把檔案系統映象檔丟在上面即可; 甚至是直接把該分割掛載成 home。 這種作法似乎是從 puppy linux 開始流行的, 只要帶著一顆隨身碟,全世界的電腦都可以是我的電腦。 後來一些可以裝在隨身碟的輕量 linux 都會加這功能。

如果再把加密的技術應用上去,加密檔案系統的映像, 那就和 tails 的作法有點像。 每次開機後要先解密映像才會看到資料, 不然只是一個空的作業系統。

usb 3.0 的問題

另一個問題是我用另一顆 usb 3.0 的隨身碟會無法開機, 我猜是該 bios 可能不能用 usb 3.0 開機,但進作業系統後, 無論是 linux 還是 xp 都可以讀到 usb 3.0 的內容。 所以可能是無法開機的問題而已。