国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Linux > 正文

磁盤、分區(qū)及Linux文件系統(tǒng) [Disk, Partition, Linux File System]

2024-06-28 13:20:30
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
磁盤、分區(qū)及l(fā)inux文件系統(tǒng) [Disk, Partition, Linux File System]1、磁盤基礎(chǔ)知識(shí)1.1 物理結(jié)構(gòu)硬盤的物理結(jié)構(gòu)一般由磁頭與碟片、電動(dòng)機(jī)、主控芯片與排線等部件組成;當(dāng)主電動(dòng)機(jī)帶動(dòng)碟片旋轉(zhuǎn)時(shí),副電動(dòng)機(jī)帶動(dòng)一組(磁頭)到相對(duì)應(yīng)的碟片上并確定讀取正面還是反面的碟面,磁頭懸浮在碟面上畫出一個(gè)與碟片同心的圓形軌道(磁軌或稱柱面),這時(shí)由磁頭的磁感線圈感應(yīng)碟面上的磁性與使用硬盤廠商指定的讀取時(shí)間或數(shù)據(jù)間隔定位扇區(qū),從而得到該扇區(qū)的數(shù)據(jù)內(nèi)容。所有的盤片都固定在一個(gè)旋轉(zhuǎn)軸上,這個(gè)軸即盤片主軸。而所有盤片之間是絕對(duì)平行的,在每個(gè)盤片的存儲(chǔ)面上都有一個(gè)磁頭,磁頭與盤片之間的距離比頭發(fā) 絲的直徑還小。所有的磁頭連在一個(gè)磁頭控制器上,由磁頭控制器負(fù)責(zé)各個(gè)磁頭的運(yùn)動(dòng)。磁頭可沿盤片的半徑方向動(dòng)作,而盤片以每分鐘數(shù)千轉(zhuǎn)到上萬(wàn)轉(zhuǎn)的速度在高 速旋轉(zhuǎn),這樣磁頭就能對(duì)盤片上的指定位置進(jìn)行數(shù)據(jù)的讀寫操作。
  • 磁道(Track)
當(dāng)磁盤旋轉(zhuǎn)時(shí),磁頭若保持在一個(gè)位置上,則每個(gè)磁頭都會(huì)在磁盤表面劃出一個(gè)圓形軌跡,這些圓形軌跡就叫做磁道(Track)。信息以脈沖串的形式記錄在這些軌跡中,這些同心圓不是連續(xù)記錄數(shù)據(jù),而是被劃分成一段段的圓弧(扇區(qū)),這些圓弧 的角速度一樣。
  • 柱面 (Cylinder)
在有多個(gè)盤片構(gòu)成的盤組中,由不同盤片的面,但處于同一半徑圓的多個(gè)磁道組成的一個(gè)圓柱面(Cylinder)。所有盤面上的同一磁道構(gòu)成一個(gè)圓柱,通常稱做柱面(Cylinder),每個(gè)圓柱上的磁頭由上而下從“0”開(kāi)始編號(hào)。數(shù)據(jù)的讀/寫按柱面進(jìn)行,即磁 頭讀/寫數(shù)據(jù)時(shí)首先在同一柱面內(nèi)從“0”磁頭開(kāi)始進(jìn)行操作,依次向下在同一柱面的不同盤面即磁頭上進(jìn)行操作,只在同一柱面所有的磁頭全部讀/寫完畢后磁頭 才轉(zhuǎn)移到下一柱面,因?yàn)檫x取磁頭只需通過(guò)電子切換即可,而選取柱面則必須通過(guò)機(jī)械切換。電子切換相當(dāng)快,比在機(jī)械上磁頭向鄰近磁道移動(dòng)快得多,所以,數(shù)據(jù) 的讀/寫按柱面進(jìn)行,而不按盤面進(jìn)行。也就是說(shuō),一個(gè)磁道寫滿數(shù)據(jù)后,就在同一柱面的下一個(gè)盤面來(lái)寫,一個(gè)柱面寫滿后,才移到下一個(gè)扇區(qū)開(kāi)始寫數(shù)據(jù)。讀數(shù) 據(jù)也按照這種方式進(jìn)行,這樣就提高了硬盤的讀/寫效率。
  • 扇區(qū)(Sector)
磁盤上的每個(gè)磁道被等分為若干個(gè)弧段,這些弧段便是硬盤的扇區(qū)(Sector)。硬盤的第一個(gè)扇區(qū),叫做引導(dǎo)扇區(qū)。操作系統(tǒng)以扇區(qū)(Sector)形式將信息存儲(chǔ)在硬盤上,每個(gè)扇區(qū)包括512個(gè)字節(jié)的數(shù)據(jù)和一些其他信息。
  • 磁頭(Head)
