您好,登錄后才能下訂單哦!
本篇內容介紹了“如何理解ext2文件系統中的xattr”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
文件系統支持一特性就是擴展性,給一個文件(inode)添加各種屬性。對于ext2文件系統來說,xattr(extend attribution)是它支持的為數不多的現代文件系統的特征之一。
那么為什么需要這個特性呢?這要從文件系統的元數據和數據的區別說起。xattr屬于元數據,元數據一般是固定的,但一些場景下它也要提供一定的擴展性,而xattr就是為元數據的擴展性而存在的。下面扯下我對元數據和數據的理解,分析下為什么需要元數據。
我們知道文件的數據分為兩類:元數據(meta data)和數據(data)。元數據是用來控制用戶對數據的操作的。這也符合k8s中通過對象控制對象的程序范式。
數據:記錄真正對用戶有意義的信息。如:文件中的內容;文件名。
元數據:輔助完成數據存取。如:文件的創建、修改時間,文件的權限。
一般來說元數據不需要用戶主動感知,比如文件創建時,對應的時間信息由文件系統自動寫入。但必需以不同的方式提供它的訪問。如果和常規數據放一起了,如下:
filename: hello.txt modify_time: 2021-3-7 20:00:00 regular_data: hello world
這種方式可行嗎?當然可行了。只是你無法控制用戶是否會誤操作,把對應的元數據改掉了;模塊化編程的原則之一最小接口原則,在這里也適用,單獨的接口修改,對比直接的修改來說,接口的能力(自由度)下降了,系統對用戶的約束增強了,可以避免用戶對數據的亂修改。
另外一個問題是,元數據的變更是穩定的,即使你頻繁地讀寫一個文件,這個文件的元數據需要修改的只是對應的訪問時間戳和修改時間戳。沒有分開的情況下,元數據整體被頻繁的讀出,寫入,這對系統來說是無意義的消耗,更別說在那個計算能力不足的年代背景下了。
通過以下分析,我們知道元數據需要單獨存儲。單獨存儲就需要單獨的接口,因為普通文件的讀寫接口權限過大。但一方面,對一個文件來說,通過的讀寫接口不能滿足對元數據修改的需求,需要提供其他系統接口。Linux下就是用ioctl系統調用實現對元數據的修改的。
主要setfattr和getfattr。通過查看ext2代碼才知道,它支持三種類型的attr。通過不同的命名前綴區分。
security.xxx: 目前是selinux在用;
user.xxx: 普通用戶也可以使用;
trusted.xxx: 只有超級用戶可以使用,可以用來在用戶空間實現一些特性。
示例:
為test文件增加一個屬性。
setfattr -n user.word -v "hello world" test getfattr -n user.word hello # file: hello user.word="hello world"
目前了解的是ceph演進過程中,曾經用xattr來保存底層的一些信息;
安全審計相關的應用會用到security attr;
attr同樣也支持給目錄增加屬性,可能某些場景下可以用到,暫時沒有想到。
“如何理解ext2文件系統中的xattr”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。