在 M515 電腦教室用隨身碟開機


[適用於 107 上學期朝陽資管 M515 教室 「作業系統」、 「人工智慧應用」 兩門課程。]

一、 第一次上課如何開機

  1. 老師幫你的隨身碟加持/祝福一下。 這會建立一個開機選單、 用掉大約 100MB 的空間。
  2. 電腦關機。
  3. 插入隨身碟。
  4. 開機, 迅速按下 F9。
  5. 在 (主機板上的韌體) BIOS 的開機選單畫面裡, 找到 "Hard Disk" 底下的某個 "USB-HDDx" (應該會看到你的隨身碟的廠牌名稱)
  6. 如果出現兩個同名稱選項, 一個是 legacy, 另一個是 UEFI, 請選 legacy
  7. M515 教室第二層開機選單 進入第二層開機選單 (看到朝陽空拍圖) 時, 請選 「M515 bionic forgetful」。 這是 live 版, 有點像還原卡的效果, 你所做的一切, 在關機時會完全被遺忘! (除非你特地指定要把某些檔案存入隨身碟。)
  8. 設定網路: sudo bash 變身成 root、 ip link 查看網卡名稱 (忽略 lo, 那個是假的)、 nano /etc/network/interfaces 按照 這篇 填寫。 網卡名稱 (eth0) 可能要改。 其他數字也要按照教室螢幕右下角的數字更改。 (開機隨身碟上的 /boot/interfaces 也有參考範例。) ifup eth0 啟動網卡、 echo 'nameserver 8.8.8.8' > /etc/resolv.conf 設定 DNS。 更多網路設定與除錯教學, 請見 「網路基本指令」

二、 自製更多開機隨身碟

以下只需要做一次 (從伺服器抓取開機所需的最基本檔案、 存入硬碟)

mkdir /mnt/live
df
mount /dev/mapper/m515-live /mnt/live
df                              # 確認比先前多出一列
cd /mnt/live
ls -l
wget https://v.im.cyut.edu.tw/ftp/18/m515-boot-files.tar
ls -l
md5sum m515-boot-files.tar      # 確認跟網頁上的 00md5sum.txt 內容相同
umount /dev/mapper/m515-live
df                              # 確認比先前少了一列

每做一支開機隨身碟都需要重複一次以下的動作:

ls /dev/sd*
fdisk -s /dev/sd?
# 現在插入隨身碟
ls /dev/sd*
fdisk -s /dev/sd?
# 確認多出一顆隨身碟, 容量正確。
# 以下請將 /dev/sdz 改成正確的名稱
mbootuz.py mkboot /dev/sdz
# 建立開機選單!只有這個動作非在 linux 下做不可

# 以下都只是複製/解壓縮, 在 windows 底下也可以做。
mount /dev/sdz1
mount /dev/mapper/m515-live /mnt/live
df
# 確認多出兩列
cd /media/sdz1
ls -l
tar xvf /mnt/live/m515-boot-files.tar
ls -l                           # 多出 grml-g18B/ 跟 bionic-g18E/

## 如果希望在 M515 之外的地方也能用
## grml linux (純命令列救援版)
## 需要多佔 0.5G 的空間
# tar xvf /mnt/live/g.tar
## 從此以後, 空拍畫面選單上的 「grml ... boot to ram」 就可以使用

## 如果希望在 M515 之外的地方也能用
## lubuntu linux "bionic beaver" (上課用的完整版)
## 需要多佔 5G 的空間
# tar xvf /mnt/live/b.tar
## 從此以後, 空拍畫面選單上的 「lubuntu ... forgeful」
## 跟 「lubuntu ... boot to ram」 就可以使用

umount /dev/mapper/m515-live
umount /dev/sdz1
df
# 確認少了兩列

四、 在隨身碟上製作 「有記憶版」

隨身碟上的 「有記憶版」 稱為 persistence 技術。 它需要再多佔用 2G 的隨身碟空間。 只要把隨身碟掛載起來, 然後 gunzip < /media/sdz1/boot/persistence0.img.gz > /media/sdz1/bionic-g18E/stux.img (耐心! 需要等幾分鐘...) 再卸載隨身碟, 下一次拿它開機時, 到了朝陽空拍畫面, 即可選擇 「lubuntu 18.04 g18E persistence」 這個選項。

製作 M515 教室的 「有記憶版」 以這種方式開機之後, 如果下 df 指令, 應該要看到有一列大約 2G 大小的 persistence/loop1 裝置; 如果沒看到, 有可能是設定檔寫錯, 或 stux.img 放錯地方。 如果有看到這一列, 從此以後你的工作階段就可以延續下去了。

以後如果不小心把系統玩爛掉了, 也可以用相同的方式重新建立一個乾淨的 stux.img 效果類似於 (只在當次) 還原到最原始的狀態。

五、 製作 M515 教室的 「有記憶版」

製作 M515 教室的 「有記憶版」 以上的使用方式, root file system 都是放在一個很大的、 唯讀的壓縮檔裡面, 所以才可以很省空間; 但也因此讓寫入資料變得很麻煩。 請下 df 查看, 其中有一列的掛載點名為 ...squashfs, 且已用百分比為 100% , 這就是那個 「很大的、 唯讀的壓縮檔」。 用 ls ... 查看, 會看到 bin、 dev、 etc、 lib、 usr、 ... 等等目錄, 這些就是完整的 linux 所需要的檔案。

  1. 把 /dev/mapper/m515-CLASSNAME 掛載起來。 (請把 CLASSNAME 改成 c_os 或 c_ai)
  2. 把上述 ...squashfs 目錄下所有檔案與子目錄全部複製到 /dev/mapper/m515-CLASSNAME 的掛載點。 (耐心! 需要等幾分鐘...)
  3. blkid /dev/mapper/m515-CLASSNAME 查看它的 UUID
  4. 編輯 m515-CLASSNAME 底下的 etc/fstab , 把原先被註解掉的 UUID=... 那一句打開, 並且改成正確的 UUID。
  5. 編輯 m515-CLASSNAME 底下的 etc/network/interfaces 及 etc/resolv.conf
  6. 修改隨身碟上的設定檔 boot/syslinux/extlinux.conf 把 m515-bionic-CLASSNAME 那一段的兩處 CLASSNAME 改掉, 以後開機開到朝陽空拍畫面時, 即可選擇最後一個 (完整版) 的選項, 而且網路設定會記起來, 不再需要每次重開機就重設一次。

重開機之後, 建議在 /etc/fstab 裡面加上這兩列:

/dev/mapper/m515-live /mnt/live auto user,noauto 0 2
/dev/mapper/m515-data /mnt/data auto user,noauto 0 2
    
並且建立那兩個掛載點, 以後比較方便。

六、 下一步

想要在其他電腦上用隨身碟開機, 也是一樣開機時需要按某個鍵才能看見開機選單。 但到底該按哪個鍵? 每部電腦不一樣。 「百毒不侵救命碟」 使用入門

再來, 到這一頁: 「從零開始的 linux 學習指南」 從 「安裝成功之後」 開始你的電腦自由之旅吧!

七、 進階: 在隨身碟上建立 zfs、 安裝完整版

隨身碟上若要安裝完整版, 採用 zfs 會是較佳的選擇。 本節的動作會 燒毀你的隨身碟, 所有資料會消失!

  1. 掛載 /dev/mapper/m515-data 、 把先前下載的 bionic-6-apps.zsnap.gz 複製到那個 logical volume 去。
  2. 燒毀! mbootuz.py wipe -L 12G -t bf /dev/sdz 清空 sdz 整顆隨身碟的資料、 第二分割預留 12G 給 linux 將製成 zfs (type bf)。 其餘空間配給第一分割儲存資料, 可與 windows 交換檔案。
  3. 建立開機選單: mbootuz.py mkboot /dev/sdz
  4. 把先前開機隨身碟的 extlinux.conf 複製過來。
  5. 先設定一個名字: export ZPNAME=你(選)的名字 例如老師有好幾顆 sandisk blade, 所以這樣命名: export ZPNAME=sanBLa
  6. 在 /dev/sdz2 上面建立一個 zpool: zpool create $ZPNAME /dev/sdz2
  7. 把整個作業系統搬到第二分割裡: zcat /mnt/data/bionic-6-apps.zsnap.gz | zfs receive -d -Fu $ZPNAME
  8. 上面那個指令要等很久。 此時可以先把 /dev/sdz1 掛載起來, 編輯 boot/syslinux/extlinux.conf , 裡面加一個選項類似這樣:
    label zfs-bionic
    	menu label lubuntu 18.04 on zfs
    	kernel /bionic-g18E/vmlinuz-4.15.0-24-generic
    	append initrd=/bionic-g18E/initrd.img-4.15.0-24-generic apm=power-off vga=791 nomce net.ifnames=0 boot=zfs root=剛剛選的名字/ROOT/bionic
    
    改完之後, 卸載 /dev/sdz1 。
  9. 另外, 也請把開機所需的兩個檔案 (kernel 跟 initrd) 複製到正確的位置 (bionic-g18E/ )。
  10. (等到搬完之後) 暫時變更 root file system 的掛載點: zfs set mountpoint=/mnt/t1 $ZPNAME/ROOT/bionic
  11. 掛載: zfs mount $ZPNAME/ROOT/bionic
  12. 確認 /mnt/t1/etc/fstab 裡面, root file system 那一句被註解掉了。 另外, /mnt/t1/etc/network/interfaces 裡面預設的那些複雜設定, 是為了 在 ubuntu 底下建立 kvm 虛擬機的網路, 可以不要去動它, 也可以改成簡單的 dhcp。
  13. 卸載: zfs umount $ZPNAME/ROOT/bionic
  14. 把 root file system 的掛載點改回來: zfs set mountpoint=/ $ZPNAME/ROOT/bionic
  15. 移除隨身碟之前必須先 zpool export $ZPNAME 有一點類似 umount /dev/sdz2 的意思, 但因為它是 zpool , 所以用的指令不同。

詳見 在 zfs 裡面栽種很多個作業系統

附錄、 linux 電腦開機過程的重要檔案

linux 電腦開機過程的重要檔案