在硬盤系 統(tǒng)中,硬盤的每一個(gè)盤片都有兩個(gè)盤面(Side),即上、下盤面,一般每個(gè)盤面都會(huì)利 用,都可以存儲(chǔ)數(shù)據(jù)。盤面號(hào)又叫磁頭號(hào),因?yàn)槊恳粋€(gè)有效盤面都有一個(gè)對(duì)應(yīng)的讀寫磁頭。在 linux 中可以使用 fdisk -l 查看一個(gè)磁盤的物理結(jié)構(gòu):該磁盤有255個(gè)heads,也就是說(shuō)共有255個(gè)盤面。3263個(gè)柱面(cylinders),也就是說(shuō)每個(gè)盤面上都有3263個(gè)磁道, 63 sectors/track說(shuō)的是每個(gè)磁道上共有63個(gè)扇區(qū)。命令結(jié)果也給出了Sector size的值是512bytes。那我們動(dòng)筆算一下該磁盤的大小吧。255盤面 * 3263柱面 * 63扇區(qū) * 每個(gè)扇區(qū)512bytes = 26839088640byte。結(jié)果是26.8G,和磁盤的總大小相符。1.2 磁盤的讀寫原理系統(tǒng)將文件存儲(chǔ)到磁盤上時(shí),按柱面、磁頭、扇區(qū)的方式進(jìn)行,即最先是第1磁道的第一磁頭下(也就是第1盤面的第一磁道)的所有扇區(qū),然后,是同一柱面的下一磁頭,……,一個(gè)柱面存儲(chǔ)滿后就推進(jìn)到下一個(gè)柱面,直到把文件內(nèi)容全部寫入磁盤。系統(tǒng)也以相同的順序讀出數(shù)據(jù)。讀出數(shù)據(jù)時(shí)通過(guò)告訴磁盤控制器要讀出扇區(qū)所在的柱面號(hào)、磁頭號(hào)和扇區(qū)號(hào)(物理地址的三個(gè)組成部分)進(jìn)行。磁盤控制器則直接使磁頭部件步進(jìn)到相應(yīng)的柱面,選通相應(yīng)的磁頭,等待要求的扇區(qū)移動(dòng)到磁頭下。在扇區(qū)到來(lái)時(shí),磁盤控制器讀出每個(gè)扇區(qū)的頭標(biāo),把這些頭標(biāo)中的地址信息與 期待檢出的磁頭和柱面號(hào)做比較(即尋道),然后,尋找要求的扇區(qū)號(hào)。待磁盤控制器找到該扇區(qū)頭標(biāo)時(shí),根據(jù)其任務(wù)是寫扇區(qū)還是讀扇區(qū),來(lái)決定是轉(zhuǎn)換寫電路, 還是讀出數(shù)據(jù)和尾部記錄。找到扇區(qū)后,磁盤控制器必須在繼續(xù)尋找下一個(gè)扇區(qū)之前對(duì)該扇區(qū)的信息進(jìn)行后處理。如果是讀數(shù)據(jù),控制器計(jì)算此數(shù)據(jù)的ECC碼,然 后,把ECC碼與已記錄的ECC碼相比較。如果是寫數(shù)據(jù),控制器計(jì)算出此數(shù)據(jù)的ECC碼,與數(shù)據(jù)一起存儲(chǔ)。在控制器對(duì)此扇區(qū)中的數(shù)據(jù)進(jìn)行必要處理期間,磁 盤繼續(xù)旋轉(zhuǎn)。其實(shí)我們的文件大多數(shù)的時(shí)候都是破碎的,在文件沒(méi)有破碎的時(shí)候,搖臂只需要尋找1次磁道并由磁頭進(jìn)行讀取,只需要1次就可以成功讀取;但是如果文件破碎成11處,那么搖臂要來(lái)回尋找11次磁道磁頭進(jìn)行11次讀取才能完整的讀取這個(gè)文件,讀取時(shí)間相對(duì)沒(méi)有破碎的時(shí)候就變得冗長(zhǎng)。因此,磁盤IO時(shí)的過(guò)程包括:
  • 第一步,首先是磁頭徑向移動(dòng)來(lái)尋找數(shù)據(jù)所在的磁道。這部分時(shí)間叫尋道時(shí)間。
  • 第二步,找到目標(biāo)磁道后通過(guò)盤面旋轉(zhuǎn),將目標(biāo)扇區(qū)移動(dòng)到磁頭的正下方。
  • 第三步,向目標(biāo)扇區(qū)讀取或者寫入數(shù)據(jù)。到此為止,一次磁盤IO完成,故:
