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

By James
at 2012-10-19T09:44
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了。 :)
--
小弟退伍後是到某公司做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

By Connor
at 2012-10-21T21:23
at 2012-10-21T21:23

By Erin
at 2012-10-26T21:15
at 2012-10-26T21:15

By Jake
at 2012-10-27T23:54
at 2012-10-27T23:54

By Agnes
at 2012-10-31T20:37
at 2012-10-31T20:37

By Tristan Cohan
at 2012-11-03T15:47
at 2012-11-03T15:47

By Bethany
at 2012-11-04T23:10
at 2012-11-04T23:10

By Puput
at 2012-11-08T06:13
at 2012-11-08T06:13

By Vanessa
at 2012-11-12T02:44
at 2012-11-12T02:44

By Quintina
at 2012-11-12T05:50
at 2012-11-12T05:50

By Edward Lewis
at 2012-11-16T01:13
at 2012-11-16T01:13

By Leila
at 2012-11-16T21:29
at 2012-11-16T21:29

By Eartha
at 2012-11-21T20:26
at 2012-11-21T20:26

By Robert
at 2012-11-24T08:12
at 2012-11-24T08:12

By Brianna
at 2012-11-25T10:32
at 2012-11-25T10:32

By Selena
at 2012-11-27T16:04
at 2012-11-27T16:04

By Olivia
at 2012-11-28T15:15
at 2012-11-28T15:15
Related Posts
開機時根目錄用aufs, move mount

By Zanna
at 2012-10-18T21:50
at 2012-10-18T21:50
Ubuntu上用wine 1.4安裝Adobe Reader XI

By Aaliyah
at 2012-10-18T15:47
at 2012-10-18T15:47
bridge觀念?

By Catherine
at 2012-10-18T10:31
at 2012-10-18T10:31
隨身硬碟安裝Mint13

By Rosalind
at 2012-10-18T01:09
at 2012-10-18T01:09
libreoffice 的亂碼

By Sandy
at 2012-10-16T22:55
at 2012-10-16T22:55