日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

tmpfs介紹

系統(tǒng) 2254 0
介紹 tmpfs
如果我必須一下子說清楚 tmpfs,我會(huì)說 tmpfs
就象虛擬磁盤(ramdisk),但不一樣。象虛擬磁盤一樣,tmpfs 可以使用您的
RAM,但它也可以使用您的交換分區(qū)來存儲(chǔ)。而且傳統(tǒng)的虛擬磁盤是個(gè)塊設(shè)備,并需要一個(gè)
mkfs 之類的命令才能真正地使用它,tmpfs
是一個(gè)文件系統(tǒng),而不是塊設(shè)備;您只是安裝它,它就可以使用了。總而言之,這讓
tmpfs 成為我有機(jī)會(huì)遇到的最好的基于 RAM 的文件系統(tǒng)。
tmpfs 和 VM
讓我們來看看 tmpfs 更有趣的一些特性吧。正如我前面提到的一樣,tmpfs
既可以使用 RAM, 也可以使用交換分區(qū)。剛開始這看起來可能有點(diǎn)武斷,但請(qǐng)記住
tmpfs 也是我們知道的"虛擬內(nèi)存文件系統(tǒng)"。而且,您可能也知道,Linux
內(nèi)核的虛擬內(nèi)存資源同時(shí)來源于您的 RAM 和交換分區(qū)。內(nèi)核中的 VM
子系統(tǒng)將這些資源分配到系統(tǒng)中的其它部分,并負(fù)責(zé)在后臺(tái)管理這些資源,通常是透明地將
RAM 頁移動(dòng)到交換分區(qū)或從交換分區(qū)到 RAM 頁。
tmpfs 文件系統(tǒng)需要 VM 子系統(tǒng)的頁面來存儲(chǔ)文件。tmpfs
自己并不知道這些頁面是在交換分區(qū)還是在 RAM 中;做這種決定是 VM
子系統(tǒng)的工作。tmpfs 文件系統(tǒng)所知道的就是它正在使用某種形式的虛擬內(nèi)存。
不是塊設(shè)備
這里是 tmpfs 文件系統(tǒng)另一個(gè)有趣的特性。不同于大多數(shù)"標(biāo)準(zhǔn)的"文件系統(tǒng),如
ext3、ext2、XFS、JFS、ReiserFS 和其它一些系統(tǒng),tmpfs
并不是存在于一個(gè)底層塊設(shè)備上面。因?yàn)?tmpfs 是直接建立在 VM
之上的,您用一個(gè)簡(jiǎn)單的 mount 命令就可以創(chuàng)建 tmpfs 文件系統(tǒng)了。# mount
tmpfs /mnt/tmpfs -t tmpfs
執(zhí)行這個(gè)命令之后,一個(gè)新的 tmpfs 文件系統(tǒng)就安裝在
/mnt/tmpfs,隨時(shí)可以使用。注意,不需運(yùn)行 mkfs.tmpfs
;事實(shí)上,那是不可能的,因?yàn)闆]有這樣的命令存在。在 mount
命令執(zhí)行之后,文件系統(tǒng)立即就被安裝并且可以使用了,類型是 tmpfs 。這和
Linux 虛擬磁盤如何使用大相徑庭;標(biāo)準(zhǔn)的 Linux 虛擬磁盤是
塊設(shè)備,所以在使用它們之前必須用您選擇的文件系統(tǒng)將其格式化。相反,tmpfs
是一個(gè)文件系統(tǒng)。所以,您可以簡(jiǎn)單地安裝它就可以使用了。

