2007年12月12日 星期三

Aufs Overlap Check Bug

Standard
Aufs 是一個能結合各種 FileSystem 到同一個分區的聯合檔案系統機制,它在這兩年內快速竄起,取代了其 Unionfs 的地位。而關於其歷史背景和較詳細的介紹,有興趣的人可以參考我過去的文章『取代Unionfs的好東西 - Aufs』。

還記得我最後一次 Compile Aufs 是在去年底今年初的時候﹝抱歉。詳細日期記不太清楚﹞,使用 CVS 直接從 SourceForge 取得的最後版本﹝Aufs 專案本身沒有提供打包好的 Source Package 只能用 CVS 取得﹞。Aufs 被我使用在當時正在研發的一些 Embedded 系統內,將原本的 rootfs 放在 Aufs 之上以得到更多的擴充性。我將所有的 FS-Modules 藉由 loopback 而 mount 到 /dev/unionfs/[0-X] 之中,最後再用 Aufs 將這些目錄與 rootfs(/) 做結合。那時候一切都很正常,我也很滿意。

這幾天,因為舊 Linux Kernel 許多的 Bug 和缺少某些 Device Drivers 的情況下,我只好將 Kernel 更新並重新 Compile 來一勞永逸,順帶了也更新了一些 patch 和功能的版本,而 Aufs 就是在這幾天被我更新的。可是當一切準備就續後,卻發現 Aufs 在我的系統上總是出現 Overlapped 的訊息,它不讓我將 /dev/unionfs/[0-X] 加入到根目錄的 Aufs 上。之後搞了半天,才發現 Aufs 這幾個月的更新,使檢查 Overlap 的部份有錯誤。

於是,我直接將檢查 Overlap 的 function 的 return,改成 Always 回傳沒問題,這問題就解決了。當然,這是『不正確』的方法,我只是讓 Aufs 跳過不檢查是否有 Overlap 的情形發生。要是碰到出狀況,無限循環會讓系統整個大亂,到時候就欲哭無淚。