本篇內(nèi)容介紹了“Linux文件系統(tǒng)中的NiLFS(2)和exofs怎么使用”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
十年的龍泉網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整龍泉建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“龍泉網(wǎng)站設(shè)計(jì)”,“龍泉網(wǎng)站推廣”以來,每個客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
使用日志和對象發(fā)展 Linux 文件系統(tǒng)
Linux? 在文件系統(tǒng)領(lǐng)域不斷創(chuàng)新。它支持任何操作系統(tǒng)上的眾多不同文件系統(tǒng)。它還提供尖端文件系統(tǒng)技術(shù)。Linux 最近又引入兩種新的文件系統(tǒng),它們是 NiLFS(2) 日志結(jié)構(gòu)文件系統(tǒng)和 exofs 基于對象的存儲系統(tǒng)。探索這兩種文件系統(tǒng)背后的動機(jī)和它們的優(yōu)點(diǎn)。
在 IBM Bluemix 云平臺上開發(fā)并部署您的下一個應(yīng)用。
現(xiàn)在就開始免費(fèi)試用
一種新的 Linux 文件系統(tǒng)的公布總是令人既興奮又恐懼。興奮是因?yàn)槲募到y(tǒng)意味著新的發(fā)展空間??謶质且?yàn)槲募到y(tǒng)在早期還是試驗(yàn)性的,尚未迎來黃金時期。但是有時候,新文件系統(tǒng)的公布也意味著對 Linux 未來的投資,而最近 2.6.30-rc1 的公布確實(shí)標(biāo)示著令人感興趣的前景。在過去幾個季度,Linux 主要公布了三種文件系統(tǒng)。2008 年底引入了 B-Tree File System(Btrf),最近又引入了兩種獨(dú)特的文件系統(tǒng):NiLFS(2) 和 exofs。
我們首先了解這些非傳統(tǒng)文件系統(tǒng),然后探索 NiLFS(2) 和 exofs 的細(xì)節(jié)。
日志結(jié)構(gòu)文件系統(tǒng)是用于由 NAND 閃存組成的固態(tài)硬盤(solid-state disks,SSD)的理想格式。閃存的基本問題是寫擦周期數(shù)量有限。日志可以寫到整個設(shè)備上,盡量寫滿設(shè)備,從而最大程度地減少擦的周期。由于這個原因,日志結(jié)構(gòu)文件系統(tǒng)在 SSD 上(連續(xù)寫)表現(xiàn)非常好,并且提供更好的損耗均衡。
日志結(jié)構(gòu)文件系統(tǒng)在現(xiàn)代計(jì)算系統(tǒng)中有豐富的歷史。第一個日志結(jié)構(gòu)文件系統(tǒng)由 John Ousterhout 和 Fred Douglis 在 1988 年提出,隨后由 Sprite 操作系統(tǒng)在 1992 年實(shí)現(xiàn)。顧名思義,日志結(jié)構(gòu)文件系統(tǒng)將文件系統(tǒng)視為一個循環(huán)日志,將新的數(shù)據(jù)和文件系統(tǒng)元數(shù)據(jù)寫到日志的頭部,并且從尾部回收空閑空間(如圖 1 所示)。這意味著數(shù)據(jù)可能在日志中出現(xiàn)兩次或更多次,但是由于日志是按時間先后順序發(fā)展的,最近的數(shù)據(jù)被視作活動數(shù)據(jù)。日志中保留數(shù)據(jù)的多個副本可以帶來一些有趣的優(yōu)點(diǎn),后面將詳細(xì)談到這些優(yōu)點(diǎn)。
與其說日志結(jié)構(gòu)方法是一個賣點(diǎn),不如說它是體系結(jié)構(gòu)上的一個細(xì)節(jié),不過這種方法確實(shí)有一些獨(dú)特的優(yōu)點(diǎn)。一個關(guān)鍵的優(yōu)點(diǎn)在于系統(tǒng)崩潰后的數(shù)據(jù)恢復(fù),當(dāng)使用日志結(jié)構(gòu)方法時,這種恢復(fù)更簡單。
另一個優(yōu)點(diǎn)是利用底層存儲系統(tǒng)挖掘性能。您也許還記得,連續(xù)寫到硬盤比隨機(jī) I/O 要快得多。如果所有的寫都是連續(xù)的,那么查找的開銷隨之減少,從而可以獲得更快的硬盤 I/O,進(jìn)而得到更快的文件系統(tǒng)。
傳統(tǒng)存儲系統(tǒng)依賴于磁盤驅(qū)動器和它們的本地接口持久地存儲數(shù)據(jù)。這些接口依賴于塊存儲語義,大小固定的數(shù)據(jù)小塊與它們的映射(文件系統(tǒng)元數(shù)據(jù))相關(guān)聯(lián)。對象存儲系統(tǒng)則采用截然不同的方法:它們不是管理大小固定的數(shù)據(jù)塊,而是管理大小可變的對象以及相關(guān)聯(lián)的元數(shù)據(jù)(提供關(guān)于對象的系統(tǒng)級信息)。
對象存儲設(shè)備基于 T-10 Object Storage Devices(OSD)標(biāo)準(zhǔn)。該規(guī)范詳細(xì)描述了用于支持對象級管理的對標(biāo)準(zhǔn) SCSI 命令集的擴(kuò)展。除了定義對象級訪問方法外,該規(guī)范還包括安全性和元數(shù)據(jù)管理。
對象存儲系統(tǒng)是解決包含多租戶和安全性的可伸縮存儲的唯一途徑。構(gòu)建作為一種標(biāo)準(zhǔn)的 OSD(見側(cè)邊欄)的方式有很多種。例如可以使用遵從 OSD 的組件(例如 OSD 驅(qū)動器和啟動器)或更高級的組件(在傳統(tǒng)驅(qū)動器上構(gòu)建 OSD 行為的目標(biāo)系統(tǒng))。但是,基于塊的存儲系統(tǒng)與基于對象的存儲系統(tǒng)之間的根本區(qū)別在于,在基于塊的存儲系統(tǒng)中,是從塊集合創(chuàng)建對象的,塊中既包括數(shù)據(jù),又包括使用某種協(xié)議與塊通信的元數(shù)據(jù)。而在基于對象的存儲系統(tǒng)中,是與對象和它們的關(guān)聯(lián)元數(shù)據(jù)通信的(如圖 2 所示)。于是,對象存儲設(shè)備成為對象的平面名稱空間(flat namespace),必要時,在存儲系統(tǒng)棧中的更高層建立層次結(jié)構(gòu)。
本文探索基于對象的存儲系統(tǒng)上的一種文件系統(tǒng)的實(shí)現(xiàn)。
回頁首
NiLFS(2) 是日本 Nippon Telegraph and Telephone(NTT)開發(fā)的一種日志結(jié)構(gòu)文件系統(tǒng)的第二次迭代。該文件系統(tǒng)的開發(fā)非常活躍,最近已進(jìn)入主流 Linux 內(nèi)核(另外還有 NetBSD 內(nèi)核)。第一版的 NILFS(version 1)出現(xiàn)于 2005 年,這個版本沒有任何形式的垃圾收集。在 2007 年,第 2 版首次發(fā)布,其中包括一個垃圾收集器,并且可以創(chuàng)建和維護(hù)多個快照。今年(2009),NiLFS(2) 文件系統(tǒng)進(jìn)入主流內(nèi)核,可通過安裝它的可裝載模塊方便地啟用它。
NiLFS(2) 一個有趣的方面是,它支持連續(xù)快照(continuous snap-shotting)技術(shù)。由于 NILFS 是基于日志結(jié)構(gòu)的,新數(shù)據(jù)被寫到日志的頭部,而舊數(shù)據(jù)仍然保留(直到需要對舊數(shù)據(jù)進(jìn)行垃圾收集)。由于舊數(shù)據(jù)仍被保留,因此可以在時間線上回滾,以檢查文件系統(tǒng)的不同時期(epoch)。在 NiLFS(2) 中,這些時期被稱作檢查點(diǎn),它們是文件系統(tǒng)中不可或缺的一部分。每當(dāng)發(fā)生改變時,NiLFS(2) 都會創(chuàng)建這些檢查點(diǎn),但是也可以強(qiáng)制創(chuàng)建檢查點(diǎn)。
NiLFS(2) 是眾多包含快照行為的文件系統(tǒng)中的一種。其他包含快照的文件系統(tǒng)有 ZFS、LFS 和 Ext3cow。
可以在快照中查看和更改檢查點(diǎn)(恢復(fù)點(diǎn))??梢韵衿渌募到y(tǒng)一樣將快照掛載到 Linux 文件系統(tǒng)空間中,但是目前它們還是只讀的。這一點(diǎn)非常有用,因?yàn)榭梢話燧d快照,然后恢復(fù)之前刪除的文件,或者檢查之前版本的文件。
除了連續(xù)快照外,NiLFS(2) 還具有很多其他的優(yōu)點(diǎn)。從可用性的角度看,最重要的優(yōu)點(diǎn)是快速重啟。如果當(dāng)前檢查點(diǎn)失效,文件系統(tǒng)只需回滾到上一個有效的檢查點(diǎn),重新獲得有效的文件系統(tǒng)。這顯然好于 fsck 進(jìn)程。
這個 NiLFS(2) 演示 是在 2.6.27 Linux 內(nèi)核中完成的。2.6.30-rc1 內(nèi)核在 mainline 中包括 NiLFS(2),但是在這里,NILFS 文件系統(tǒng)模塊和工具是從源代碼安裝的。請參閱 參考資料 了解關(guān)于如何將 NiLFS(2) 安裝到內(nèi)核中的信息。
雖然連續(xù)快照是一個很好的特性,但是也有一定的副作用。前面已經(jīng)提到,它的優(yōu)點(diǎn)在于它是日志結(jié)構(gòu)的,采用連續(xù)寫的方式(減少物理磁盤的查找行為),因此非???。而缺點(diǎn)在于,它是日志結(jié)構(gòu)的,所以需要垃圾收集,以便清理舊的數(shù)據(jù)和元數(shù)據(jù)。一般情況下,這種文件系統(tǒng)非??欤且坏┬枰M(jìn)行垃圾收集,性能就會慢下來。
我們來看看 NiLFS(2) 的實(shí)際應(yīng)用。這個演示展示如何在循環(huán)設(shè)備上創(chuàng)建一個 NiLFS(2) 文件系統(tǒng)(測試文件系統(tǒng)的一種簡單方法),然后看看 NiLFS(2) 的一些特性。首先安裝 NiLFS(2) 內(nèi)核模塊:
$ sudo modprobe nilfs2 $
接下來,創(chuàng)建一個文件,該文件將包含文件系統(tǒng)(主機(jī)操作系統(tǒng)上的一個區(qū)域,可通過循環(huán)設(shè)備將它掛載為操作系統(tǒng)本身的文件系統(tǒng)),然后使用 mkfs 在其中構(gòu)建 NiLFS(2) 文件系統(tǒng)(如圖 1 所示)。
$ dd if=/dev/zero of=/tmp/disk.img bs=384M count=1 1+0 records in 1+0 records out 402653184 bytes (403 MB) copied, 60.7253 s, 6.6 MB/s $ mkfs.nilfs2 /tmp/disk.img mkfs.nilfs2 ver 2.0 Start writing file system initial data to the device Blocksize:4096 Device:/tmp/disk.img Device Size:402653184 File system initialization succeeded !! $
現(xiàn)在,您有了自己的以 NiLFS(2) 文件系統(tǒng)格式初始化的磁盤鏡像。接下來,使用循環(huán)設(shè)備將該文件系統(tǒng)掛載到一個掛載點(diǎn)上(如清單 2 所示)。注意,當(dāng)掛載文件系統(tǒng)時,會啟動一個用戶空間程序 nilfs_cleanerd,以提供垃圾收集服務(wù)。
$ sudo losetup /dev/loop0 /tmp/disk.img $ sudo mkdir /mnt/nilfs $ sudo mount -t nilfs2 /dev/loop0 /mnt/nilfs/ mount.nilfs2: WARNING! - The NILFS on-disk format may change at any time. mount.nilfs2: WARNING! - Do not place critical data on a NILFS filesystem. $ ls /mnt/nilfs $
現(xiàn)在,在該文件系統(tǒng)中添加一些文件,然后使用 lscp 命令列出當(dāng)前可用的檢查點(diǎn)(如清單 3 所示)。使用 mkcp 命令定義一個快照,然后再次查看檢查點(diǎn)。第二次執(zhí)行 lscp 命令時可以看到新創(chuàng)建的快照(所有檢查點(diǎn)和快照都有一個 CNO,或檢查點(diǎn)號)。
$ cd /mnt/nilfs $ sudo touch file1.txt file2.txt $ lscp CNO DATE TIME MODE FLG NBLKINC ICNT 1 2009-08-21 22:29:31 cp - 11 3 2 2009-08-21 22:36:44 cp - 11 5 $ sudo mkcp -s $ lscp CNO DATE TIME MODE FLG NBLKINC ICNT 1 2009-08-21 22:29:31 cp - 11 3 2 2009-08-21 22:36:44 ss - 11 5 3 2009-08-21 22:39:47 cp i 7 5 $
現(xiàn)在有了一個快照,接下來同樣使用 touch 命令再將一些文件添加到當(dāng)前文件系統(tǒng)中(如清單 4 所示)。
$ sudo touch file3.txt file4.txt $ ls file1.txt file2.txt file3.txt file4.txt $
現(xiàn)在,掛載快照作為一個只讀文件系統(tǒng)。這和之前的掛載類似,但是需要指定掛載的快照。為此可以使用 cp 選項(xiàng)。從之前的 lscp 命令中可以看出,快照是 CNO=2。在 mount 命令中使用這個 CNO 掛載只讀文件系統(tǒng)。掛載后,首先使用 ls 命令列出掛載的讀/寫文件系統(tǒng),然后查看所有的文件。在只讀快照中,只能看到兩個文件,這兩個文件是創(chuàng)建快照時存在的兩個文件(如清單 5 所示)。
$ sudo mkdir /mnt/nilfs-ss2 $ sudo mount.nilfs2 -r /dev/loop0 /mnt/nilfs-ss2/ -o cp=2 $ ls /mnt/nilfs file1.txt file2.txt file3.txt file4.txt $ ls /mnt/nilfs-ss2/ file1.txt file2.txt $
注意,一旦將檢查點(diǎn)轉(zhuǎn)換為快照,這些快照將持久存在。當(dāng)需要清理出空間時,檢查點(diǎn)會被從文件系統(tǒng)中回收,而快照可以持久存在。
該演示展示了用于 NiLFS(2) 的兩個命令行實(shí)用程序:lscp(列出檢查點(diǎn)和快照)和 mkcp(創(chuàng)建檢查點(diǎn)或快照)。有一個名為 chcp 的實(shí)用程序,用于將檢查點(diǎn)轉(zhuǎn)換為快照,或者將快照轉(zhuǎn)換為檢查點(diǎn);還有一個 rmcp 實(shí)用程序,用于使檢查點(diǎn)或快照無效。
鑒于這種文件系統(tǒng)是臨時性的,NTT 已經(jīng)為將來考慮了一些非常有創(chuàng)新性的工具 — 例如,tls(臨時 ls)、tdiff(臨時 diff)和 tgrep(臨時 grep)。下一步引入基于時間的功能似乎是合乎情理的。
回頁首
Extended Object File System(exofs)是構(gòu)建在對象存儲系統(tǒng)上的一種傳統(tǒng)的 Linux 文件系統(tǒng)。exofs 最初由 IBM 的 Avnishay Traeger 開發(fā),當(dāng)時被稱作 OSD 文件系統(tǒng),或稱作 osdfs。然后,Panasas(一家構(gòu)建對象存儲系統(tǒng)的公司)接管該項(xiàng)目,并將它重新命名為 exofs(因?yàn)樗淖嫦葋碜?ext2 文件系統(tǒng))。
從概念上講,對象存儲系統(tǒng)可以視作對象的平面名稱空間和它們的關(guān)聯(lián)元數(shù)據(jù)。而在基于塊的傳統(tǒng)存儲系統(tǒng),元數(shù)據(jù)要占用一些塊,以提供語義黏合劑。圖 3 顯示 exofs 的架構(gòu)圖。Virtual File System Switch(VFS)為 exofs 提供一條途徑,在其中,exofs 通過一個本地 OSD 啟動器與對象存儲系統(tǒng)通信。OSD 啟動器實(shí)現(xiàn) OSD T-10 標(biāo)準(zhǔn) SCSI 命令集。
exofs 背后的思想是在 OSD 后備存儲上提供一個傳統(tǒng)文件系統(tǒng)。這樣一來,就更容易遷移到對象級存儲,因?yàn)樘峁┑奈募到y(tǒng)本身是傳統(tǒng)的文件系統(tǒng)。
OSD 中的每個對象由平面名稱空間中一個 64 位的標(biāo)識符表示。為了將標(biāo)準(zhǔn) POSIX 接口疊加到對象存儲系統(tǒng)上,需要一個映射。exofs 提供一個簡單的映射,這種映射還是可伸縮、可擴(kuò)展的。
文件系統(tǒng)中的文件由 inode 唯一地表示。exofs 將 inode 映射到對象系統(tǒng)中的對象標(biāo)識符(OID)。在對象系統(tǒng)中,使用對象表示文件系統(tǒng)的所有元素。文件被直接映射到對象,目錄也是文件,只不過是引用目錄中所含文件的文件(采用文件名和 inode-OID 對的形式)。圖 4 簡明地闡釋了這一點(diǎn)。另外還有一些其他的對象,用于支持 inode 位圖(用于 inode 分配)等。
用于表示對象空間中的對象的 OID 長度為 64 位,因此支持非常多的對象。
對象存儲是一個有趣的思想,可大幅提高系統(tǒng)的可伸縮性。它將文件系統(tǒng)的一些部分從主機(jī)轉(zhuǎn)移到存儲子系統(tǒng)中。為此需付出一定的代價,但是通過將文件系統(tǒng)的一些部分分布到多個端點(diǎn),可以分散工作負(fù)載,使基于對象的方法更易于伸縮到更大的存儲系統(tǒng)。主機(jī)操作系統(tǒng)不再需要考慮塊到文件的映射,存儲設(shè)備本身會提供這種映射,因此主機(jī)可以在文件級進(jìn)行操作。
對象存儲系統(tǒng)還提供查詢可用元數(shù)據(jù)的能力。這可以帶來更多的好處,因?yàn)樗阉髂芰梢苑植嫉蕉它c(diǎn)對象系統(tǒng)。
最近,對象存儲在云存儲領(lǐng)域回歸。云存儲提供商(將存儲作為服務(wù)出售)以對象的形式提供他們的存儲,而不是以傳統(tǒng)的塊 API 的形式提供存儲。這些提供商實(shí)現(xiàn)用于對象傳輸、管理和元數(shù)據(jù)管理的 API。
回頁首
“Linux文件系統(tǒng)中的NiLFS(2)和exofs怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
本文題目:Linux文件系統(tǒng)中的NiLFS(2)和exofs怎么使用
轉(zhuǎn)載源于:http://muchs.cn/article8/gddeop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、用戶體驗(yàn)、微信小程序、網(wǎng)站內(nèi)鏈、小程序開發(fā)、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)