2009年2月16日 星期一

有關系統碟防寫...

這個隨身碟原本裝的是安裝好的 CentOS 5.1, 我只是要實驗看設唯讀後系統會不會出啥茶包, 結果是有兩個檔案依舊會想寫入系統碟, 分別是 /etc/mtab~ 與 /var/lib/stateless/writable/ 這兩個, 於是從 /etc/rc.sysinit 裡檢驗看是誰在用這兩個, 意外找到一個設定檔原本就可以設定系統碟為 "唯讀" 
以下請小心操作, 會把系統搞掛:
/etc/sysconfig/readonly-root 裡:
# Set to 'yes' to mount the system filesystems read-only.
READONLY=no # 這行改 yes
# Set to 'yes' to mount various temporary state as either tmpfs
# or on the block device labelled RW_LABEL. Implied by READONLY
TEMPORARY_STATE=no #這要不要改 yes 我沒試過
# Place to put a tmpfs for temporary scratch writable space
RW_MOUNT=/var/lib/stateless/writable
# Label on local filesystem which can be used for temporary scratch space
RW_LABEL=stateless-rw
# Label for partition with persistent data
STATE_LABEL=stateless-state
# Where to mount to the persistent data
STATE_MOUNT=/.snapshot
就可以了
不過因為一堆東西都不能寫去 /var, 所以系統會死掉. 科科~~

好了進入正題, 目前研究出來的做法是這樣:
1.要有兩個 linux 系統, 而不是對現在開好機的系統動刀. 假設我們把要改的系統 mount 到 /mnt/usb
2.把 /mnt/usb/var/log 底下除了 rpmpkgs 以外檔案清掉, cd 到 /mnt/usb, 把 var 壓起來, 比方說壓成 garbage.tar.bz2 (擺 /mnt/usb 下 )
3.原本的 /mnt/usb/var rename成 /mnt/usb/__var 或別的名字
4.在 /mnt/usb 做一個 link, ln -s /dev/shm/var var (這時是無效的 link)
5.在 .mnt/usb/etc/rc.d/rc.sysinit 找到這區, 在後面加上:
---------------- etc/rc.d/rc.sysinit -------------

# Mount all other filesystems (except for NFS and /proc, which is already
# mounted). Contrary to standard usage,
# filesystems are NOT unmounted in single user mode.
action $"Mounting local filesystems: " mount -a -t nonfs,nfs4,smbfs,ncpfs,cifs,gfs -O no_netdev

mkdir /dev/shm/var /dev/shm/tmp #可做可不做
tar jxf garbage.tar.bz2 -C /dev/shm
mount --bind /__var/lib/rpm /var/lib/rpm #這行是為了以後多增加軟體用.
mount -o remount,ro / #到這再把系統碟上鎖為 read-only.
---------------- etc/rc.d/rc.sysinit -------------
之後如果有特別需要要改檔案時, 用 mount -o remount,rw / 解鎖就可以了.

這樣修改之後, 除了有些軟體還是很不乖的會去複寫系統檔案 (像 dhclient 會複寫掉 /etc/resove.conf 與 /etc/yp.conf ...) 以外整個系統運作都還算正常, 隨身碟也因為以唯讀的方式運作免去因重複寫入造成快速毀損的問題, 可以多造幾個這樣的東西, 以備往後系統爛掉時可以馬上抽換隨身碟重開機, 又可以復活了.

沒有留言: