Linux

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

  • December 5, 2017

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 的正確方法是什麼?

我可以想到以下幾點:

  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

選項 #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.

引用自:https://serverfault.com/questions/693792