所以,單次磁盤IO時(shí)間 = 尋道時(shí)間 + 旋轉(zhuǎn)延遲 + 存取時(shí)間。
  • 對(duì)于旋轉(zhuǎn)延時(shí),現(xiàn)在主流服務(wù)器上經(jīng)常使用的是1W轉(zhuǎn)/分鐘的磁盤,每旋轉(zhuǎn)一周所需的時(shí)間為60*1000/10000=6ms,故其旋轉(zhuǎn)延遲為(0-6ms)。
  • 對(duì)于存取時(shí)間,一般耗時(shí)較短,為零點(diǎn)幾ms。
  • 對(duì)于尋道時(shí)間,現(xiàn)代磁盤大概在3-15ms,其中尋道時(shí)間大小主要受磁頭當(dāng)前所在位置和目標(biāo)磁道所在位置相對(duì)距離的影響。
候選的磁盤分區(qū)方案:
  • 方案一: 255個(gè)盤面,C盤是0-100盤面, D盤是101-200個(gè)盤面,……
  • 方案二:3263個(gè)柱面,C盤0-1000個(gè)柱面,D盤1001-20001個(gè)柱面,……
其實(shí)采用哪一種,最主要看的是那種方式性能更快。因?yàn)橥环謪^(qū)下的數(shù)據(jù)經(jīng)常會(huì)一起讀取,假如采用第一種,那么這樣磁頭就需要在3000多個(gè)track間不停地跳來(lái)跳去,這樣磁盤的尋道時(shí)間就會(huì)翻倍,磁盤性能就會(huì)下降。而對(duì)于方案二,假如對(duì)于磁盤C,只需要在磁頭在1-1000個(gè)磁道間移動(dòng)就可以了,大大降低了尋道時(shí)間。(實(shí)際上分區(qū)并不是從0開(kāi)始的,磁盤的第一個(gè)磁道對(duì)應(yīng)的柱面會(huì)被用來(lái)安裝引導(dǎo)加載程序以及磁盤分區(qū)表)。所以,方案二的分區(qū)方式可以降低磁盤IO時(shí)間中的尋道時(shí)間部分,所以所有的操作系統(tǒng)采用的都是方案二,沒(méi)有用方案一的。2. Linux 下磁盤命名和分區(qū)在為主機(jī)添加硬盤前,首先要了解Linux系統(tǒng)下對(duì)硬盤和分區(qū)的命名方法。2.1 磁盤命名在Linux下對(duì) SCSI 和 SATA 設(shè)備是以 sd 命名的,第一個(gè) scsi 設(shè)備是 sda,第二個(gè)是 sdb,依此類推。一般主板上有兩個(gè)SCSI接口,因此一共可以安裝四個(gè)SCSI設(shè)備。主 SCSI 上的兩個(gè)設(shè)備分別對(duì)應(yīng) sda 和 sdb,第二個(gè) SCSI 口上的兩個(gè)設(shè)備對(duì)應(yīng) sdc 和 sdd。一般硬盤安裝在主 SCSI 的主接口上,所以是 sda 或者 sdb,而光驅(qū)一般安裝在第二個(gè)SCSI的主接口上,所以是 sdc。(IDE接口設(shè)備是用 hd 命名的,第一個(gè)設(shè)備是hda,第二個(gè)是hdb,依此類推。)
IDE 磁盤描述配置
/dev/hda1st (PRimary) IDE controllerMaster
/dev/hdb1st (Primary) IDE controllerSlave
/dev/hdc2nd (Secondary) IDE controllerMaster
/dev/hdd2nd (Secondary) IDE controllerSlave
2.2 分區(qū)命名所謂的磁盤分區(qū)指的是告訴操作系統(tǒng)『我這顆磁盤在此分割槽可以存取的區(qū)域是由 A 磁柱到 B 磁柱之間的區(qū)塊』, 如此一來(lái)操作系統(tǒng)就能夠知道他可以在所指定的區(qū)塊內(nèi)進(jìn)行文件數(shù)據(jù)的讀/寫/搜尋等動(dòng)作了。 也就是說(shuō),磁盤分區(qū)意即指定分割槽的啟始與結(jié)束磁柱就是了。分區(qū)是用設(shè)備名稱加數(shù)字命名的。例如 hda1 代表hda這個(gè)硬盤設(shè)備上的第一個(gè)分區(qū)。每個(gè)硬盤可以最多有四個(gè)主分區(qū),作用是 1-4 命名硬盤的主分區(qū)。多個(gè)主分區(qū)中只能有一個(gè)active主分區(qū)作為啟動(dòng)分區(qū)。邏輯分區(qū)是從5開(kāi)始的,每多一個(gè)分區(qū),每個(gè)磁盤上最多可以有 24個(gè)擴(kuò)展分區(qū)。2.3 分區(qū)步驟1. 運(yùn)行 fdisk 來(lái)分區(qū):其中第一個(gè)框和第二個(gè)框,是已經(jīng)分好區(qū)的磁盤,第三個(gè)硬盤沒(méi)有分區(qū)。
[root]# fdisk /dev/sdbCommand (m for help): m     (Enter the letter "m" to get list of commands)Command action   a   toggle a bootable flag   b   edit bsd disklabel   c   toggle the dos compatibility flag   d   delete a partition   l   list known partition types   m   print this menu   n   add a new partition   o   create a new empty DOS partition table   p   print the partition table   q   quit without saving changes   s   create a new empty Sun disklabel   t   change a partition's system id   u   change display/entry units   v   verify the partition table   w   write table to disk and exit   x   extra functionality (experts only)Command (m for help): nCommand action   e   extended   p   primary partition (1-4)pPartition number (1-4): 1First cylinder (1-9729, default 1):Using default value 1Last cylinder, +cylinders or +size{K,M,G} (1-9729, default 9729):Using default value 9729Command (m for help): w    (Write and save partition table)[root]# mkfs.ext4 -L disk2 /dev/sdb
分多個(gè)區(qū)有以下幾個(gè)目的:
  • 在不損失數(shù)據(jù)的情況下重裝系統(tǒng),比如獨(dú)立設(shè)置 /home 掛載點(diǎn),重裝系統(tǒng)的時(shí)候直接標(biāo)記回 /home,數(shù)據(jù)不會(huì)有任何損失。
  • 針對(duì)不同的掛載點(diǎn)的特性分配合適的文件系統(tǒng)以合理發(fā)揮性能,比如對(duì) /var 使用reiserfs,對(duì) /home 使用xfs,對(duì) / 使用ext4。
  • 針對(duì)不同的掛載點(diǎn)開(kāi)啟不同的掛載選項(xiàng),如是否需要即時(shí)同步,是否開(kāi)啟日志,是否啟用壓縮。
  • 大硬盤搜索范圍大,效率低
  • 磁盤配額只能對(duì)分區(qū)做設(shè)定
  • /home、/var、/usr/local 經(jīng)常是單獨(dú)分區(qū),因?yàn)榻?jīng)常會(huì)操作,容易產(chǎn)生碎片
