
AuFS(另一種聯合檔案系統)允許我們將兩棵樹合併為一棵,即使這些樹重疊。然後,我們可以將合併樹的寫入定向到一個分支,並讀取到另一個分支。
它的經典用法是使用閃存檔案系統和 RAM 磁碟,例如這(參考 1)建立不會破壞 Linux 的唯讀根檔案系統。所有檔案寫入都會寫入記憶體。重新啟動後,系統將自行恢復至原廠配置。
/dir1
= 唯讀/dir2
= 讀/寫/aufs
= 和 的/dir1
合併/dir2
/aufs
然後重新安裝以--move
使其/
(root)
簡化後,(參考 1)中的範例就是這樣做的
mount -t aufs br=/dir2:/dir1 /aufs
mount --move /aufs /
但是,我想使用它,使可寫(/dir2
)位於真實磁碟上,而不是虛擬磁碟上。這樣重啟後它將保留其資料。
但我需要確保 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
選項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
.