新兴实践_新兴文件系统简介
這是一句古老的諺語,但仍然很準(zhǔn)確:“在UNIX?中,所有內(nèi)容都是文件”。 從概念上講,每個(gè)UNIX資源都是一個(gè)簡單的文件,您可以打開,讀取,寫入或兩者兼而有之。 實(shí)驗(yàn)數(shù)據(jù)是一個(gè)文件,外殼啟動腳本,UNIX內(nèi)核,主目錄,每個(gè)網(wǎng)絡(luò)套接字和/ bin / ls可執(zhí)行文件也是一個(gè)文件。
常用縮略語
- SFTP:安全文件傳輸協(xié)議
- SSH:安全外殼
但是,并非每個(gè)文件都相同。 您的實(shí)驗(yàn)數(shù)據(jù)可能是高度定制的數(shù)據(jù)庫。 Shell腳本是一個(gè)文本文件,盡管有一個(gè)重要的區(qū)別:開頭的!# (通常稱為shebang )行指示哪個(gè)應(yīng)用程序解釋該文件。 內(nèi)核是二進(jìn)制文件,與每個(gè)可執(zhí)行文件一樣,都是二進(jìn)制文件,都具有系統(tǒng)工具可以操縱的可預(yù)測的特定格式。 目錄是用于編目內(nèi)容的專用索引。
此外,并非每個(gè)文件都以相同的方式存儲。 文件的結(jié)構(gòu)和大小取決于基礎(chǔ)文件系統(tǒng) -將文件數(shù)據(jù)持久保存到物理設(shè)備的子系統(tǒng)。 相同的數(shù)據(jù)(例如,同一文件的兩個(gè)副本)在不同的文件系統(tǒng)上的組織方式不同。 每個(gè)文件系統(tǒng)都規(guī)定了自己的存儲策略,可以將其設(shè)計(jì)為滿足特定條件。 例如,可以優(yōu)化一個(gè)文件系統(tǒng)的速度,優(yōu)化另一個(gè)文件系統(tǒng)的空間效率,而優(yōu)化另一個(gè)文件系統(tǒng)的持久性以防止數(shù)據(jù)丟失或損壞。 通常,沒有正確或錯(cuò)誤的文件系統(tǒng)可供部署:您必須分析存儲需求并選擇適合您目的的文件系統(tǒng)或文件系統(tǒng)組合。 UNIX(和許多供應(yīng)商)提供了大量的文件系統(tǒng),因此您一定會發(fā)現(xiàn)有好處的。
表1僅列出了一些可用于UNIX(在許多情況下為Linux?)的文件系統(tǒng)。
表1. UNIX文件系統(tǒng)
| Zettabyte文件系統(tǒng)(ZFS) | 您可以使用通用的現(xiàn)成存儲介質(zhì)構(gòu)造一個(gè)本質(zhì)上無限的文件系統(tǒng)( Zettabyte是2 70字節(jié)),ZFS還可在寫入時(shí)壓縮數(shù)據(jù),從而進(jìn)一步最大化介質(zhì)。 |
| 網(wǎng)絡(luò)文件系統(tǒng)(NFS) | NFS是UNIX的強(qiáng)大功能,它使遠(yuǎn)程文件系統(tǒng)看起來像是本地的。 NFS是共享數(shù)據(jù)的理想選擇。 |
| 日記文件系統(tǒng)(JFS) | JFS和許多其他選擇一樣,保留對每個(gè)文件所做更改的日志或日志 。 如果發(fā)生崩潰或損壞,將“重播”日志以還原文件。 |
| B樹文件系統(tǒng)(Btrfs) | Btrfs是最新的文件系統(tǒng)之一,旨在成為即將發(fā)布的Linux版本的默認(rèn)文件系統(tǒng),它維護(hù)數(shù)據(jù)和元數(shù)據(jù)校驗(yàn)和以確保持久的防彈性。 Btrfs還提供快照,可以混合幾乎任何大小的設(shè)備。 |
自己的文件系統(tǒng)
通常,文件系統(tǒng)需要針對其量身定制媒體,因此從一個(gè)文件系統(tǒng)更改為另一個(gè)文件系統(tǒng)通常需要備份,格式化物理驅(qū)動器以及冗長的還原和驗(yàn)證過程。 顯然,這樣的更改是根本的,并且是系統(tǒng)管理員的唯一權(quán)限。
但是,最近對許多UNIX和Linux內(nèi)核的擴(kuò)展允許任何用戶創(chuàng)建和使用各種文件系統(tǒng)而沒有特殊特權(quán)。 被稱為FUSE ,它是User Space中的Filesystem的縮寫,您可以使用該軟件輕松創(chuàng)建新的文件系統(tǒng)。 從FUSE派生的文件系統(tǒng)可以通過SFTP掛載文件; 自動掃描文件中的病毒; 并將只讀CD-ROM光盤集合視為本地駐留數(shù)據(jù)文件。
讓我們在一個(gè)通用的操作系統(tǒng)平臺上安裝FUSE,并探索一些現(xiàn)在可供任何用戶使用的新穎文件系統(tǒng)。 現(xiàn)代UNIX和Linux內(nèi)核通常包括對FUSE的支持,因此構(gòu)建軟件類似于構(gòu)建任何實(shí)用程序代碼。 您必須下載軟件包,解壓縮它,運(yùn)行配置腳本以檢測系統(tǒng)的功能,以及構(gòu)建和安裝代碼。 清單1顯示了用于安裝FUSE的代碼。
清單1.安裝FUSE
$ wget http://downloads.sourceforge.net/project/\fuse/fuse-2.X/2.8.4/fuse-2.8.4.tar.gz $ tar xzf fuse-2.8.4.tar.gz $ cd fuse-2.8.4$ ./configure $ make $ sudo make installFUSE版本2.8.4是發(fā)布時(shí)的最新版本。 確保從FUSE項(xiàng)目主頁下載最新最好的代碼(請參閱參考資料中的鏈接)。 編譯后,FUSE軟件包安裝了一些用于構(gòu)建新FUSE文件系統(tǒng)所需的庫,以及一個(gè)用于安裝和卸載FUSE文件系統(tǒng)的名為fusermount的應(yīng)用程序。 Fusermount有一些特殊選項(xiàng),但可以接受通常會提供給vanilla mount命令的選項(xiàng)。
自己動手做NFS
安裝基礎(chǔ)代碼后,您可以繼續(xù)安裝FUSE文件系統(tǒng)。 第一個(gè)嘗試使用的FUSE文件系統(tǒng)是SSHFS,這是基于SFTP的文件系統(tǒng)。 通過SSHFS,您可以將任何遠(yuǎn)程目錄作為本地文件系統(tǒng)掛載,只要您的服務(wù)器支持SSH(大多數(shù)情況下就是如此)。 在繼續(xù)之前,請確保您的系統(tǒng)具有Glib 2.0和Gthread 2.0。 如果您的計(jì)算機(jī)具有GNOME,則可能具有這些庫;請參見第28頁的“庫”。 否則,請從源代碼或通過操作系統(tǒng)的本機(jī)軟件包管理器安裝它們。 (Debian Linux系統(tǒng)具有Aptitude。RedHat Linux系統(tǒng)提供rpm , yum和YaST 。) 清單2顯示了設(shè)置SSHFS的代碼。
清單2.安裝SSHFS
$ wget http://sourceforge.net/projects/\fuse/files/sshfs-fuse/2.2/sshfs-fuse-2.2.tar.gz/download $ tar xzf sshfs-fuse-2.2.tar.gz $ cd sshfs-fuse-2.2 $ ./configure $ make $ sudo make install如果您運(yùn)行Ubuntu或UNIX或Linux的另一個(gè)變體,則您的發(fā)行版可能會提供所有軟件包的預(yù)構(gòu)建二進(jìn)制文件。 例如,在Ubuntu上,可以使用以下命令安裝到目前為止列出的所有FUSE軟件:
$ apt-get install libglib2.0-dev fuse-utils libfuse2 sshfs如果您的依賴關(guān)系是最新的,則還可以使用簡單命令apt-get install sshfs安裝SSHFS。
安裝FUSE庫和SSHFS后,您可以將可以通過SSH訪問的任何遠(yuǎn)程目錄安裝為本地文件系統(tǒng)(請參見清單3 )。 結(jié)合ssh和mount ,您可以提供遠(yuǎn)程系統(tǒng)的名稱和登錄憑據(jù),要安裝的遠(yuǎn)程目錄以及本地安裝點(diǎn),該安裝點(diǎn)可以是任何本地目錄。
清單3.將遠(yuǎn)程SSH可訪問目錄掛載為文件系統(tǒng)
$ ssh me@example.org ls bin Documents lib Media Pictures Sites tmp Desktop Downloads Library Movies projects Source Documentation Dropbox local Music Public src$ cd ~ $ mkdir -p mounts/example $ sshfs me@example.org:/home/me mounts/example $ cd mounts/example $ ls bin Documents lib Media Pictures Sites tmp Desktop Downloads Library Movies projects Source Documentation Dropbox local Music Public src如您所見,遠(yuǎn)程目錄的內(nèi)容現(xiàn)在可以作為本地文件使用。 如果您是開發(fā)人員,并且使用多個(gè)系統(tǒng)來工作,則SSHFS可以使本地命令(例如cp , make和其他命令)在遠(yuǎn)程文件上運(yùn)行。
要卸載FUSE文件系統(tǒng),可以鍵入fusermount -u /some/mount/point 。 或者,由于FUSE文件系統(tǒng)的行為與普通文件系統(tǒng)相同,因此可以鍵入umount /some/mount/point 。
另一個(gè)遠(yuǎn)程文件系統(tǒng)變體稱為S3FS 。 S3FS不會使用自己的遠(yuǎn)程服務(wù)器和SFTP,而是將Amazon Simple Storage Service(Amazon S3)存儲桶安裝為本地文件系統(tǒng)。 S3FS“在S3中本地和透明地”存儲文件,并且您可以啟用本地緩存以最大程度地減少下載。 檔案大小上限為5GB。 像SSHFS一樣,您可以下載并構(gòu)建源代碼并立即使用它。
注意 :S3FS軟件包取決于cURL庫開發(fā)標(biāo)頭和LibXML2庫。
清單4顯示了安裝S3FS實(shí)例的代碼。
清單4.安裝S3FS
$ wget http://s3fs.googlecode.com/files/s3fs-r191-source.tar.gz $ tar xzf s3fs-r191-source.tar.gz $ cd s3fs $ make $ sudo make install假設(shè)您已經(jīng)擁有一個(gè)提供訪問密鑰和秘密訪問密鑰的Amazon S3帳戶,則可以使用以下命令安裝您擁有的任何存儲桶:
$ s3fs bucket_name -ouse_cache=/tmp -o accessKeyId=your_access_key \-o secretAccessKey=your_secret_access_key /mnt借助S3FS,您可以將整個(gè)Git存儲庫保留在Amazon S3上,或使用rsync將備份放置在Amazon的存儲系統(tǒng)上。
查看任何檔案
FUSE的另一個(gè)重要用途是archivemount ,該實(shí)用程序可將多種形式的歸檔文件(包括tarball(或gzip壓縮的tar歸檔文件))掛載為本地文件系統(tǒng)。 假設(shè)您的系統(tǒng)上有可用的libarchive ,則可以快速構(gòu)建archivemount ,如清單5所示。
清單5.安裝archivemount
$ wget http://www.cybernoia.de/software/archivemount/archivemount-0.6.1.tar.gz $ tar xzf archivemount-0.6.1.tar.gz $ cd archivemount-0.6.1 $ ./configure $ make $ sudo make install例如,您可以使用archivemount將其自己的tarball掛載為文件系統(tǒng)。 清單6顯示了代碼。
清單6.將tarball掛載為文件系統(tǒng)
$ tar tfz archivemount-0.6.1.tar.gz archivemount-0.6.1/ archivemount-0.6.1/README ... archivemount-0.6.1/archivemount.c archivemount-0.6.1/CHANGELOG$ mkdir -p ~/mnt/tgz $ archivemount archivemount-0.6.1.tar.gz ~/mnt/tgz $ cd ~/mnt/tgz/archivemount-0.6.1 $ ls aclocal.m4 archivemount.c configure depcomp Makefile.in archivemount.1 CHANGELOG configure.ac install-sh missing archivemount.1.in config.h.in COPYING Makefile.am README和以前的SSHFS一樣, archivemount提供了對tarball的無縫,類似于本地文件系統(tǒng)的訪問。 順便說一句,如果您將任何文件修改,刪除或添加到tarball的“文件系統(tǒng)”中,則在卸載FUSE文件系統(tǒng)時(shí),所有更改都將保存到原始tarball中。 命令fusermount -u ~/mnt/tgz從給定的安裝點(diǎn)卸載FUSE文件系統(tǒng)。 清單7提供了對tarball“文件系統(tǒng)”的了解。
清單7.通過archivemount寫入文件
$ cd ~/mnt/tgz/archivemount-0.6.1 $ echo 'Remember this for later.' > NOTES $ ls aclocal.m4 CHANGELOG COPYING Makefile.in archivemount.1 config.h.in depcomp missing archivemount.1.in configure install-sh NOTES archivemount.c configure.ac Makefile.am README $ fusermount -u ~/mnt/tgz$ tar tfz archivemount-0.6.1.tar.gz archivemount-0.6.1/ archivemount-0.6.1/README ... archivemount-0.6.1/CHANGELOG archivemount-0.6.1/NOTES清單7中的最后一個(gè)tar命令確認(rèn)確實(shí)將NOTES添加到了tarball中。 關(guān)于使用archivemount擴(kuò)展歸檔文件的一個(gè)警告:軟件作者警告不要寫入歸檔文件,因?yàn)槿绻鸚rite操作失敗,所有更改都會丟失。 通常,盡管如此,少量的寫操作也可以正常工作。 但是,您可能會發(fā)現(xiàn)archivemount引人注目的只讀功能。
如果您想查看通過FUSE掛載的內(nèi)容,只需運(yùn)行典型的mount命令并查找標(biāo)記為fuse系統(tǒng),如清單8所示。
清單8. FUSE安裝的文件系統(tǒng)
$ mount /dev/sda1 on / type ext3 (rw,relatime,errors=remount-ro) tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755) ... udev on /dev type tmpfs (rw,mode=0755) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev) devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620) fusectl on /sys/fs/fuse/connections type fusectl (rw) archivemount on /home/strike/mnt/tgz type fuse.archivemount (rw,nosuid,nodev,user=strike)本文的測試平臺是在Dell?臺式機(jī)上運(yùn)行的Ubuntu版本10。 在清單8的mount記錄中,您可以在底部看到archivemount文件系統(tǒng),在頂部可以看到Linux機(jī)器安裝的典型物理設(shè)備。
秘密文件系統(tǒng)
根據(jù)前兩個(gè)示例,您可以想象FUSE可以包裝許多網(wǎng)絡(luò)服務(wù)和文件格式,以提供對遠(yuǎn)程或打包文件的無縫訪問。 確實(shí),有許多可行的實(shí)現(xiàn)。 WikipediaFS掛載為本地文件系統(tǒng),您可以在其中本地編輯文章。 其他軟件包為Blogger,Flickr和Google Mail服務(wù)提供了幾乎相同的功能。
FUSE的另一種用法是鏡像或并行維護(hù)文件副本。 一個(gè)典型的例子是以FUSE為中心的加密文件系統(tǒng)(EncFS)。 給定一個(gè)源目錄和一個(gè)目標(biāo)目錄,寫入源目錄的所有文件都會自動加密并保存到目標(biāo)目錄。 librlog是一個(gè)靈活的消息記錄庫,是EncFS的先決條件。 從源代碼或發(fā)行版的存儲庫安裝它,然后繼續(xù)構(gòu)建EncFS,如清單9所示。
清單9.安裝EncFS
$ wget http://encfs.googlecode.com/files/encfs-1.6-1.tgz $ tar xzf encfs-1.6-1.tgz $ cd encfs-1.6-1 $ ./configure $ make $ sudo make install安裝軟件包后,即可開始使用。 您必須創(chuàng)建兩個(gè)新目錄-一個(gè)用于原始文件,一個(gè)用于加密文件。 encfs實(shí)用程序?qū)烧哂成湓谝黄?#xff0c;如清單10所示。
清單10.創(chuàng)建串聯(lián)目錄進(jìn)行加密
$ mkdir ~/data $ mkdir ~/encrypted_data $ encfs ~/encrypted_data ~/data Creating new encrypted volume. Please choose from one of the following options:enter "x" for expert configuration mode,enter "p" for preconfigured paranoia mode,anything else, or an empty line will select standard mode. ?> pParanoia configuration selected.Configuration finished. The file system to be created has the following properties: Filesystem cipher: "ssl/aes", version 2:2:1 Filename encoding: "nameio/block", version 3:0:1 Key Size: 256 bits Block Size: 1024 bytes, including 8 byte MAC header Each file contains 8 byte header with unique IV data. Filenames encoded using IV chaining mode. File data IV is chained to filename IV. File holes passed through to ciphertext.-------------------------- WARNING -------------------------- The external initialization-vector chaining option has been enabled. This option disables the use of hard links on the file system. Without hard links, some programs may not work. The programs 'mutt' and 'procmail' are known to fail. For more information, please see the encfs mailing list. If you would like to choose another configuration setting, please press CTRL-C now to abort and start over.Now you will need to enter a password for your file system. You will need to remember this password, as there is absolutely no recovery mechanism. However, the password can be changed later using encfsctl.New Encfs Password: Verify Encfs Password:通常,您可以選擇“偏執(zhí)狂”模式。 接下來,輸入密碼以保護(hù)文件,然后再次輸入以確認(rèn)密碼。 清單11顯示了代碼。
清單11. EncFS自動加密新文件
$ cd ~/data $ vi secrets.txt [Create file with your secrets.] $ ls secrets.txt $ ls ~/encrypted_data LKs2bi5sfttNlyExybM6eNck您創(chuàng)建的每個(gè)文件都反映在加密目錄中,甚至文件名也被加密。 完成后,只需卸載未加密的目錄,如清單12所示。 目錄的內(nèi)容將被刪除,僅保留安全文件。
清單12.卸載加密目錄
$ fusermount -u ~/data $ ls ~/data No such file or directory $ ls ~/encrypted_data LKs2bi5sfttNlyExybM6eNck要查看未加密的文件,請將安裝點(diǎn)連接到先前加密的文件集。 在提示您進(jìn)行身份驗(yàn)證時(shí)輸入密碼:
$ encfs ~/encrypted_data ~/data EncFS Password:$ ls ~/data secrets.txt重新安裝后,您的原始文件將可用并且可以純文本形式查看。 對文件的任何更改都會導(dǎo)致對其進(jìn)行重新編碼。
保險(xiǎn)絲:這不是玩具!
盡管前面的示例非常簡單,但是請不要低估FUSE的功能。 一些功能強(qiáng)大的文件存儲解決方案也在用戶空間中運(yùn)行。 例如,ZFS-Fuse是用戶空間中ZFS的實(shí)現(xiàn)。 MooseFS是一個(gè)容錯(cuò)的,網(wǎng)絡(luò)分布式文件系統(tǒng)。 它將數(shù)據(jù)分散在多個(gè)物理服務(wù)器上,但用戶將汞合金視為一種類似于UNIX的文件系統(tǒng)資源。 GlusterFS是基于FUSE的高性能分布式文件系統(tǒng)。
描述GlusterFS部署不在本文討論范圍之內(nèi),但是簡短的介紹應(yīng)該演示您可以使用FUSE構(gòu)建的功能,避免內(nèi)核修改和補(bǔ)丁。 具體來說,GlusterFS可以:
- 跨越任意數(shù)量的機(jī)器。
- 將完全不同的異構(gòu)存儲設(shè)備和物理文件系統(tǒng)(GlusterFS稱為磚)聚合到一個(gè)統(tǒng)一的池或名稱空間中。
- 臨時(shí)組合文件系統(tǒng)功能(GlusterFS稱為翻譯程序),以構(gòu)建定制的存儲解決方案。 一個(gè)翻譯器提供復(fù)制,而另一個(gè)則通過TCP / IP實(shí)現(xiàn)連接。
- 通過預(yù)讀,后寫和許多其他技巧來提高性能。
GlusterFS版本3極大地簡化了該軟件的初始設(shè)置,這僅比在整個(gè)系統(tǒng)的子網(wǎng)絡(luò)中建立SSH密鑰要復(fù)雜得多。 但是更好的是,GlusterFS不需要內(nèi)核更新或特殊的自定義。 因?yàn)樗怯肍USE編寫的,所以它可以在內(nèi)核環(huán)境之外運(yùn)行,并且可以由任何開發(fā)人員擴(kuò)展。
點(diǎn)亮保險(xiǎn)絲!
保險(xiǎn)絲是一項(xiàng)不可思議的技術(shù)。 使用它,您可以使用許多流行的編程語言開發(fā)新的文件系統(tǒng),包括Python,Ruby,Lua, C/C++ ,Java?語言等等。 此外,創(chuàng)建和部署新文件系統(tǒng)并不要求更改所有正在運(yùn)行的系統(tǒng)的內(nèi)核。 您可以在另一篇題為“ 使用FUSE開發(fā)自己的文件系統(tǒng):不需要內(nèi)核編程 ”的developerWorks文章中了解有關(guān)FUSE如何與內(nèi)核協(xié)同工作的更多信息。 請參閱“ 相關(guān)主題”部分,以獲取其他閱讀材料以及指向此處提到的項(xiàng)目的鏈接。
現(xiàn)在有大量的FUSE文件系統(tǒng)可用,并且每天都有更多的FUSE文件系統(tǒng)出現(xiàn)。 ZFS-Fuse和GlusterFS是非常復(fù)雜的解決方案的兩個(gè)示例,但是archivemount和SSHFS同樣有用。 所有FUSE文件系統(tǒng)都滿足特定要求。 如果您有特殊要求,則可以考慮使用FUSE和一些代碼來編寫自己的文件系統(tǒng)。
翻譯自: https://www.ibm.com/developerworks/aix/library/au-spunix_newfs/index.html
總結(jié)
以上是生活随笔為你收集整理的新兴实践_新兴文件系统简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android12,SCHEDULE_E
- 下一篇: linux替换屏幕保护进程,有没有一个体