AUFS:如何僅建立目錄樹的一部分的讀/寫分支?

AUFS:如何僅建立目錄樹的一部分的讀/寫分支?

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 執行此操作的正確方法是什麼?

我可以想到以下幾點:

  1. 以某種方式修改第一個掛載指令
  2. 在第二次掛載之前使用 aufs add/del 新增更多掛載指令
  3. /dir2只需刪除啟動時不應保留的樹即可
  4. 部分樹 ( etc, bin, boot, lib, etc) 中tmpfs

參考文獻 1:https://help.ubuntu.com/community/aufsRootFileSystemOnUsbFlash
參考文獻 2:http://aufs.sourceforge.net/aufs.html

答案1

選項1auFS本身不支援這樣的安裝選項,因此選項#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/etcRAM 中,因此在重新啟動後無法儲存。/home例如,其他檔案被寫入/dir2/home,這是一個可讀可寫入的檔案系統,因此在重新啟動後仍然存在。

另一種解決方案:我還使用使用覆蓋檔案系統並保留使用者資料的客戶端系統。我是這樣解決的:只是一個只讀檔案系統和一個安裝在其上的 tmpfs。稍後,當使用者登入時,我從 samba 伺服器掛載他的主目錄,使其可讀寫。因此,他的所有用戶資料都儲存並保存在 中/home,其餘資料在重新啟動後無法保存。在您的情況下,您可以放入/home另一個可讀寫的實體分割區,然後將其安裝到/aufs/home.

相關內容