開機時根目錄用aufs, move mount - Linux

James avatar
By James
at 2012-10-19T09:44

Table of Contents

回文太多又太長,我就直接回文了,

小弟退伍後是到某公司做thin client的,常常跟aufs在做搏鬥,

這邊略為闡述一下小弟的心得,若有謬誤之處望各位前輩指正。


Q:為何要squashfs配aufs?

A:squashfs的壓縮率很高,直接把squshfs掛起來當作/是目前distro livecd主流作法。

當我們一片live cd開機進去系統時,你明明整個檔案系統是在一片光碟上,那應該是

唯獨的,但是我們卻可以任意touch檔案,為什麼?因為系統在/上鋪了一層aufs。

檔案系統(兩個類似bind在一起)
|
-------
唯 可
讀 寫
squashfs aufs

如果我們在上面更改任何一個檔案,aufs會把更改後的檔案存在它那邊,把原本的唯獨

的檔案藏起來,也因為aufs是存在ram裡面的,一旦開機重開之後,aufs就重新鋪回去,

之前做的修改也就都不見了,整個系統就恢復原狀。


Q:掛aufs有沒有什麼限制?

A:有,你在自己底下掛自己是OK的,但是一定要跳出來再回去,否則不會生效。

例如我現在在/home底下執行:

sudo mount -n -t aufs -o "br:/wfs/aufs//home=rw://home=ro" aufs //home

我如果沒有cd ..出去再進來,那麼/home的aufs就不會生效。

這產生了一個問題:

該死,我已經在/底下了,我如果這時候要掛/為aufs,我跳不出來!!

只有一個辦法,就是先在initrd/initramfs先掛好,因為當時你的/跟pivot chroot進

真正的/是不同的。這個問題在ubuntu下有詳述做法:

https://help.ubuntu.com/community/aufsRootFileSystemOnUsbFlash

這邊也有個project在做這個(簡介:不讓愚蠢的使用者破壞我們心愛的系統):

http://code.google.com/p/rootaufs/

上述兩個作法是需要initrd/initramfs的。


Q:有別的想法嗎?

A:我們重新檢視一下,為什麼我們要掛整個系統是aufs??我是說,有人平常會在

/底下隨便touch檔案或是把東西丟到那邊嗎?我想不會,大部分的時候,我們只不過

是在/home/user底下作業而已,所以真正該掛的目錄其實只有:

1. /etc
2. /home
3. /usr/share

大概就這樣,/var 跟 /tmp系統在mountall時會幫你mount成tmpfs,剩下就讓它唯獨吧。

好處是你不用重新更改initrd/initramfs,你只要新增一個開機script丟在mountall之前

做aufs就好了。

不過我因為要開發東西,有時候懶得重新把squshfs燒到flash上,所以我多mount了幾個

資料夾:

1. /bin
2. /sbin
3. /lib
4. /opt
5. /usr (就不用mount /usr/share了)

因為平常dpkg或是apt-get套件,東西大部分會丟這幾個資料夾。

這樣衍生了一個問題,/ 是唯獨,apt-get會出錯:

我發了一個ask 在 launchpad上:

https://answers.launchpad.net/ubuntu/+source/util-linux/+question/210118

那個時候,我的解法是下參數 --instdir=來解決。

可是這樣還是有一小部份帶有postinst script 的 package不能裝。

直到我的經理翻出了linux kernel squashfs給我看:

fs/squashfs/super.c:

有一個初始函式squashfs_fill_super 中有一行:

sb->s_flags |= MS_RDONLY;

難怪我在kernel cmdline下明明都下rw,進系統後還是ro。因為根本就強制幫你加上去。

註解掉這一行後,你就可以騙系統,把squashfs mount成rw了。反正你硬要touch,系統

還是會阻止你。但是,現在就可以騙過dpkg跟apt-get了。 :)

--
Tags: Linux

All Comments

