2014年12月15日 星期一

[Linux] lunbuntu + unetbootin + live USB


這超迷你版的USB,哈~ 超無痕的。可惜速度是假USB3.0


unetbootin 用來製作 live USB 這件事情就不用說了,Easy and more in google.


稍微解說一下原理:
載用syslinux 的booting loader 來帶起作業系統,因為是live 每次開機都會洗掉,根據這點很輕易的就可以在
"/xxx/xxx" 發現採用squashfs 一個read-only 壓縮檔案系統,這邊看起來都跟平常工作的嵌入式系統類似,特別的是
unetbootin 是有提供使用者讀寫修改,下次重開機可以記錄保留的效果

何等神奇!!! 馬上下一個 mount & losetup -a 檢查一下

root@lubuntu:~# mount /cow on / type overlayfs (rw) 
/dev/sdb1 on /cdrom type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro) 
/dev/loop0 on /rofs type squashfs (ro,noatime) 
/dev/loop1 on /media/bejo/c698766a-48e2-6d45-81ae-fe5fba3ff6f2 type ext2 (rw,nosuid,nodev,uhelper=udisks2)
root@lubuntu:~# losetup -a 
/dev/loop0: [0811]:35 (/cdrom/casper/filesystem.squashfs) 
/dev/loop1: [0811]:41 (/cdrom/casper-rw) 

loop1 就是那神奇的 casper-w

如果你做一個 mount 動作
mount -o loop casper-rw /mnt/xxx
就會發現長得非常類似(根本一樣 = =) 一個基本的file system 又剛剛好是你改過的檔案

哪有這麼剛好,原來 ...
是 overlap ... mount

原理就是先掛一個static 的image 再把自己可以修改的蓋上去,噹噹  完成檔案系統可以紀錄被修改的樣子
效果就會 ---> 先讀取可讀寫的 如果沒有 ---> 讀取靜態的 ---> 結束這回合

孔明先生,這太妙了。

說一下重點:
1. 從此只要備份好 casper-w 這個檔案,凡是live usb 都可以被還原 (自己還原自己作)
2. 可以加大 casper-w 大小
方法:
(找一台Linux  不是同一台!!!)
#dd if=/dev/zero bs=1M count=1024 >> casper-rw   // 1024MB ---> 自行更改 別超過4G
#e2fsck -f casper-rw
#resize2fs casper-rw

創造一顆新的:
#dd if=/dev/zero of=casper-rw bs=1M count=1024 
#mkfs.ext3 casper-rw

曾經想辦法突破4GB,受限於FAT32大小只能支援到此,
ext3 -> 可booting 更換不了超過4GB 
ext2 -> 開機不能
ext4 -> 開機不能
ntfs -> ... 你在開玩笑嗎?

只好認命了。

這種手法來記錄file system 的修改,印象似乎在OPENWRT也是如此,時光有限,待有緣再分享。