Tmpfs 的優(yōu)勢(shì)
動(dòng)態(tài)文件系統(tǒng)的大小
您可能想知道我們前面在 /mnt/tmpfs 安裝的 tmpfs
文件系統(tǒng)有多大。這個(gè)問題的答案有點(diǎn)意外,特別是在和基于磁盤的文件系統(tǒng)比較的時(shí)候。/mnt/tmpfs
最初會(huì)只有很小的空間,但隨著文件的復(fù)制和創(chuàng)建,tmpfs
文件系統(tǒng)驅(qū)動(dòng)程序會(huì)分配更多的
VM,并按照需求動(dòng)態(tài)地增加文件系統(tǒng)的空間。而且,當(dāng) /mnt/tmpfs
中的文件被刪除時(shí),tmpfs 文件系統(tǒng)驅(qū)動(dòng)程序會(huì)動(dòng)態(tài)地減小文件系統(tǒng)并釋放 VM
資源,這樣做可以將 VM 返回到循環(huán)當(dāng)中以供系統(tǒng)中其它部分按需要使用。因?yàn)?VM
是寶貴的資源,所以您一定不希望任何東西浪費(fèi)超出它實(shí)際所需的 VM,tmpfs
的好處之一就在于這些都是自動(dòng)處理的。 請(qǐng)參閱 參考資料。
速度
tmpfs 的另一個(gè)主要的好處是它閃電般的速度。因?yàn)榈湫偷?tmpfs
文件系統(tǒng)會(huì)完全駐留在 RAM
中,讀寫幾乎可以是瞬間的。即使用了一些交換分區(qū),性能仍然是卓越的,當(dāng)更多空閑的
VM 資源可以使用時(shí),這部分 tmpfs 文件系統(tǒng)會(huì)被移動(dòng)到 RAM 中去。讓 VM
子系統(tǒng)自動(dòng)地移動(dòng)部分 tmpfs 文件系統(tǒng)到交換分區(qū)實(shí)際上對(duì)性能上是
好的,因?yàn)檫@樣做可以讓 VM 子系統(tǒng)為需要 RAM
的進(jìn)程釋放空間。這一點(diǎn)連同它動(dòng)態(tài)調(diào)整大小的能力,比選擇使用傳統(tǒng)的 RAM
磁盤可以讓操作系統(tǒng)有好得多的整體性能和靈活性。
沒有持久性
這看起來可能不象是個(gè)積極因素,tmpfs
數(shù)據(jù)在重新啟動(dòng)之后不會(huì)保留,因?yàn)樘摂M內(nèi)存本質(zhì)上就是易失的。我想您可能猜到了
tmpfs 被稱為"tmpfs"的一個(gè)原因,不是嗎?然而,這實(shí)際上可以是一件好事。它讓
tmpfs 成為一個(gè)保存您不需保留的數(shù)據(jù)(如臨時(shí)文件,可以在 /tmp 中找到,還有
/var 文件系統(tǒng)樹的某些部分)的卓越的文件系統(tǒng)。