2.格式化分區(qū):mkfs -t ext3 /dev/sda1每塊硬盤都分為若干個(gè)分區(qū),每個(gè)分區(qū)都有自己的文件系統(tǒng)。Windows為這些文件系統(tǒng)各自指定了一個(gè)字母。不過(guò) GNU/Linux 使用唯一的樹形結(jié)構(gòu)來(lái)管理文件,而每個(gè)文件系統(tǒng)都掛載于樹形結(jié)構(gòu)的某個(gè)位置。正如 Windows 需要有 C: 驅(qū)動(dòng)器一樣,GNU/Linux 必須能夠?qū)⒏募到y(tǒng)掛載于文件樹的根(/)上。當(dāng)根掛載完成之后,您就可以將其它文件系統(tǒng)掛載于樹形結(jié)構(gòu)各種掛載點(diǎn)上。根結(jié)構(gòu)下的任何目錄都可以作為掛載點(diǎn),而您也可以將同一文件系統(tǒng)同時(shí)掛載于不同的掛載點(diǎn)上。掛載點(diǎn)實(shí)際上就是linux中的磁盤文件系統(tǒng)的入口目錄:關(guān)于文件系統(tǒng)的三個(gè)易混淆的概念:
  • 創(chuàng)建:以某種方式格式化磁盤的過(guò)程就是在其之上建立一個(gè)文件系統(tǒng)的過(guò)程。創(chuàng)建文件系統(tǒng)時(shí),會(huì)在磁盤的特定位置寫入關(guān)于該文件系統(tǒng)的控制信息。
  • 注冊(cè):向內(nèi)核報(bào)到,聲明自己能被內(nèi)核支持。一般在編譯內(nèi)核的時(shí)侯注冊(cè);也可以加載模塊的方式手動(dòng)注冊(cè)。注冊(cè)過(guò)程實(shí) 際上是將表示各實(shí)際文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)struct file_system_type 實(shí)例化。
  • 安裝:也就是我們熟悉的mount操作,將文件系統(tǒng)加入到 Linux 的根文件系統(tǒng)的目錄樹結(jié)構(gòu)上;這樣文件系統(tǒng)才能被訪問(wèn)。
