<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      本文介紹 Linux 文件系統(tǒng)相關(guān)的基本概念。

      硬盤的物理組成

      盤片

      硬盤其實(shí)是由單個(gè)或多個(gè)圓形的盤片組成的,按照盤片能夠容納的數(shù)據(jù)量,分為單盤(一個(gè)硬盤里面只有一個(gè)盤片)或多盤(一個(gè)硬盤里面有多個(gè)盤片)的硬盤。下面是一張盤片的示意圖(此圖來自互聯(lián)網(wǎng)):



      磁道和柱面

      硬盤中有磁頭在盤片上讀寫數(shù)據(jù),磁頭固定在機(jī)械臂上,機(jī)械臂上有多個(gè)磁頭(每個(gè)盤片的兩側(cè)各一個(gè))。當(dāng)磁頭固定不動(dòng)時(shí)(假設(shè)機(jī)械手臂不動(dòng)),盤片轉(zhuǎn)一圈所畫出來的圓就是磁道(track)。所有盤片上相同半徑的那個(gè)磁道就組成了柱面(cylinder)。柱面是磁盤分區(qū)是的最小單位。

      扇區(qū)
      由圓心向外畫直線,可以將磁道再劃分為扇區(qū),扇區(qū)就是盤片上最小的讀寫單位。通常情況下,一個(gè)扇區(qū)的大小為 512 個(gè)字節(jié)。因此可以使用下面的公式計(jì)算磁盤的容量:
      柱面數(shù) * 磁頭數(shù) * 扇區(qū)數(shù) * 512 字節(jié)

      磁盤分區(qū)

      為什么要對硬盤進(jìn)行分區(qū)呢?
      因?yàn)槲覀儽仨氁嬖V操作系統(tǒng):這塊硬盤可以訪問的區(qū)域是從 A 柱面到 B 柱面。如此一來,操作系統(tǒng)才能控制硬盤磁頭去 A-B
      范圍內(nèi)的柱面上訪問數(shù)據(jù)。如果沒有告訴操作系統(tǒng)這些信息,它就無法在磁盤上存取數(shù)據(jù)。所以對磁盤分區(qū)的要點(diǎn)是:記錄每一個(gè)分區(qū)的起始與結(jié)束柱面。
      實(shí)際上,分區(qū)時(shí)指定的開始和結(jié)束位置是柱面上的扇區(qū)(sector):



      下圖是通過 fdisk 命令查看到的磁盤分區(qū)信息:



      那么,這些分區(qū)的信息(起始柱面與結(jié)束柱面)被存放在了哪里呢?答案是磁盤的主引導(dǎo)區(qū)(Master Boot Recorder, MBR)。MBR
      在一塊硬盤的第 0 軌上,這也是計(jì)算機(jī)啟動(dòng)之后要去使用硬盤時(shí)必須讀取的第一個(gè)區(qū)域。
      這個(gè)區(qū)域內(nèi)記錄了硬盤里所有分區(qū)的信息即磁盤分區(qū)表,以及啟動(dòng)時(shí)可以寫入引導(dǎo)程序的位置。因此 MBR
      對于硬盤來說至關(guān)重要,如果它壞掉了,這塊磁盤也就壽終正寢了。下面是磁盤分區(qū)表的示意圖(此圖來自互聯(lián)網(wǎng)):



      文件系統(tǒng)

      在告知系統(tǒng)分區(qū)所在的起始與結(jié)束柱面后,需要將分區(qū)格式化為操作系統(tǒng)能夠識(shí)別的文件系統(tǒng)。每個(gè)操作系統(tǒng)能夠識(shí)別的文件系統(tǒng)并不相同,比如 Windows
      系統(tǒng)在默認(rèn)的情況下就無法識(shí)別 Linux 的文件系統(tǒng),所以要針對操作系統(tǒng)來格式化分區(qū)。可以簡單的認(rèn)為每個(gè)分區(qū)就是一個(gè)文件系統(tǒng)。

      邏輯塊

      不論哪種文件系統(tǒng),目的都是為了存儲(chǔ)數(shù)據(jù)。前面提到,硬盤的最小讀寫單位是扇區(qū),而現(xiàn)實(shí)中數(shù)據(jù)的讀寫單位并不是扇區(qū)的大小,原因是使用扇區(qū)的大小為單位來讀寫數(shù)據(jù)的效率實(shí)在是太低了。因?yàn)橐粋€(gè)扇區(qū)只有
      512 個(gè)字節(jié),而磁頭是一個(gè)扇區(qū)一個(gè)扇區(qū)的讀取數(shù)據(jù),也就是說,如果文件有 10M,那么讀取這個(gè)文件磁頭就要進(jìn)行 20480 次讀取操作(I/O)。

      為了提升效率,就有了邏輯塊(Block)的概念。邏輯塊是在分區(qū)進(jìn)行文件系統(tǒng)的格式化時(shí)所指定的"最小存儲(chǔ)單位",這個(gè)最小存儲(chǔ)單位以扇區(qū)的大小為基礎(chǔ)(因?yàn)樯葏^(qū)為硬盤的最小物理存儲(chǔ)單位),大小為扇區(qū)大小的
      2? 倍。此時(shí),磁頭一次可以讀取一個(gè)邏輯塊。指定邏輯塊的大小為 4KB(即由連續(xù)的 8 個(gè)扇區(qū)構(gòu)成的一個(gè)塊),那么,同樣讀取一個(gè) 10M
      的文件,磁頭要讀取的次數(shù)則大幅下降為 2560 次,這樣就大大提高了文件的讀取效率。
      需要注意的是,邏輯塊也并不是越大越好。因?yàn)橐粋€(gè)邏輯塊最多僅能容納一個(gè)文件(這里指 Linux 的 ext2
      文件系統(tǒng))。這有什么問題呢?舉例來說,假如邏輯塊的大小為 4KB,有一個(gè)文件大小為 0.1KB,這個(gè)小文件將占用掉一個(gè)塊的空間。也就是說,該塊雖然可以容納
      4KB 的容量,然而由于文件只占用了 0.1KB,實(shí)際上剩下的 3.9KB
      空間就不能再被使用了(完全浪費(fèi)掉了)。所以好的方式是根據(jù)實(shí)際的使用場景來設(shè)置邏輯塊的大小。

      在分區(qū)上創(chuàng)建文件系統(tǒng)時(shí),可以指定文件系統(tǒng)的邏輯塊大?。?br>


      上面命令中我們指定的邏輯塊大小為 1024 B,也就是兩個(gè)扇區(qū)的大小。我們還可以通過 tune2fs 查看現(xiàn)有文件系統(tǒng)邏輯塊的大?。?br>


      這里需要區(qū)分三個(gè)概念:
      扇區(qū)、邏輯塊和頁
      塊設(shè)備中最小的尋址單元是扇區(qū)。
      邏輯塊是文件系統(tǒng)的一種抽象--只能基于塊來訪問文件系統(tǒng)。內(nèi)核執(zhí)行的所有磁盤操作都是按照塊進(jìn)行的(但是所有設(shè)備的 I/O
      必須以扇區(qū)為單位進(jìn)行操作)。對塊的要求有:必須是扇區(qū)大小的 2 的整數(shù)倍;不能超過頁的大小。

      內(nèi)核把內(nèi)存的物理頁作為內(nèi)存的管理單位,因?yàn)閺拇疟P讀取的數(shù)據(jù)最終都會(huì)被保存在內(nèi)存中,所以系統(tǒng)優(yōu)化的結(jié)果是不允許文件系統(tǒng)中的邏輯塊超過內(nèi)存頁的大小??梢酝ㄟ^下面的命令查看系統(tǒng)中頁的大?。?br>$ getconf PAGESIZE


      超級(jí)塊
      分區(qū)完成后,每個(gè)分區(qū)會(huì)被格式化為一個(gè)文件系統(tǒng)。而每個(gè)文件系統(tǒng)開始位置的那個(gè)塊就稱為超級(jí)塊(superblock)。超級(jí)塊會(huì)記錄整個(gè)文件系統(tǒng)的整體信息,包括
      inode 與 block 的總量、使用量、剩余量等。
      也就是說,要使用一個(gè)分區(qū)(或文件系統(tǒng))來進(jìn)行數(shù)據(jù)訪問時(shí),第一個(gè)要經(jīng)過的就是超級(jí)塊。所以,如果超級(jí)塊損壞了,這個(gè)分區(qū)上的數(shù)據(jù)也就丟掉了。

      inode
      Linux
      操作系統(tǒng)的文件數(shù)據(jù)除了文件實(shí)際內(nèi)容外,通常含有非常多的屬性,例如文件權(quán)限(rwx)與文件屬性(擁有者、群組、時(shí)間參數(shù)等)。文件系統(tǒng)通常會(huì)將這兩部份的數(shù)據(jù)分別存放在不同的區(qū)塊,權(quán)限與屬性放置到
      inode 中,至于實(shí)際數(shù)據(jù)則放置到 datablock 區(qū)塊中。

      block
      實(shí)際記錄文件的內(nèi)容,若文件太大時(shí),會(huì)占用多個(gè) block。

      每個(gè)文件都會(huì)占用一個(gè) inode,inode 內(nèi)則有文件數(shù)據(jù)放置的 block 號(hào)碼。下面是 inode、block 數(shù)據(jù)存取的示意圖(此圖來自互聯(lián)網(wǎng)):



      這種數(shù)據(jù)存取的方法我們稱為索引式文件系統(tǒng)(indexed allocation)。

      掛載點(diǎn)
      在 Linux
      系統(tǒng)中,文件系統(tǒng)被安裝在一個(gè)特定的掛載點(diǎn)(一個(gè)普通的目錄)上,所有的已安裝文件系統(tǒng)都作為根文件系統(tǒng)樹的枝葉出現(xiàn)在系統(tǒng)中。與這種單一、統(tǒng)一的樹形成鮮明對照的就是
      Windows 系統(tǒng)的表現(xiàn),它們以字母命名文件系統(tǒng),比如我們常見的 C 盤、D 盤。

      參考:
      《鳥哥的私房菜》

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          五月天av无码 | 做爱网站网站入口在线观看免费 | 男人添女人下部高潮全视频 | 中文字幕无码一区二区三区一本久道不卡 | 色色香蕉| 波多野47部无码喷潮在线 | 国产精品粉嫩福利在线 | 男人操女人在线观看 | 色色色99| 日韩视频中文 |