AUFS:如何創建僅部分目錄樹的讀/寫分支?
AuFS(另一個聯合文件系統)允許我們將兩棵樹合併為一棵,即使這些樹重疊。然後,我們可以將合併樹的寫入指向其中一個分支並讀取到另一個分支。
它的經典用途是使用快閃記憶體文件系統和 ram 磁碟,像這樣(參考 1)創建一個不會破壞 Linux 的只讀根文件系統。所有文件寫入都進入 ram。重新啟動後,系統會自行恢復到出廠配置。
/dir1
= 只讀/dir2
= 讀/寫/aufs``/dir1
=和的合併/dir2
/aufs
然後重新安裝--move
以使其成為/
(根)簡化後,(參考文獻 1)中的範例就是這樣做的
mount -t aufs br=/dir2:/dir1 /aufs mount --move /aufs /
但是,我想使用它以使可寫 (
/dir2
) 位於真實磁碟上,而不是 ramdisk 上。這樣在重新啟動後它將保留其數據。但我需要確保不保留 dir2 中的某些文件並恢復到它們的 (
/dir1
) 預設值。這可確保未來的引導始終使用原樣文件。不會失去使用者和記錄數據。
/etc
例如,在,/bin
,/boot
中更改的文件/usr
不應在重新啟動後繼續存在。AUFS 網頁(參考文獻 2)的範例很少。
那麼問題來了:使用 AuFS 的正確方法是什麼?
我可以想到以下幾點:
- 以某種方式修改第一個掛載命令
- 在第二次掛載之前使用 aufs add/del 添加更多掛載命令
/dir2
只需刪除在引導時不應保留的樹- 部分樹 (
etc, bin, boot, lib, etc
) 在tmpfs
參考 1:https
://help.ubuntu.com/community/aufsRootFileSystemOnUsbFlash 參考 2:http ://aufs.sourceforge.net/aufs.html
選項 #1:
auFS
它本身不支持這樣的掛載選項,所以選項 #1 已失效。你必須解決這個問題。選項#3:當然,您可以在每次啟動時簡單地刪除這些目錄。這可能是我在這裡看到的最簡單的方式。
選項 #2:您可以使用
tmpfs
. 所以首先創建一個tmpfs
,假設大小為 500 MB:mount -t tmpfs -o rw,size=500M tmpfs /tmpfs
我們現在有:
/dir1
: 只讀/dir2
:讀/寫/tmpfs
: 在 RAM 中讀/寫/aufs``/dir1
:和的疊加/dir2
在裡面
/tmpfs
,我們創建了你想要保留的那些目錄:mkdir -p /tmpfs/{etc,usr,boot,bin}
請注意,當我們已經合併兩個目錄時,我們會這樣做。所以當目錄樹
/aufs
已經存在時。但是,現在我們為每個應該保留的目錄執行一次 aufs 掛載:mount -t aufs -o dirs=/tmpfs/etc=rw:/dir2/etc=ro none /aufs/etc mount -t aufs -o dirs=/tmpfs/usr=rw:/dir2/usr=ro none /aufs/usr mount -t aufs -o dirs=/tmpfs/boot=rw:/dir2/boot=ro none /aufs/boot mount -t aufs -o dirs=/tmpfs/bin=rw:/dir2/bin=ro none /aufs/bin
您現在有一個目錄樹,
/aufs
您可以在任何地方寫入文件,但是當您寫入時/etc
,它將被寫入/tmpfs/etc
RAM 中的 . 例如,其他文件/home
被寫入/dir2/home
,這是一個可讀寫的文件系統,因此在重新啟動後仍然存在。另一個解決方案:我還使用使用覆蓋文件系統並保留使用者數據的客戶端系統。這是我解決它的方法:只需一個只讀文件系統和一個安裝在它上面的 tmpfs。稍後當使用者登錄時,我從可讀寫的 samba 伺服器掛載他的主目錄。因此,他的所有使用者數據都儲存並保存在 中
/home
,其餘的在重新啟動後無法倖免。在您的情況下,您可以將/home
其放入另一個可讀寫的物理分區,然後將其掛載到/aufs/home
.