linux 下一切皆文件!換言之就是linux操作系統(tǒng)將系統(tǒng)中的一切都作為文件來(lái)管理。在windows中我們常見(jiàn)的硬件設(shè)備(打印機(jī)、網(wǎng)卡、聲卡...)、磁盤分區(qū)等,在linux中統(tǒng)統(tǒng)都被視作文件,對(duì)設(shè)備、分區(qū)的訪問(wèn)就是讀寫對(duì)應(yīng)的文件。格式化命令:mkfs.ext3 /dev/sdb1 //格式化分區(qū)成ext3mkfs.ext2 /dev/sdb1 //格式化分區(qū)成ext23. 掛載mount /dev/sda1 /testdf 命令用于查看已掛載磁盤的總?cè)萘俊⑹褂萌萘俊⑹S嗳萘康龋梢圆患尤魏螀?shù),默認(rèn)是按k為單位顯示的。du 命令用來(lái)查看某個(gè)目錄所占空間大小。4. 開(kāi)機(jī)直接掛載編輯 /etc/fstab 文件,添加:/dev/sda1 /test ext3 defaults 1 1,重啟則發(fā)選已經(jīng)掛載上去。5.總結(jié)
  • 掛載點(diǎn)必須是一個(gè)目錄。
  • 一個(gè)分區(qū)掛載在一個(gè)已存在的目錄上,這個(gè)目錄可以不為空,但掛載后這個(gè)目錄下以前的內(nèi)容將不可用。對(duì)于其他操作系統(tǒng)建立的文件系統(tǒng)的掛載也是這樣,卸載后,目錄以前的文件都還在,不會(huì)有任何丟失。
  • 目錄只占磁盤里的一個(gè)inode,存放文件屬性等信息。
  • 任何一個(gè)分區(qū)都必須掛載到某個(gè)目錄上。
  • 目錄是邏輯上的區(qū)分。分區(qū)是物理上的區(qū)分。
  • 磁盤Linux分區(qū)都必須掛載到目錄樹中的某個(gè)具體的目錄上才能進(jìn)行讀寫操作。
  • 根目錄是所有Linux的文件和目錄所在的地方,需要掛載上一個(gè)磁盤分區(qū)。
  • 一個(gè)分區(qū)可以掛在多個(gè)目錄,但反過(guò)來(lái)一個(gè)目錄只能是一個(gè)分區(qū)的掛載點(diǎn)。
3. Linux 文件系統(tǒng)文件系統(tǒng)是對(duì)一個(gè)存儲(chǔ)設(shè)備上的數(shù)據(jù)和元數(shù)據(jù)進(jìn)行組織的機(jī)制。它的最終目的是把大量數(shù)據(jù)有組織的放入持久性(persistant)的存儲(chǔ)設(shè)備中,比如硬盤和磁盤。文件系統(tǒng)(file system)是就是文件在邏輯上組織形式,它以一種更加清晰的方式來(lái)存放各個(gè)文件。數(shù)據(jù)被存入到某個(gè)分區(qū)中。一個(gè)典型的Linux分區(qū)(partition)包含有下面各個(gè)部分:文件是文件系統(tǒng)對(duì)數(shù)據(jù)的分割單元。文件系統(tǒng)用目錄來(lái)組織文件,賦予文件以上下分級(jí)的結(jié)構(gòu)。在硬盤上實(shí)現(xiàn)這一分級(jí)結(jié)構(gòu)的關(guān)鍵,是使用 inode 來(lái)虛擬普通文件和目錄文件對(duì)象。在Linux系統(tǒng)中,目錄也是一種文件。所以/home/sammy 是指向目錄文件sammy 的絕對(duì)路徑。磁盤與文件系統(tǒng):3.1inodeinodes 是實(shí)現(xiàn)文件存儲(chǔ)的關(guān)鍵。在 Linux 中,文件系統(tǒng)中管理的每個(gè)對(duì)象(文件或目錄)表示為一個(gè) inode。inode 包含管理文件系統(tǒng)中的對(duì)象所需的所有元數(shù)據(jù)(包括可以在對(duì)象上執(zhí)行的操作)。在 Linux 系統(tǒng)中,一個(gè)文件可以分成幾個(gè)數(shù)據(jù)塊存儲(chǔ)在分區(qū)內(nèi)。為了搜集各數(shù)據(jù)塊,我們需要該文件對(duì)應(yīng)的inode。每個(gè)文件對(duì)應(yīng)一個(gè) inode。這個(gè) inode 中包含多個(gè)指針,指向?qū)儆谠撐募鱾€(gè)數(shù)據(jù)塊。當(dāng)操作系統(tǒng)需要讀取文件時(shí),只需要找到對(duì)應(yīng) inode,收集分散的數(shù)據(jù)塊,就可以收獲我們的文件了。讀取文件:在Linux中,我們通過(guò)解析路徑,根據(jù)沿途的目錄文件來(lái)找到某個(gè)文件。目錄中的條目除了所包含的文件名,還有對(duì)應(yīng)的inode編號(hào)。當(dāng)我們輸入$cat /var/test.txt時(shí),Linux 將在根目錄文件中找到 var 這個(gè)目錄文件的inode編號(hào),然后根據(jù) inode 合成 var 的數(shù)據(jù)。隨后,根據(jù) var 中的記錄,找到 text.txt 的 inode 編號(hào),沿著 inode 中的指針,收集數(shù)據(jù)塊,合成 text.txt 的數(shù)據(jù)。整個(gè)過(guò)程中,會(huì)參考三個(gè)inode:
  • 根目錄文件的inode:2,用于找到 var 的 inode id
  • var 目錄文件的 inode:10747905,用于找到 test.txt 的 inode id
  • text.txt 文件的 inode: 10749034,用于找到 data blocks

