用附著屬性存儲邏輯文件系統元數據的方法
2023-06-03 11:33:31 1
專利名稱:用附著屬性存儲邏輯文件系統元數據的方法
技術領域:
本發明涉及元數據的存儲,特別涉及邏輯文件系統中元數據的存儲方法。
背景技術:
隨著計算應用的發展,日益增長的數據存儲需求和多種多樣的數據存儲訪問模式給文件系統的設計帶來了巨大的挑戰。文件伺服器作為一種集中存儲大量文件數據的計算機,其文件系統有著不同於一般計算機系統的特殊要求,文件伺服器一般有高性能的處理器,大量的內存以及大量的磁碟。為了適應文件伺服器的需求,本領域的技術人員設計了一種基於多個本地文件系統之上構建的邏輯文件系統。附圖1為一個典型的邏輯文件系統的結構圖,在該邏輯文件系統中,數據存儲在存儲設備中,邏輯文件系統是建立在本地文件系統之上的文件系統,邏輯文件系統不能直接訪問存儲設備,需要通過本地文件系統來完成數據和元數據的存儲和訪問。
元數據是「關於數據的數據」,常見的元數據包括文件名(dentry-d_name),I節點號(inode-i_ino),文件模式(inode-i_mode),文件連接數(inode-i_nlink),文件的用戶標識(inode-i_uid),文件的用戶組標識(inode-i_gid),文件的訪問時間(inode-i_atime),文件的修改時間(inode-i_mtime),文件的創建時間(inode-i_ctime),文件數據塊大小的位數(inode-i_blkbits),文件的數據塊的大小(i_blksize),文件版本(inode-i_version),文件的代(inode-i_generation)。研究人員發現,在目前大多數應用中,元數據操作的數量遠遠大於普通的文件讀寫數量。一個優秀的邏輯文件系統必須具有相當優秀的元數據處理能力。
在一些分布式文件系統中,有專門的元數據伺服器,元數據在這些伺服器內部被當作數據塊進行處理,即文件的元數據信息是直接編碼並以一定的格式存儲在元數據伺服器內部的。此類做法的主要缺點是操作比較複雜,需要處理全部與元數據相關的操作和存儲,不便於實現,也難以達到比較好的性能。
在已有的本地文件系統中,有一些文件系統專門使用了平衡二叉樹或者B+樹的方式組織目錄下文件的存儲,其元數據處理能力是相當出色的。若能充分利用本地文件系統的元數據處理能力,則對文件系統中元數據的存儲與處理有著重要的意義。
發明內容
本發明的目的是克服現有的元數據伺服器對元數據的操作比較複雜,需要處理全部與元數據相關的操作和存儲,不便於實現,也難以達到比較好性能的缺陷,從而提高一種高效存儲邏輯文件系統元數據的方法。
為了實現上述目的,本發明提高了一種用附著屬性存儲邏輯文件系統元數據的方法,將邏輯文件系統的元數據以本地文件系統文件屬性的方式存儲在本地文件系統上,包括以下操作1)、創建邏輯文件系統的文件或者目錄時,把要創建的文件或者目錄所在的父目錄信息取出,在對應的本地文件系統的父目錄裡面用同樣的文件名或者目錄名創建一個新的文件或者目錄,把新創建的本地文件系統的文件或者目錄的索引節點和目錄項中的數據項直接拷貝到邏輯文件系統的索引節點和目錄項中;2)、刪除一個文件或者目錄時,通過邏輯文件系統中要刪除的文件或者目錄所在的父目錄的索引節點找到本地文件系統中對應的文件或目錄的父目錄的索引節點,然後在對應的本地文件系統的父目錄裡面刪除對應的文件或者目錄,刪除成功後,更新邏輯文件系統中被刪除文件或目錄的父目錄的信息;3)、修改邏輯文件系統屬性的時候,根據要修改的屬性的掩碼,修改本地文件系統文件索引節點對應的屬性,然後調用本地文件系統設定文件屬性的函數,把修改後的本地文件系統文件的索引節點存儲到本地文件系統的磁碟上;4)、對邏輯文件系統上的文件或目錄改名時,通過邏輯文件系統要改名的文件或目錄的目錄項得到本地文件系統相應文件或目錄的目錄項,通過邏輯文件系統要改名文件或目錄的父目錄的索引節點得到本地文件系統對應文件或目錄的父目錄的索引節點,然後調用本地文件系統的改名函數,改變本地文件系統的文件名或目錄名,最後把改名後文件或目錄的邏輯文件系統的目錄項和本地文件系統的目錄項關聯起來;5)、當查詢邏輯文件系統上的一個文件或者目錄的元數據信息時,首先根據要查詢的邏輯文件系統的文件或者目錄所在的父目錄找到對應本地文件系統文件或者目錄的父目錄,然後再根據要查詢的文件名在本地文件系統父目錄內查詢文件或者目錄,當找到相應的文件或者目錄後,把本地文件系統文件或者目錄的索引節點和目錄項信息直接複製到邏輯文件系統對應文件的索引節點和目錄項數據結構上。
上述技術方案中,在所述的索引節點中,所包含的元數據包括文件名,I節點號,文件模式,文件連接數,文件的用戶標識,文件的用戶組標識,文件的訪問時間,文件的修改時間,文件的創建時間,文件數據塊大小的位數,文件的數據塊的大小,文件版本,文件的代。
上述技術方案中,在所述的目錄項中,所包含的元數據包括文件名和文件路徑。
上述技術方案中,在所述的步驟3)中,所述的本地文件系統設定文件屬性的函數由虛擬文件系統層的接口setattr實現。
上述技術方案中,在所述的步驟4)中,所述的改名函數為本地文件系統的rename函數。
利用本發明的方法,邏輯文件系統可以直接利用本地文件系統的元數據處理功能,繼承本地文件系統的穩定性和性能特色,並且這種方法有著實現簡便,適應性強的優點。
圖1為邏輯文件系統的結構圖;圖2為邏輯文件系統中的索引節點和目錄項與本地文件系統索引節點和目錄項之間的關係;圖3為邏輯文件系統I節點的屬性附著在本地文件系統I節點的屬性上的示意圖。
具體實施例方式
下面結合附圖和具體實施方式
對本發明的方法進行說明。
在本實施例中,所述的附著屬性是指利用本地文件系統的元數據來存儲邏輯文件系統的元數據,邏輯文件系統的元數據不是作為本地文件系統的一個文件裡面的數據塊而存在。因此,對邏輯文件系統中的文件或者目錄的元數據進行操作,需要把這樣的操作以同樣的參數轉發到對本地文件系統對應的文件或者目錄上進行。這樣的轉發操作是通過實現一個虛擬文件系統(VFS)層的文件系統接口來實現的。典型的元數據操作包括創建、刪除、修改屬性、改名和查詢。下面分別對元數據的上述操作進行說明。
1、創建創建一個邏輯文件系統的文件或者目錄時,把要創建的文件或者目錄所在的父目錄信息取出,在對應的本地文件系統的父目錄裡面用同樣的文件名或者目錄名創建一個新的文件或者目錄,把新創建的本地文件系統的文件或者目錄的索引節點(inode)和目錄項(dentry)中的部分數據項直接拷貝到邏輯文件系統的inode和dentry中。其中,索引節點中包含的信息包括文件名(dentry-d_name),I節點號(inode-i_ino),文件模式(inode-i_mode),文件連接數(inode-i_nlink),文件的用戶標識(inode-i_uid),文件的用戶組標識(inode-i_gid),文件的訪問時間(inode-i_atime),文件的修改時間(inode-i_mtime),文件的創建時間(inode-i_ctime),文件數據塊大小的位數(inode-i_blkbits),文件的數據塊的大小(i_blksize),文件版本(inode-i_version),文件的代(inode-i_generaion),目錄項中包含了文件名、文件路徑信息以及維護內核目錄樹的一些指針。當複製索引節點與目錄項中的信息時,索引節點(inode)中需要複製的數據項是i_ino,i_mode,i_nlink,i_uid,i_gid,i_atime,i_mtime,i_ctime,i_blkbits,i_blksize,i_versioni_generation,目錄項(dentry)中只複製文件名d_name。邏輯文件系統和本地文件系統的inode和dentry關係如附圖2所示。
例如,在邏輯文件系統的根目錄下創建名為abc的子目錄,則在本地文件系統中,先找到根目錄,然後在本地文件系統的根目錄下同樣創建名為abc的子目錄。本地文件系統在創建子目錄的同時,會創建關於子目錄abc的目錄索引節點和目錄項(dentry),將目錄索引節點(inode)和目錄項(dentry)中的數據項直接拷貝到邏輯文件系統的inode和dentry中,使得邏輯文件系統的文件與本地文件系統的文件擁有完全相同的屬性。其中,索引節點裡面包括I節點號(inode-i_ino),文件模式(inode-i_mode),文件連接數(inode-i_nlink),文件的用戶標識(inode-i_uid),文件的用戶組標識(inode-i_gid),文件的訪問時間(inode-i_atime),文件的修改時間(inode-i_mtime),文件的創建時間(inode-i_ctime),文件數據塊大小的位數(inode-i_blkbits),文件的數據塊的大小(i_blksize),文件版本(inode-i_version),文件的代(inode-i_generation)都要根據本地文件對應的屬性填寫,即直接拷貝本地文件對應的屬性的值。
2、刪除刪除一個文件或者目錄時,通過邏輯文件系統中要刪除的文件或者目錄所在的父目錄的索引節點找到本地文件系統中對應的文件或目錄的父目錄的索引節點,然後在對應的本地文件系統的父目錄裡面刪除對應的文件或者目錄,刪除成功後,更新邏輯文件系統父目錄的信息。
例如,在根目錄下刪除子目錄abc,其操作如下(1)通過邏輯文件系統中要被刪除的子目錄abc的父目錄(即邏輯文件系統的根目錄)的inode,找到本地文件系統中要被刪除的子目錄abc的父目錄(即本地文件系統的根目錄)的inode;(2)通過邏輯文件系統要刪除目錄的目錄名abc找到本地文件系統要刪除目錄的目錄名abc;(3)調用本地文件系統的rmdir系統調用,把本地文件系統父目錄inode和本地文件系統要刪除目錄的dentry作為參數傳遞給本地文件系統的rmdir接口,刪除本地文件系統上的文件。
(4)假如刪除成功,則需要更新邏輯文件系統父目錄(被刪除目錄的父目錄)的一些信息,例如i_size,i_nlink,i_ctime等。在更新時,從本地文件系統對應的屬性上拷貝相應數據。例如,假設邏輯文件系統的inode的變量名為lfs_inode,本地文件系統的inode變量名為meta_inode,那麼對應的操作就是lfs_inode-i_size=meta_inode-i_size;lfs_inode-i_nlink=meta_inode-i_nlink;lfs_inode-i_ctime=meta_inode-i_ctime。
3、修改屬性修改邏輯文件系統屬性的時候,根據要修改的屬性的掩碼,修改本地文件系統文件inode對應的屬性,然後調用本地文件系統設定文件屬性的函數,把修改後的本地文件系統文件的inode存儲到本地文件系統的磁碟上。
在本步驟中,所述的修改屬性是對保存在索引節點(inode)中的元數據進行修改,而對保存在目錄項(dentry)中的文件名和文件路徑則不屬於本步驟所述的修改屬性的範圍內。對inode中屬性的修改由虛擬文件系統(VFS)層的接口setattr實現,具體實現步驟如下1)、通過邏輯文件系統的dentry獲取本地文件系統的dentry指針;2)、調用本地文件系統的setattr接口函數,把要修改的元數據信息直接轉發為對本地文件系統的inode的修改。
假如在根目錄下的子目錄abc中,有一個文件A,其原有的訪問權限為可讀,要將其訪問權限修改為可寫,對其的操作為1)、通過邏輯文件系統的文件A的dentry找到文件文件系統中文件A的denntry;
2)、調用本地文件系統的setattr函數,把本地文件系統中文件A的inode中的訪問權限由可讀修改為可寫。
4、改名把邏輯文件系統上的一個文件的文件名或者一個目錄的目錄名改名為另外一個文件名或者目錄名的時候,首先通過邏輯文件系統要改名的文件或目錄的dentry得到本地文件系統相應文件或目錄的dentry,通過邏輯文件系統要改名文件或目錄的父目錄的inode,得到本地文件系統對應文件或目錄的父目錄的inode,然後調用本地文件系統的rename函數,改變本地文件系統的文件名或目錄名,再把改名後文件或目錄的邏輯文件系統的dentry和本地文件系統的dentry關聯起來。
例如,將邏輯文件系統根目錄下的子目錄abc的目錄名修改為def,通過邏輯文件系統子目錄abc的目錄名(dentry)得到本地文件系統中對應的子目錄abc的目錄名(dentry),通過邏輯文件系統的根目錄(子目錄abc的父目錄)的inode,得到本地文件系統根目錄的inode,然後調用本地文件系統的rename函數將子目錄abc的名稱修改為def,最後把def的dentry和本地文件系統的dentry關聯起來。
由於文件名或目錄名不保存在邏輯文件系統中,所以只要在本地文件系統中對文件名或目錄名進行修改即可,不需要在邏輯文件系統中修改文件名或目錄名。
5、查詢當查詢邏輯文件系統上的一個文件或者目錄的元數據信息的時候,首先根據要查詢的邏輯文件系統文件或者目錄所在的父目錄找到對應本地文件系統文件或者目錄的父目錄,然後再根據要查詢的文件名在本地文件系統父目錄內查詢文件或者目錄,當找到相應的文件或者目錄後,把本地文件系統文件或者目錄的inode和dentry信息直接複製到邏輯文件系統對應文件的inode和dentry數據結構上。
例如,在邏輯文件系統中,子目錄abc位於根目錄下,當要查詢子目錄abc時,首先在本地文件系統中查詢根目錄,然後在本地文件系統的根目錄下查詢子目錄abc。找到子目錄abc後,將本地文件系統中關於該子目錄的inode和dentry信息直接複製到邏輯文件系統對應文件的inode和dentry數據結構上。
邏輯文件系統的文件的大小是不能直接附著在本地文件系統的元數據上的,因為邏輯文件系統的文件要存儲實際的用戶數據,而本地文件系統的文件僅僅是附著元數據的一個空殼,兩者文件大小並不相同。所以必須把邏輯文件系統文件的大小作為本地文件系統的文件內容數據而存儲。
權利要求
1.一種用附著屬性存儲邏輯文件系統元數據的方法,將邏輯文件系統的元數據以本地文件系統文件屬性的方式存儲在本地文件系統的元數據上,包括以下步驟1)、創建邏輯文件系統的元數據在創建文件或目錄同時,創建所述的邏輯文件系統的元數據,把要創建的文件或者目錄所在的父目錄信息取出,在對應的本地文件系統的父目錄裡面用同樣的文件名,或者目錄名創建一個新的文件或者目錄,把新創建的本地文件系統的文件,或者目錄的索引節點和目錄項中的數據項直接拷貝到邏輯文件系統的索引節點和目錄項中;2)、刪除邏輯文件系統的元數據刪除邏輯文件系統的元數據是在刪除邏輯文件系統中的文件或者目錄時進行,在刪除文件或目錄時,通過邏輯文件系統中要刪除的文件,或者目錄所在的父目錄的索引節點,找到本地文件系統中對應的文件或目錄的父目錄的索引節點,然後在對應的本地文件系統的父目錄裡面刪除對應的文件或者目錄,刪除成功後,更新邏輯文件系統中被刪除文件或目錄的父目錄的信息;3)、修改邏輯文件系統的元數據修改邏輯文件系統的元數據就是修改邏輯文件系統的屬性,在修改屬性時,根據要修改的屬性的掩碼,修改本地文件系統文件索引節點對應的屬性,然後調用本地文件系統設定文件屬性的函數,把修改後的本地文件系統文件的索引節點存儲到本地文件系統的磁碟上;4)、對邏輯文件系統上的文件或目錄改名通過邏輯文件系統要改名的文件,或目錄的目錄項得到本地文件系統相應文件或目錄的目錄項,通過邏輯文件系統要改名文件或目錄的父目錄的索引節點,得到本地文件系統對應文件或目錄的父目錄的索引節點,然後調用本地文件系統的改名函數,改變本地文件系統的文件名或目錄名,最後把改名後文件或目錄的邏輯文件系統的目錄項和本地文件系統的目錄項關聯起來;5)、查詢邏輯文件系統上的一個文件或者目錄的元數據信息首先根據要查詢的邏輯文件系統的文件,或者目錄所在的父目錄找到對應本地文件系統文件或者目錄的父目錄,然後再根據要查詢的文件名,在本地文件系統父目錄內查詢文件或者目錄,當找到相應的文件或者目錄後,把本地文件系統文件或者目錄的索引節點和目錄項信息直接複製到邏輯文件系統對應文件的索引節點和目錄項數據結構上。
2.根據權利要求1所述的用附著屬性存儲邏輯文件系統元數據的方法,其特徵在於,在所述的索引節點中,所包含的元數據包括文件名,I節點號,文件模式,文件連接數,文件的用戶標識,文件的用戶組標識,文件的訪問時間,文件的修改時間,文件的創建時間,文件數據塊大小的位數,文件的數據塊的大小,文件版本,文件的代。
3.根據權利要求1所述的用附著屬性存儲邏輯文件系統元數據的方法,其特徵在於,在所述的目錄項中,所包含的元數據包括文件名和文件路徑。
4.根據權利要求1所述的用附著屬性存儲邏輯文件系統元數據的方法,其特徵在於,在所述的步驟3)中,所述的本地文件系統設定文件屬性的函數由虛擬文件系統層的接口setattr實現。
5.根據權利要求1所述的用附著屬性存儲邏輯文件系統元數據的方法,其特徵在於,在所述的步驟4)中,所述的改名函數為本地文件系統的rename函數。
全文摘要
本發明公開了一種用附著屬性存儲邏輯文件系統元數據的方法,將邏輯文件系統的元數據以本地文件系統文件屬性的方式存儲在本地文件系統上,包括創建邏輯文件系統的文件或者目錄;刪除一個文件或者目錄;修改邏輯文件系統屬性;對邏輯文件系統上的文件或目錄改名;查詢邏輯文件系統上的一個文件或者目錄的元數據信息。利用本發明的方法,邏輯文件系統可以直接利用本地文件系統的元數據處理功能,繼承本地文件系統的穩定性和性能特色,並且這種方法有著實現簡便,適應性強的優點。
文檔編號G06F17/30GK1904889SQ200610089249
公開日2007年1月31日 申請日期2006年8月11日 優先權日2006年8月11日
發明者趙奕, 唐榮鋒, 熊勁 申請人:中國科學院計算技術研究所