使用 tmpfs
為了使用 tmpfs,您所需要的就是啟用了"Virtual memory file system
support(以前是 shm fs)"選項(xiàng)的 2.4
系列內(nèi)核;這個(gè)選項(xiàng)在內(nèi)核配置選項(xiàng)的"File systems"部分。一旦您有了一個(gè)啟用了
tmpfs 的內(nèi)核,您就可以開始安裝 tmpfs 文件系統(tǒng)了。其實(shí),在您所有的 2.4
內(nèi)核中都打開 tmpfs 選項(xiàng)是個(gè)好主意,不管您是否計(jì)劃使用
tmpfs。這是因?yàn)槟枰獌?nèi)核 tmpfs 支持來使用 POSIX 共享的內(nèi)存。然而, System
V共享的內(nèi)存不需要內(nèi)核中有 tmpfs 就 可以工作。注意,您 不需要為了讓 POSIX
共享的內(nèi)存工作而安裝 tmpfs 文件系統(tǒng);您只需要在內(nèi)核中支持 tmpfs
就可以了。POSIX
共享的內(nèi)存現(xiàn)在使用得不太多,但這種情況可能會(huì)隨著時(shí)間而改變。
避免低 VM 情況
tmpfs 根據(jù)需要?jiǎng)討B(tài)增大或減小的事實(shí)讓人疑惑:如果您的 tmpfs
文件系統(tǒng)增大到它耗盡了 所有虛擬內(nèi)存的程度,而您沒有剩余的 RAM
或交換分區(qū),這時(shí)會(huì)發(fā)生什么?一般來說,這種情況是有點(diǎn)討厭。如果是 2.4.4
內(nèi)核,內(nèi)核會(huì)立即鎖定。如果是 2.4.6 內(nèi)核,VM
子系統(tǒng)已經(jīng)以很多種方式得到了修正,雖然耗盡 VM
并不是一個(gè)美好的經(jīng)歷,事情也不會(huì)完全地失敗。如果 2.4.6
內(nèi)核到了無法分配更多 VM 的程度,您顯然不愿意不能向 tmpfs
文件系統(tǒng)寫任何新數(shù)據(jù)。另外,可能會(huì)發(fā)生其他一些事情。首先,系統(tǒng)的其他一些進(jìn)程會(huì)無法分配更多的內(nèi)存;通常,這意味著系統(tǒng)多半會(huì)變得
極度緩慢而且?guī)缀鯖]有響應(yīng)。這樣,超級(jí)用戶要采取必要的步驟來緩解這種低 VM
的情況就會(huì)很困難,或異常地耗時(shí)。
另外,內(nèi)核有一個(gè)內(nèi)建的最終防線系統(tǒng),用來在沒有可用內(nèi)存的時(shí)候釋放內(nèi)存,它會(huì)找到占用
VM 資源的進(jìn)程并終止該進(jìn)程。不幸的是,這種"終止進(jìn)程"的解決方案在 tmpfs
的使用增加引起 VM 耗盡的情況下通常會(huì)導(dǎo)致不良后果。以下是原因。tmpfs
本身不能(也不應(yīng)該)被終止,因?yàn)樗莾?nèi)核的一部分而非一個(gè)用戶進(jìn)程,而且也沒有容易的方法可以讓內(nèi)核找出是那個(gè)進(jìn)程占滿了
tmpfs 文件系統(tǒng)。所以,內(nèi)核會(huì)錯(cuò)誤地攻擊它能找到的最大的占用 VM
的進(jìn)程,通常會(huì)是 X 服務(wù)器(X server),如果您碰巧在使用它。所以,您的 X
服務(wù)器會(huì)被終止,而引起低 VM 情況的根本原因(tmpfs)卻沒有被解決。Ick.
低 VM:解決方案
幸運(yùn)的是,tmpfs
允許您在安裝或重新安裝文件系統(tǒng)的時(shí)候指定文件系統(tǒng)容量的最大值上限。實(shí)際上,從
2.4.6 內(nèi)核到 2.11g 內(nèi)核,這些參數(shù)只能在
安裝時(shí)設(shè)置,而不是重新安裝時(shí),但我們可以期望在不久的將來可以在重新安裝時(shí)設(shè)置這些參數(shù)。tmpfs
容量最大值的最佳設(shè)置依賴于資源和您特定的 Linux
主機(jī)的使用模式;這個(gè)想法是要防止一個(gè)完全使用資源的 tmpfs
文件系統(tǒng)耗盡所有虛擬內(nèi)存結(jié)果導(dǎo)致我們前面談到的糟糕的低 VM 情況。尋找好的
tmpfs 上限值的一個(gè)好方法是使用 top
來監(jiān)控您系統(tǒng)的交換分區(qū)在高峰使用階段的使用情況。然后,確保指定的 tmpfs
上限稍小于所有這些高峰使用時(shí)間內(nèi)空閑交換分區(qū)和空閑 RAM 的總和。
創(chuàng)建有最大容量的 tmpfs 文件系統(tǒng)很容易。要?jiǎng)?chuàng)建一個(gè)新的最大 32 MB 的 tmpfs
文件系統(tǒng),請(qǐng)鍵入:# mount tmpfs /dev/shm -t tmpfs -o size=32m
這次,我們沒有把 tmpfs 文件系統(tǒng)安裝在 /mnt/tmpfs,而是創(chuàng)建在
/dev/shm,這正好是 tmpfs 文件系統(tǒng)的"正式"安裝點(diǎn)。如果您正好在使用
devfs,您會(huì)發(fā)現(xiàn)這個(gè)目錄已經(jīng)為您創(chuàng)建好了。
還有,如果我們想將文件系統(tǒng)的容量限制在 512 KB 或 1 GB
以內(nèi),我們可以分別指定 size=512k 和 size=1g
。除了限制容量,我們還可以通過指定 nr_inodes=x
參數(shù)限制索引節(jié)點(diǎn)(文件系統(tǒng)對(duì)象)。在使用 nr_inodes 時(shí), x
可以是一個(gè)簡(jiǎn)單的整數(shù),后面還可以跟一個(gè) k 、 m 或 g
指定千、百萬或十億(!)個(gè)索引節(jié)點(diǎn)。
而且,如果您想把上面的 mount tmpfs 命令的等價(jià)功能添加到
/etc/fstab,應(yīng)該是這樣: tmpfs /dev/shm tmpfs size=32m 0 0
在現(xiàn)存的安裝點(diǎn)上安裝
在以前使用 2.2 的時(shí)候,試圖在
已經(jīng)安裝了東西的安裝點(diǎn)再次安裝任何東西都會(huì)引發(fā)錯(cuò)誤。然而,重寫后的內(nèi)核安裝代碼使多次使用安裝點(diǎn)不再成為問題。這里是一個(gè)示例的情況:假設(shè)我們有一個(gè)現(xiàn)存的文件系統(tǒng)安裝在
/tmp。然而,我們決定要開始使用 tmpfs 進(jìn)行 /tmp
的存儲(chǔ)。過去,您唯一的選擇就是卸載 /tmp 并在其位置重新安裝您新的 tmpfs/tmp
文件系統(tǒng),如下所示: # umount /tmp# mount tmpfs /tmp -t tmpfs -o size=64m
可是,這種解決方案也許對(duì)您不管用。可能有很多正在運(yùn)行的進(jìn)程在 /tmp
中有打開的文件;如果是這樣,在試圖卸載 /tmp
時(shí),您就會(huì)遇到如下的錯(cuò)誤:umount: /tmp: device is busy
然而,使用最近的 2.4 內(nèi)核,您可以安裝您新的 /tmp
文件系統(tǒng),而不會(huì)遇到"device is busy"錯(cuò)誤:# mount tmpfs /tmp -t tmpfs -o
size=64m
用一條命令,您新的 tmpfs /tmp 文件系統(tǒng)就被安裝在
/tmp,并安裝在已經(jīng)安裝的不能再被直接訪問的分區(qū)
之上。然而,雖然您不能訪問原來的
/tmp,任何在原文件系統(tǒng)上還有打開文件的進(jìn)程都可以繼續(xù)訪問它們。而且,如果您
unmount 基于 tmpfs 的 /tmp,原來安裝的 /tmp
文件系統(tǒng)會(huì)重新出現(xiàn)。實(shí)際上,您在相同的安裝點(diǎn)上可以安裝任意數(shù)目的文件系統(tǒng),安裝點(diǎn)就象一個(gè)堆棧;卸載當(dāng)前的文件系統(tǒng),上一個(gè)最近安裝的文件系統(tǒng)就會(huì)重新出現(xiàn)。
綁定安裝