因此,當(dāng)我們讀取一個(gè)文件時(shí),實(shí)際上是在目錄中找到了這個(gè)文件的inode編號(hào),然后根據(jù)inode的指針,把數(shù)據(jù)塊組合起來(lái),放入內(nèi)存供進(jìn)一步的處理。當(dāng)我們創(chuàng)建一個(gè)文件時(shí),是分配一個(gè)空白 inode 給該文件,將其 inode 編號(hào)記入該文件所屬的目錄,然后選取空白的數(shù)據(jù)塊,讓 inode 的指針指向這些數(shù)據(jù)塊,并放入內(nèi)存中的數(shù)據(jù)。3.2 循環(huán)設(shè)備在類Unix系統(tǒng)中,/dev/loop是一種偽設(shè)備,這種設(shè)備使得文件可以如同塊設(shè)備一般被訪問(wèn)。在目錄上掛載包含文件系統(tǒng)的文件一般需要兩步:
  1. 用一個(gè)循環(huán)設(shè)備節(jié)點(diǎn)連接文件。
  2. 在目錄上掛載該循環(huán)設(shè)備
具體步驟:
dd if=/dev/zero of=file.img bs=1k count=10000 //創(chuàng)建一個(gè)初始化文件losetup /dev/loop0 file.img //創(chuàng)建一個(gè)循環(huán)設(shè)備mke2fs -c /dev/loop0 10000 //創(chuàng)建文件系統(tǒng)mkdir /mnt/point1 //創(chuàng)建掛載點(diǎn)mount -t ext2 /dev/loop0 /mnt/point1 //掛載 
3.3 文件系統(tǒng)的結(jié)構(gòu)