Connor avatar
By Connor
at 2012-10-21T21:23
好像也有 live CD 是用 device mapper 來作這件事(?)
Erin avatar
By Erin
at 2012-10-26T21:15
其實我比較好奇的是:為什麼我用的方法會出問題
Jake avatar
By Jake
at 2012-10-27T23:54
你第二個部分講的只掛一部分,我現在就是這樣做
Agnes avatar
By Agnes
at 2012-10-31T20:37
想把整個/掛起來,算是好玩吧?我現的在想法是:不知到aufs怎麼
Tristan Cohan avatar
By Tristan Cohan
at 2012-11-03T15:47
認br:的路徑,因為我平常看到的作做都是: /ro /rw 直接在/下
Bethany avatar
By Bethany
at 2012-11-04T23:10
mount -t aufs -o br=/rw:/ro /root,再用move mount吧/ro,rw
放到/root/ro,rw 再exec chroot
Puput avatar
By Puput
at 2012-11-08T06:13
可是現在看到的(debian6)的做法(沒有用aufs時)是:
Vanessa avatar
By Vanessa
at 2012-11-12T02:44
mount device /root, 然後用klibc的run_init
Quintina avatar
By Quintina
at 2012-11-12T05:50
run_init先cd /root,清掉tmpfs,再mount('.','/',0,MS_MOVE,0)
Edward Lewis avatar
By Edward Lewis
at 2012-11-16T01:13
再chroot('.'), chdir('/'), exec(init)
Leila avatar
By Leila
at 2012-11-16T21:29
這次放假我試試,要不然我只能跟學長要他的script來看。
Eartha avatar
By Eartha
at 2012-11-21T20:26
我是弄得出來沒有問題, 只是好奇為什麼這一個方法行不通啦
Robert avatar
By Robert
at 2012-11-24T08:12
是說你第一部分講的:要跳出再跳入,其實在mountpoint那一層
cd . 就可以了
Brianna avatar
By Brianna
at 2012-11-25T10:32
現在是在想move mount有沒有干擾到aufs
Selena avatar
By Selena
at 2012-11-27T16:04
剛看了一下code,好像是用一開始拿到的directory struct去讀原
本的檔案系統上的東西?
Olivia avatar
By Olivia
at 2012-11-28T15:15
跟kernel不熟,其實不太懂中間的很多操作

開機時根目錄用aufs, move mount

Zanna avatar
By Zanna
at 2012-10-18T21:50
(1): 今天原本的目標是在initramfs時,把root fs用aufs包起來(像live CD) 所以從 kernel cmdline開始: linux vmlinuz break=mountroot ... (initramfs) mkdir /root/ro /root/rw (initramf ...

Ubuntu上用wine 1.4安裝Adobe Reader XI

Aaliyah avatar
By Aaliyah
at 2012-10-18T15:47
因為昨天看到Ubuntu論壇上有人提到Adobe Reader的文件保全功能限定要用Adobe Reader X以上;剛好Ubuntu裡有灌Wine 1.4,所以就把最新的Adobe Reader用Wine安裝,安裝是成功 了,可是無法使用保護模式的樣子(它寫說系統架構不支援QQ). 正常的pdf開啟是 ...

bridge觀念?

Catherine avatar
By Catherine
at 2012-10-18T10:31
hi all, 向各位高手請教,一般的橋接器與VM裡的bridge或linux bridge是否為一樣的東西,目的都是在連接二個不同網段的機器 ,轉送廣播封包?謝謝 - ...

隨身硬碟安裝Mint13

Rosalind avatar
By Rosalind
at 2012-10-18T01:09
我是一位想要嘗試Linux系統的新手 日前經過上網查詢資料後 決定先以Mint13 KDE 為起點 但是礙於現有的硬碟空間不足 於是買了一個 Buffalo PNTU3 Ministation 500G的隨身硬碟 將其全部格式化後 透過Vbox模擬只有光碟機的情況下安裝進去 安裝時以 自訂安裝 ...

libreoffice 的亂碼

Sandy avatar
By Sandy
at 2012-10-16T22:55
我又出現了 這次還是Java的問題 之前參考網路上的資料修好了Java的中文亂碼 但換libreoffice出現方格子 目前的解決方法是換系統預設字型 但… 我沒有好看的中文字型 所以… 現在電腦畫面好醜 有什麼辦法可以治本的嗎 或推薦我中文字型也行(X - ...