使用綁定安裝,我們可以將所有甚至
部分已經(jīng)安裝的文件系統(tǒng)安裝到另一個(gè)位置,而在兩個(gè)安裝點(diǎn)可以同時(shí)訪問該文件系統(tǒng)。例如,您可以使用綁定安裝來安裝您現(xiàn)存的根文件系統(tǒng)到
/home/drobbins/nifty,如下所示: # mount --bind / /home/drobbins/nifty
現(xiàn)在,如果您觀察 /home/drobbins/nifty
的內(nèi)部,您就會(huì)看到您的根文件系統(tǒng)(/home/drobbins/nifty/etc、/home/drobbins/nifty/opt
等)。而且,如果您在根文件系統(tǒng)修改文件,您在 /home/drobbins/nifty
中也可以看到所作的改動(dòng)。這是因?yàn)樗鼈兪峭粋€(gè)文件系統(tǒng);內(nèi)核只是簡(jiǎn)單地為我們將該文件系統(tǒng)映射到兩個(gè)不同的安裝點(diǎn)。注意,當(dāng)您在另一處安裝文件系統(tǒng)時(shí),任何安裝在綁定安裝文件系統(tǒng)
內(nèi)部的安裝點(diǎn)的文件系統(tǒng)都不會(huì)隨之移動(dòng)。換句話說,如果您在單獨(dú)的文件系統(tǒng)上有
/usr,我們前面執(zhí)行的綁定安裝就會(huì)讓 /home/drobbins/nifty/usr
為空。您會(huì)需要附加的綁定安裝命令來使您能夠?yàn)g覽位于
/home/drobbins/nifty/usr 的 /usr 的內(nèi)容: # mount --bind /usr
/home/drobbins/nifty/usr
綁定安裝部分文件系統(tǒng)
綁定安裝讓更妙的事情成為可能。假設(shè)您有一個(gè) tmpfs
文件系統(tǒng)安裝在它的傳統(tǒng)位置 /dev/shm,您決定要開始在當(dāng)前位于根文件系統(tǒng)的
/tmp 使用 tmpfs。雖然可以在 /tmp(這是可能的)安裝一個(gè)新的 tmpfs
文件系統(tǒng),您也可以決定讓新的 /tmp 共享當(dāng)前安裝的 /dev/shm
文件系統(tǒng)。然而,雖然您可以在 /tmp 綁定安裝 /dev/shm 就完成了,但您的
/dev/shm 還包含一些您不想在 /tmp 出現(xiàn)的目錄。所以,您怎么做呢?這樣如何:
# mkdir /dev/shm/tmp# chmod 1777 /dev/shm/tmp# mount --bind /dev/shm/tmp
/tmp
在這個(gè)示例中,我們首先創(chuàng)建了一個(gè) /dev/shm/tmp 目錄,然后給它 1777 權(quán)限,對(duì)
/tmp 適當(dāng)?shù)脑S可。既然我們的目錄已經(jīng)準(zhǔn)備好了,我們可以安裝,也只能安裝
/dev/shm/tmp 到 /tmp。所以,雖然 /tmp/foo 會(huì)映射到
/dev/shm/tmp/foo,但您沒有辦法從 /tmp 訪問 /dev/shm/bar 文件。
正如您所見,綁定安裝非常強(qiáng)大,讓您可以輕易地修改文件系統(tǒng)設(shè)計(jì),絲毫不必忙亂。

tmpfs介紹


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 安庆市| 赞皇县| 惠水县| 曲水县| 瑞金市| 南京市| 瑞昌市| 曲松县| 临洮县| 万年县| 察隅县| 渝中区| 南城县| 阜宁县| 濮阳市| 措美县| 天津市| 扎鲁特旗| 宜州市| 伊宁市| 乌拉特前旗| 霍林郭勒市| 元氏县| 永清县| 普陀区| 南乐县| 衡阳县| 旬阳县| 布尔津县| 土默特左旗| 日照市| 株洲县| 陆良县| 噶尔县| 普格县| 凯里市| 福州市| 宁陕县| 开鲁县| 玛多县| 彭州市|