用戶空間包含一些應(yīng)用程序(例如,文件系統(tǒng)的使用者)和 GNU C 庫(kù)(glibc),它們?yōu)槲募到y(tǒng)調(diào)用(打開(kāi)、讀取、寫和關(guān)閉)提供用戶接口。系統(tǒng)調(diào)用接口的作用就像是交換器,它將系統(tǒng)調(diào)用從用戶空間發(fā)送到內(nèi)核空間中的適當(dāng)端點(diǎn)。VFS 是底層文件系統(tǒng)的主要接口,它是 Linux 內(nèi)核中的一個(gè)軟件抽象層。。這個(gè)組件導(dǎo)出一組接口,然后將它們抽象到各個(gè)文件系統(tǒng),各個(gè)文件系統(tǒng)的行為可能差異很大。有兩個(gè)針對(duì)文件系統(tǒng)對(duì)象的緩存(inode 和 dentry)。它們緩存最近使用過(guò)的文件系統(tǒng)對(duì)象。因?yàn)橛?VFS存在,Linux 允許眾多不同的文件系統(tǒng)共存,并支持跨文件系統(tǒng)的文件操作。它通過(guò)一些數(shù)據(jù)結(jié)構(gòu)及其方法向?qū)嶋H的文件系統(tǒng)如 ext2,vfat 提供接口機(jī)制。每個(gè)文件系統(tǒng)實(shí)現(xiàn)(比如 ext2、JFS 等等)導(dǎo)出一組通用接口,供 VFS 使用。緩沖區(qū)緩存會(huì)緩存文件系統(tǒng)和相關(guān)塊設(shè)備之間的請(qǐng)求。例如,對(duì)底層設(shè)備驅(qū)動(dòng)程序的讀寫請(qǐng)求會(huì)通過(guò)緩沖區(qū)緩存來(lái)傳遞。這就允許在其中緩存請(qǐng)求,減少訪問(wèn)物理設(shè)備的次數(shù),加快訪問(wèn)速度。可以使用sync命令將緩沖區(qū)緩存中的請(qǐng)求發(fā)送到存儲(chǔ)媒體(迫使所有未寫的數(shù)據(jù)發(fā)送到設(shè)備驅(qū)動(dòng)程序,進(jìn)而發(fā)送到存儲(chǔ)設(shè)備)。3.4 VFS (虛擬文件系統(tǒng))Linux 中允許眾多不同的文件系統(tǒng)共存,如 ext2, ext3, vfat 等。通過(guò)使用同一套文件 I/O 系統(tǒng)調(diào)用即可對(duì) Linux 中的任意文件進(jìn)行操作而無(wú)需考慮其所在的具體文件系統(tǒng)格式;更進(jìn)一步,對(duì)文件的 操作可以跨文件系統(tǒng)而執(zhí)行。如下圖所示,我們可以使用 cp 命令從 vfat 文件系統(tǒng)格式的硬盤拷貝數(shù)據(jù)到 ext3 文件系統(tǒng)格式的硬盤;而這樣的操作涉及到兩個(gè)不同的文件系統(tǒng)。圖片示例_跨文件系統(tǒng)的文件操作過(guò)程:VFS調(diào)用 vfat 的讀文件方法將 a.txt 的數(shù)據(jù)讀入內(nèi)存;再將 a.txt 在內(nèi)存中的數(shù)據(jù)映射到b.txt對(duì)應(yīng)的內(nèi)存空間后,VFS調(diào)用ext3的寫文件方法將b.txt寫入磁盤;從而實(shí)現(xiàn)了最終的跨文件系統(tǒng)的復(fù)制操作。“一切皆是文件”是 Unix/Linux 的基本哲學(xué)之一。不僅普通的文件,目錄、字符設(shè)備、塊設(shè)備、 套接字等在 Unix/Linux 中都是以文件被對(duì)待;它們雖然類型不同,但是對(duì)其提供的卻是同一套操作界面。操作文件時(shí)需先打開(kāi);打開(kāi)文件時(shí),VFS 會(huì)知道該文件對(duì)應(yīng)的文件系統(tǒng)格式;當(dāng)VFS把控制權(quán)傳給實(shí)際的文件系統(tǒng)時(shí),實(shí)際的文件系統(tǒng)再做出具體區(qū)分,對(duì)不同的文件類型執(zhí)行不同的操作。這也就是“一切皆是文件”的根本所在。圖片示例_VFS在內(nèi)核中與其他的內(nèi)核模塊的協(xié)同關(guān)系從物理介質(zhì)讀文件的具體過(guò)程:圖片示例_從物理介質(zhì)讀數(shù)據(jù)的過(guò)程當(dāng)在用戶應(yīng)用程序調(diào)用文件 I/O read()操作時(shí),系統(tǒng)調(diào)用 sys_read() 被激發(fā),sys_read() 找到文件所在的具體文件系統(tǒng),把控制權(quán)傳給該文件系統(tǒng),最后由具體文件系統(tǒng)與物理介質(zhì)交互,從介質(zhì)中讀出數(shù)據(jù)。3.5 Linux 文件系統(tǒng)類型3.5.1 ReiserFSReiserFS 是一種文件系統(tǒng)格式。Linux內(nèi)核從2.4.1版本開(kāi)始支持ReiserFS。ReiserFS原先是Novell公司的SuSELinux Enterprise采用的默認(rèn)文件系統(tǒng),直到2006年10月12日其宣稱將在未來(lái)的版本改采ext3為默認(rèn)。和同樣在 Linux Kernel 2.4 版本下的 ext2 及 ext3 相比較,處理 4KB 以下的小文件時(shí)(tail packing enable),ReiserFS 的速度快了 10 到 15 倍[3]。但是,有些目錄的操作在 ReiserFS 上面并不同步,(包括像 unlink(2)),可能會(huì)導(dǎo)致一些重度依賴文件鎖(file-based lock)機(jī)制的應(yīng)用程序上面數(shù)據(jù)的毀損。ReiserFS 在一個(gè)單一復(fù)合B+樹中存儲(chǔ)文件的亞數(shù)據(jù)信息(stat item)、目錄文件信息(directory items)、索引節(jié)點(diǎn)中的塊列表(indirect items),這些信息都有唯一的標(biāo)識(shí)號(hào)作為B+樹的索引值。3.5.2 ext2 文件系統(tǒng)

ext2 文件系統(tǒng)(也稱為第二擴(kuò)展文件系統(tǒng))旨在克服早期 Linux 版本中使用的 Minix 文件系統(tǒng)的缺點(diǎn)。多年來(lái),該文件系統(tǒng)一直廣泛應(yīng)用于 Linux。但 ext2 中沒(méi)有日志,現(xiàn)在基本上已被 ext3 和最新的 ext4 所取代。

3.5.3 ext3 文件系統(tǒng)

ext3 文件系統(tǒng)向標(biāo)準(zhǔn) ext2 文件系統(tǒng)添加了日志功能,因此是一個(gè)非常穩(wěn)定的文件系統(tǒng)的一個(gè)演化發(fā)展。它在大多數(shù)情況下提供合理的性能并且仍舊在改進(jìn)。由于它在可靠的 ext2 文件系統(tǒng)上添加了日志功能,因此可以將現(xiàn)有 ext2 文件系統(tǒng)轉(zhuǎn)換為 ext3 文件系統(tǒng),并且在必要時(shí)還可以轉(zhuǎn)換回來(lái)。

