<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-49  評(píng)論-67  文章-27  trackbacks-0

    **********
    Daniel Robbins(drobbins@gentoo.org)
    總裁/首席執(zhí)行官,Gentoo Technologies,Inc.
    2001 年 9 月
    **********
    伴隨著 Linux 2.4 版本的發(fā)行,出現(xiàn)了大量的文件系統(tǒng)可能性,其中包括 ReiserFS、XFS、GFS 和其它文件系統(tǒng)。這些文件系統(tǒng)聽起來的確都很酷,但是它們真正能做些什么呢,擅長在哪些方面,以及在 Linux 產(chǎn)品環(huán)境下如何才能安全地使用它們呢?Daniel Robbins 通過向您展示如何在 Linux 2.4 的環(huán)境下建立這些新的高級(jí)文件系統(tǒng)來回答以上的問題。在這個(gè)部分,Daniel 簡(jiǎn)單地介紹了 tmpfs,一個(gè)基于 VM 的文件系統(tǒng),還向您介紹了 2.4 版本的“綁定”安裝功能帶來的新的可能。

    在本文中,我們要談?wù)搸讉€(gè)相對(duì)次要的主題。首先,我們會(huì)簡(jiǎn)單地介紹一下 tmpfs,也就是我們知道的虛擬內(nèi)存(virtual memory,VM)文件系統(tǒng)。Tmpfs 可能是現(xiàn)在 Linux 可以使用的最好的類似于 RAM 磁盤的系統(tǒng),而且是 2.4 內(nèi)核的一個(gè)新功能。然后,我們將簡(jiǎn)單地介紹另一個(gè) 2.4 內(nèi)核的新功能,叫做“綁定安裝”,它在安裝(和重新安裝)文件系統(tǒng)的時(shí)候帶來了很大的靈活性。介紹 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ì),絲毫不必忙亂。

    posted on 2006-05-31 15:20 思考 閱讀(611) 評(píng)論(0)  編輯  收藏 所屬分類: Linux技術(shù)
    主站蜘蛛池模板: 亚洲一区无码中文字幕乱码| 日日狠狠久久偷偷色综合免费| 无码一区二区三区AV免费| 亚洲高清国产拍精品熟女| 亚洲日本韩国在线| 57pao一国产成永久免费| 鲁死你资源站亚洲av| 久久伊人久久亚洲综合| 免费人成在线视频| 两个人看的www免费高清| 亚洲jjzzjjzz在线播放| 亚洲一级黄色视频| 97免费人妻无码视频| 国产无限免费观看黄网站| 亚洲性色成人av天堂| 三上悠亚亚洲一区高清| 午夜神器成在线人成在线人免费| 中国国语毛片免费观看视频| 亚洲中文字幕精品久久| 亚洲成av人影院| 国产精品色午夜免费视频| 57pao国产成视频免费播放| 亚洲一区二区三区免费| ASS亚洲熟妇毛茸茸PICS| 亚洲成A人片在线观看WWW| 国产午夜免费秋霞影院| 毛片免费全部播放无码| 爽爽爽爽爽爽爽成人免费观看| 亚洲αⅴ无码乱码在线观看性色| 亚洲国产精品VA在线观看麻豆| 又粗又大又长又爽免费视频| 真人做人试看60分钟免费视频| 中出五十路免费视频| 男男gvh肉在线观看免费| 亚洲大片免费观看| 久久久久久亚洲精品中文字幕| 免费在线看片网站| 久草在视频免费福利| 日本免费大黄在线观看| 91视频免费观看| 日本激情猛烈在线看免费观看|