3.5.4 ext4 文件系統(tǒng)ext4 是作為 ext3 的擴(kuò)展來(lái)啟動(dòng)的,它通過(guò)增加存儲(chǔ)限制和提高性能來(lái)滿足更大文件系統(tǒng)的需求。為了保留 ext3 的穩(wěn)定性,在2006 年 6 月,該擴(kuò)展被拆分成一個(gè)新的文件系統(tǒng),即 ext4。ext4 文件系統(tǒng)在 2008 年 12 月正式發(fā)布,包含在 2.6.28 內(nèi)核中。3.5.5 vfat 文件系統(tǒng)vfat 文件系統(tǒng)(也稱為FAT32)沒(méi)有日志功能,且缺乏完整的 Linux 文件系統(tǒng)實(shí)現(xiàn)所需的許多特性。它可用于在 Windows 和 Linux 系統(tǒng)之間交換數(shù)據(jù),因?yàn)?Windows 和 Linux 都能讀取它。不要將這個(gè)文件系統(tǒng)用于 Linux,除非要在 Windows 和 Linux 之間共享數(shù)據(jù)。3.5.6 XFS 文件系統(tǒng)XFS 文件系統(tǒng)擁有日志功能,包含一些健壯的特性,并針對(duì)可伸縮性進(jìn)行了優(yōu)化。XFS 通常是相當(dāng)快的。在大文件操作方面,XFS 在所有測(cè)試中一直處于領(lǐng)先地位。XFS 的性能非常接近 ReiserFS,并在大多數(shù)測(cè)試指標(biāo)上都超過(guò)了 ext3。3.5.7 IBM JFS 文件系統(tǒng)IBM 的Journaled File System (JFS),目前用于 IBM 企業(yè)服務(wù)器,專為高吞吐量服務(wù)器環(huán)境而設(shè)計(jì)。它可用于 Linux,包含在幾個(gè)發(fā)行版中。要?jiǎng)?chuàng)建 JFS 文件系統(tǒng),使用 mkfs.jfs 命令。3.6 選擇文件系統(tǒng)選擇合適的下一代 Linux 文件系統(tǒng)一直很簡(jiǎn)單。那些只尋求原始性能的人通常傾向于使用 ReiserFS,而那些更關(guān)心數(shù)據(jù)完整性特性的人則首選 ext3/4。然而,隨著 XFS 的 Linux 版的發(fā)布,事情突然變得令人困惑。尤其是,對(duì)于 ReiserFS 是否依然是下一代文件系統(tǒng)性能方面的佼佼者,人們開(kāi)始感到疑惑。
  • XFS 的性能非常接近 ReiserFS,并在大多數(shù)測(cè)試指標(biāo)上都超過(guò)了 ext3。
  • 目前,ReiserFS 和 ext3 刪除文件要比 XFS 快得多。
3.7 創(chuàng)建文件系統(tǒng)Linux 使用mkfs命令來(lái)創(chuàng)建文件系統(tǒng),使用mkswap命令創(chuàng)建交換空間。mkfs命令實(shí)際上是幾個(gè)特定文件系統(tǒng)的命令的前端,比如面向 ext3 的mkfs.ext3,面向 ext4 的mkfs.ext4以及面向 ReiserFS 的mkfs.reiserfs。你的文件系統(tǒng)上安裝的是什么文件系統(tǒng)支持?使用ls/sbin/mk*命令即可得到答案。參考文檔:http://djt.QQ.com/article/view/620http://my.oschina.net/leejun2005/blog/290073http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem.phphttp://www.CUOXin.com/vamei/p/3506566.htmlhttp://www.ibm.com/developerworks/cn/linux/l-linux-kernel/http://www.ibm.com/developerworks/cn/linux/l-cn-vfs/http://www.ibm.com/developerworks/cn/linux/filesystem/l-fs9/http://zh.wikipedia.org/wiki/ReiserFS
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 溆浦县| 新密市| 通渭县| 呼和浩特市| 河西区| 渝中区| 长兴县| 淮安市| 惠州市| 昌宁县| 临夏县| 五华县| 新民市| 南丹县| 襄樊市| 富源县| 南华县| 杭锦后旗| 广东省| 屏南县| 牟定县| 哈密市| 山东| 松潘县| 黄梅县| 青田县| 梁山县| 永顺县| 衡阳县| 湖州市| 屏南县| 天峨县| 南雄市| 怀仁县| 宁津县| 富阳市| 清徐县| 尉犁县| 云南省| 南平市| 吉木萨尔县|