歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux維護 >> Linux 管理員手冊(3)--磁盤和其他存貯介質的使用

Linux 管理員手冊(3)--磁盤和其他存貯介質的使用

日期:2017/3/2 10:43:48   编辑:Linux維護

  安裝和升級系統時,需要對硬盤做很多工作。必須在硬盤上做文件系統,使文件能存在其上,並為系統不同的部分保留空間。

  本章說明所有這些初始化工作。通常,一旦你建立了系統,就不必再做這些工作(除了使用軟盤)。如果你要增加一個新硬盤或更好地調整你的硬盤的使用,那麼可能回到這一章。

  管理磁盤的基本任務有:

  格式化磁盤。這為磁盤進入使用做一些工作,比如檢查壞扇區。(現在多數硬盤無須格式化。)

  給硬盤分區,如果想用於互相不干擾的幾件事。分區的一個原因是要在一個硬盤上存不同的操作系統。另一個原因是將用戶文件和系統文件分開,以簡化備份並在系統崩潰時有助於保護系統文件。

  在每個磁盤或分區上建立合適類型的文件系統,然後文件就可以在其上產生和存取。在你建立文件系統前,磁盤對Linux沒有意義。

  將不同的文件系統安裝起來形成一個單獨的樹結構,按需要可以自動或手工完成。 (手工安裝的文件系統通常還要手工unmount)

  5章包括虛擬內存和磁盤cache的信息,使用磁盤應該知道這些。

  本章說明對硬盤、軟盤、CDROM和磁帶機應該知道什麼。

  2種設備

  UNIX及Linux,識別2類設備:隨機存取的塊設備(如磁盤)和字符設備(如磁帶和串行線),有些是串行的,有些是隨機存取的。文件系統支持的每種看來是個設備文件。當讀寫設備文件時,數據與設備聯系。這樣沒有必要為存取設備編制特別的程序(程序不直接獲取中斷或讀取串口),例如,發送文件到打印機,只需:

  

  $ cat filename > /dev/lp1
  
          $

  文件內容就被打印了(當然,文件必須是打印機能理解的格式)。當然,因為不應該讓多人同時cat文件到同一打印機,一般用特定的程序發送文件去打印(通常是lpr )。這個程序能確保同時只有一個文件被打印,並自動在完成後發送下一個。多數設備有類似需要。實際上,根本很少需要關心設備文件。

  因為設備被視為文件系統中的文件(在/dev 目錄中),很容易看到存在哪些設備文件,使用ls 或其他的適當的命令即可。在ls -l 的輸出中,第一列包含文件類型和權限。例如,查看我系統上的一個串行設備:

  

  $ ls -l /dev/cua0
  
          crw-rw-rw- 1 root uucp 5, 64 Nov 30 1993 /dev/cua0
  
          $

  第一列第一個字符,即crw-rw-rw-中的c告訴用戶文件的種類,這是一個字符設備。一般文件的第一個字符是"-",目錄是"d",塊設備是"b";更多的信息見ls man頁。

  注意即使設備沒有安裝,一般所有設備文件都存在。因此有/dev/sda 文件並不意味著你真的有個SCSI硬盤。有所有的設備文件使安裝程序更簡單,也易於增加新硬件(無須再為產生新設備的設備文件找出正確的參數)。

  硬盤

  本節介紹有關硬盤的術語。如果你已經知道這些項目和內容,可以跳過本節。

  硬盤包括一到數片盤片platters, 其一個或兩個面surfaces塗有磁性材料用於記錄數據。每面有一個讀寫頭read-write head用於讀寫數據。盤片有一個共同的軸,典型的旋轉速度是每分鐘3600轉,高性能的硬盤轉速可能更高。磁頭可沿著盤片的半徑移動,磁頭移動加上盤片旋轉可以使詞頭存取磁盤表面的任何一個位置。

  處理器(CPU)和實際磁盤通過磁盤控制器disk controller通訊。這使計算機其他部分不必知道如何使用驅動器,因為不同磁盤的控制器可以做成對計算機其他部分相同的接口。這樣,計算機只要說"嗨,磁盤,給我我要的東西",而不是用一串長而復雜的電信號來移動磁頭到正確的位置,並等正確的位置到了磁頭下後再做那些不愉快的工作。 (實際上,到控制器的接口仍然很復雜,但比沒有好多了。) 控制器還可以做一些其他的事,比如緩沖,或自動壞扇區替換等。用電信號控制操作機械部件,

  以上只是理解硬件所需的。還有其他好多工作,比如馬達旋轉磁盤、移動磁頭,但這都與理解硬盤工作原理無關。

  磁盤表面通常被分為同心圓環,叫磁道tracks,磁道又被分為扇區sectors。用這樣分來將磁盤定位,用於為文件定位磁盤空間。要在硬盤上找到給定的位置,可能?quot;3面5道7扇區"。通常所有磁道有相同的扇區數,但也有硬盤在外圈磁道放較多的扇區(所有扇區用同樣大小的物理空間,這樣在較長的外圈磁道可以容納更多的數據)。一般一個扇區容納512字節數據。磁盤不能處理比一個扇區更小的數據量。

  每個面以相同的方式分為磁道和扇區。這意味著當一個磁頭在某個磁道時,其他磁頭也在相應的位置,所有相同位置的磁道組成柱面cylinder。磁頭從一個磁道(柱面)移動到另一個需要花時間,所以將經常要在一起存取的數據(如一個文件)放在一個柱面裡。這改善了性能。當然不可能完全作到,文件被放在幾個相分離的位置叫碎片fragmented。

  磁盤的面(或頭,實際是一樣的)、柱面、扇區數各不相同,硬盤這些數目叫硬盤參數geometry。硬盤參數通常存在一個特定的、由電池供電的存儲區中,叫CMOS RAM,操作系統在引導啟動或驅動器初始化時可以從那裡得到硬盤參數。

  不幸的是,BIOS 有一個設計限制,就是不能在CMOS RAM中定義大於1024的磁道數,這對大硬盤來說就太小了。為了克服這個問題,硬盤控制器在磁盤參數上做了一個欺騙,用地址轉換translates the addresses使計算機接受。例如,一個硬盤可能有8個磁頭,2048個磁道,每磁道35個扇區。其控制器可以對計算機謊稱它有16個磁頭,1024個磁道,每磁道35個扇區,這樣就沒有超過磁道數的限制,地址轉換將磁頭數減半,磁道數加倍後傳給硬盤。實際的算法可能更復雜,因為數量可能不象我們在這裡假設的這麼好(但這不影響我們理解原理)。這個轉換在操作系統來看產生了錯覺,並可能影響操作系統對把所有數據存在相同柱面的企圖受到影響。

  轉換只是IDE硬盤的問題。SCSI硬盤使用連續的扇區號(即控制器將連續的扇區好轉換成磁頭、柱面、扇區的三參數組),對CPU與控制器的通信使用完全不同的方法,因此不會有這個問題。注意,計算機可能根本不知道一個SCSI硬盤的實際參數。

  由於Linux經常不知道一個硬盤的真正參數,其文件系統也不試圖將文件存在一個柱面裡。而是爭取給一個文件分配連續編號的山區,這樣能得到類似的性能。對於控制器上有cashe或控制器能自動預取的硬盤,情況將更復雜。

  每個硬盤表現為一個單獨的設備文件。通常只能有2-4個IDE硬盤。這就是 /dev/hda , /dev/hdb , /dev/hdc , 和 /dev/hdd 。 SCSI是 /dev/sda , /dev/sdb , 等等。其他硬盤類型有類似的命名約定,更多的信息見[Anv]。注意硬盤的設備文件給出整個硬盤的存取,而不是分區(下面討論的),因此如果不小心可能搞亂分區或數據。硬盤的設備文件只在存取主引導扇(也將在下面討論)時使用。

  軟盤

  軟盤的一面或兩面塗有和硬盤類似的磁性介質。軟盤自己沒有讀寫頭,讀寫頭在驅動器上。軟盤相當於硬盤的一張盤片,但可移動,一個驅動器可以存取不同的軟盤,而硬盤則是一個獨立的單元。

  如同硬盤,一張軟盤也分為磁道和扇區(軟盤2面上的相同的磁道組成柱面),但數量要比硬盤少得多。

  軟驅通常可以使用幾中不同的盤片,例如,一個3.5'軟驅可以使用720KB和1.44MB的軟盤。因為軟驅操作有些不同,而操作系統必須知道軟盤的容量,所以軟驅有許多設備文件,每個都與軟驅和軟盤種類有關。因此,/dev/fd0H1440 是第一個軟驅(fd0),必須是3.5'軟驅,使用3.5'高密度軟盤(H),容量是1440KB(1440),即普通的3.5'HD軟盤。軟盤設備的命名約定見[Anv]。

  軟驅的名字是復雜的,因此Linux有一個特定的軟驅設備類型,能自動檢測軟驅中軟盤的種類。它使用不同的軟盤類型試圖讀取新插入的軟盤的第一個扇區,直到找到正確的一個。這自然要求軟盤是已經格式化過的。自動設備叫/dev/fd0 、/dev/fd1 等。

  存取軟盤的自動設備的參數可用程序setfdprm 設定。這可使你使用不是通常容量的軟盤,例如有非標准扇區數的軟盤,或自動檢測由於某種原因失敗或適當的設備文件丟失。

  Linux除了所有標准的,還能處理許多非標准的軟盤格式。這有時需要特殊的格式化程序。我們現在先跳過這些軟盤格式,同時你可以查看/etc/fdprm 文件。它定義了setfdprm 識別的設定。

  操作系統必須知道軟驅何時換了軟盤,例如,以免使用上一張軟盤的cache數據。不幸的是,當用於此的信號線斷了或不好時,當在MSDOS中使用時,這並不總有效。如果你曾遇到過軟驅的這種怪異的問題,可能是這個原因。解決這個問題的唯一方法是修理軟驅。

  CD-ROM

  CD-ROM驅動器使用一個光學可讀的塑料塗布的盤片。信息記錄在盤片表面 的從中心的邊沿的螺旋型小坑上。驅動器發出一束激光來讀盤。當激光射到小坑上,激光以一種方式反射;當它射到光滑表面上,它以另一種方式反射。這很容易地編碼成bit,組成信息。其他很容易,不過是機械。

  CD-ROM驅動器比硬盤慢。典型的硬盤的平均尋道(seek)時間小於15毫秒,而快速的CD-ROM驅動器要花零點幾秒。實際數據傳輸率則相當快,在數百KB/s。速度慢使CDROM驅動器不能代替硬盤使用 (有些Linux distributions提供"live" CD-ROM文件系統,使之不必拷貝文件到硬盤,使安裝簡單並節約了許多硬盤空間),雖然是可能的。要安裝新軟件,CD-ROM很好,因為在安裝時速度並非最重要的。

  有多種方法在CDROM上安排數據。最流行的是國際標准化組織定義的ISO9660。這個標准定義了一個最小的文件系統,甚至比MSDOS更粗糙。這樣,由於它是這麼小,所有操作系統都可以將它映射到自己的系統。

  不同UNIX不能使用ISO9660文件系統,因此開發了對這個標准的一個增強,叫Rock Ridge增強。 Rock Ridge允許長文件名、符號連接和許多其他優點,使CD-ROM更象UNIX文件系統。同時,Rock Ridge文件系統仍然是一個有效的ISO9660文件系統,使非UNIX一樣可以使用。 Linux同時支持ISO9660和Rock Ridge增強,增強被自動識別和使用。

  文件系統只是一部分,許多CD-ROM包含的數據需要特定的程序存取,而多數程序不能運行在Linux下 (當然,可能運行在Linux的MSDOS仿真器dosemu下)。

  CD-ROM驅動器通過相關的設備文件存取。有多種方法將CDROM連接到計算機:SCSI、聲卡或EIDE。要完成這的硬件hacking工作超出了本書的范圍,但連接方法決定了設備文件。指導見[Anv]

  磁帶

  磁帶驅動器使用磁帶,類似 音樂用的盒帶。磁帶是串行的,即如果要得到給定部分的數據,必須經過所有部分。磁盤可以隨機存取,即可以直接跳到磁盤上的某個部分。串行存取的磁帶當然慢了。

  另外一方面,磁帶相當便宜,因為無須快速。也容易做得很長,因此可以容納大量的數據。這使磁帶很適於如歸檔、備份等無須高速的、但需要低成本和大容量的事情。

  格式化

  格式化在磁介質上寫用於標記磁道和扇區的標志的過程。磁盤格式化前,其磁表面是完成的一塊。格式化後,混沌變為秩序,建立的磁道,劃分了扇區。實際細節並非准確地這樣,但重要的是:磁盤不經過格式化是不能使用的。

  這裡術語有些模糊:MS-DOS中,格式化(format)這個詞還包括了產生文件系統的過程(下面將討論的)。這兩個過程經常一起使用,尤其是軟盤。當必須區分時,真正的格式化被稱為低級格式化low-level formatting,而建立文件系統被成為高級格式化high-level formatting。在UNIX圈中,這兩者叫格式畫format和建立文件系統make a filesystem,本書中也這樣稱。

  IDE硬盤和一些SCSI硬盤實際上廠商已經做了格式化,並無須重復;因為多數人無須關心它。實際上,格式化硬盤可能反而不好,比如因為硬盤可能需要用特定的方法格式化使壞扇區被自動替換。

  磁盤經常需要特定的程序來格式化,因為驅動器的格式化邏輯的接口每個驅動器都不一樣。格式化程序經常在控制器BIOS上,或用MSDOS程序提供,這都不太容易在Linux中使用。

  格式化中可能會發現磁盤的壞點,叫壞塊bad blocks or bad sectors。這有時由驅動器自己處理。但有時,如果壞塊太多,需要一些工作來避免使用磁盤的這部分。 The logic to do this is built into the filesystem; 下面將說明如何增加這些信息到文件系統。另外,產生一個只覆蓋這些壞的部分的小分區也是一個辦法。如果壞區較大,這可能是個好辦法,因為文件系統有時難以處理大量的壞區。

  軟盤格式化使用fdformat 。軟盤設備使用給定的參數,例如下面的命令在第一個軟驅中格式化一張高密度3.5'軟盤:

  

  $ fdformat /dev/fd0H1440
  
          Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
  
          Formatting ... done
  
          Verifying ... done
  
          $

  注意,如果想使用自動檢測設備(如/dev/fd0 ), 必須用先setfdprm 設定參數。要得到與上面一樣的結果,可以這樣:

  

  $ setfdprm /dev/fd0 1440/1440
  
          $ fdformat /dev/fd0
  
          Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
  
          Formatting ... done
  
          Verifying ... done
  
          $

  選擇與軟盤類型相符的正確的設備文件通常更方便。注意,比軟盤設計格式化更多的信息容量是沒有意義的。

  fdformat 也將驗證軟盤,例如檢查壞塊。它在壞塊試驗幾次(你通常能聽到,驅動器的噪聲很明顯)。 If the floppy is only marginally bad (due to dirt on the read/write head, some errors are false signals), fdformat 可能沒事,而真正的錯誤可能退出有效過程。核心把發現的每個I/O錯誤打印log信息,送到控制台,或者,如果使用了syslog ,也送到/usr/adm/messages 文件。fdformat 自己不說明哪裡出錯(也不必考慮,軟盤很便宜,壞了就扔)。

  

  $ fdformat /dev/fd0H1440
  
          Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
  
          Formatting ... done
  
          Verifying ... read: Unknown error
  
          $

  badblocks 命令可用於查找任何磁盤或分區的壞塊(包括軟盤)。它不格式化磁盤,因此可以用於檢查存在的文件系統。下面的例子檢查出一張3.5'軟盤上的2個壞塊:

  

  $ badblocks /dev/fd0H1440 1440
  
          718
  
          719
  
          $

  badblocks 輸出發現的壞塊的塊號。多數文件系統可以避免這樣的壞塊。他們維護一個已知的壞塊列表,在文件系統建立時初始化,並可以在以後修改。初始的壞塊查找可由mkfs 命令完成(它初始化文件系統),以後可以用badblocks 來檢查,新的塊可以用fsck 加入。後面我們將說明mkfs 和fsck 。

  許多新型的硬盤自動發現壞塊,並企圖用一個特定的、保護的好塊來代替它。這對操作系統是不可見的。這種特征應該在硬盤手冊的文檔中,如果你好奇的話。但即使這樣的硬盤也可能失敗,如果壞塊數量太大的話,雖然如果這樣,那硬盤就基本上不能用了。

  分區

  一個硬盤可分為幾個分區。每個分區好象是單獨的硬盤。這樣,你如果只有一個硬盤,卻想安裝2個操作系統,你可以把這個硬盤分為2個分區。每個操作系統任意使用自己的分區而不干擾另一個。這種方法,2個操作系統可以在同一硬盤上和平共處。如果沒有分區,你只能為每個操作系統購買一個硬盤。

  軟盤不分區。這沒有技術原因,只因為太小,沒有必要。CDROM一般也不分區,因為作為一個大盤更易於使用,而且很少有多操作系統的需要。

  MBR(主引導記錄), 啟動扇區和分區表

  一個硬盤如何分區的信息存在它的第一個扇區(即第一面第一道第一扇區)。這個第一扇區是硬盤的主引導記錄(MBR);這是計算機啟動時BIOS讀入和啟動的扇區。主引導記錄包括一段小程序,讀入分區表,檢查哪個分區是活動分區(即啟動分區),並讀入活動分區的第一個扇區:該分區的啟動扇區(MBR也是啟動扇區,只不過因為其特殊地位,所以使用特殊的名字)。這個啟動扇區包括另一個小程序,讀入這個分區(假設是可啟動的)上操作系統的第一個部分,然後啟動它。

  這個分區方案不是內置於硬件和BIOS的,只是許多操作系統遵循的約定。並非所有的操作系統都遵循這個約定,也有例外。有些操作系統支持分區,但他們占領硬盤上的一個分區,然後使用他們自己的內部分區方法管理這個分區。較新的操作系統可以和其他操作系統和平共處(包括Linux),而無需特殊的措施,但不支持分區的操作系統無法在同一硬盤上與其他操作系統共存。

  為安全預防,最好先在紙上寫下分區表,這樣在錯誤發生時不會丟失你的文件。(可以使用fdisk 修復壞的分區表)。 )相關信息可用fdisk -l 命令給出:

  

  $ fdisk -l /dev/hda
  
          Disk /dev/hda: 15 heads, 57 sectors, 790 cylinders
  
          Units = cylinders of 855 * 512 bytes
  
          Device Boot Begin Start End Blocks Id System
  
          /dev/hda1 1 1 24 10231+ 82 Linux swap
  
          /dev/hda2 25 25 48 10260 83 Linux native
  
          /dev/hda3 49 49 408 153900 83 Linux native
  
          /dev/hda4 409 409 790 163305 5 Extended
  
          /dev/hda5 409 409 744 143611+ 83 Linux native
  
          /dev/hda6 745 745 790 19636+ 83 Linux native
  
          $

  擴展和邏輯分區

  PC硬盤的最初的分區方案只允許4個分區。實際使用中這太少了,比如有人想裝多於4個操作系統 (Linux, MS-DOS, OS/2, Minix, FreeBSD, NetBSD, Windows/NT等),或有時一個操作系統有多個分區更好,例如由於速度的原因,Linux的對換區最好單獨使用自己的分區,而不是在主 Linux分區中(下文詳述)。

  為克服這個設計問題,發明了擴展分區。這個方法允許將基本分區分為若干子分區,因而被子分區的基本分區稱為擴展分區,而子分區稱為邏輯分區,他們的表現類似基本分區 ,但產生方法不同。他們之間沒有速度差別。

  硬盤的分區結構可能類似。這個硬盤被分為3個基本分區,第二個被分為2個邏輯分區。部分硬盤根本沒有分區。硬盤是一個整體,每個基本分區有一個啟動扇區。

  分區種類

  分區表(MBR和擴展分區裡都有)中,對每個分區,有一個字節指出分區種類。這試圖確定使用該分區的操作系統,或用於何操作系統。其目的是避免2個操作系統使用同一分區。可實際上,操作系統並不真的注意分區種類字節;例如,Linux根本不管它是什麼。較壞的情況是,有些操作系統錯誤地使用它:例如有些版本的DR-DOS忽略了它的最高位(MSB),而其他一些系統則不是。

  沒有一個標准化組織定義分區種類字節每個值的意義,但一些共同接受的值包括在表 4.1中。相同的列表可以通過Linux的fdisk 命令得到。

  給硬盤分區

  有許多產生和刪除分區的程序。許多操作系統自帶,最好使用其自帶的,除非要做一些它不能作到的。許多這種程序叫fdisk , 包括Linux, 或其變種。 Linux fdisk 的使用細節可見其Man手冊。 cfdisk 命令類似fdisk , 但有更好的用戶界面(全屏的)。

  使用IDE硬盤時,啟動分區(帶可啟動核心映象文件的分區)必須全在前1024個柱面內。這是因為硬盤通過BIOS啟動(在系統進入保護模式前),而BIOS不能處理多於1024柱面。有時也可能使用部分在前1024柱面的啟動分區,這要求所有用BIOS讀入的文件都在前1024柱面內。由於這難與安排,因此這是個很差的主意;你不可能知道什麼時候核心升級或磁盤碎片整理會導致系統無法啟動。因此,應該確認你的啟動分區完全在前1024柱面內。

  事實上,一些新版的BIOS和IDE硬盤可以處理多於1024柱面。如果你有這樣一個系統,你可以忘卻這個問題;如果你不能確認,還是把啟動分區放在前1024柱面內。

  每個分區擁有一塊連續的扇區。因為Linux文件系統使用1 kB的塊,即2個扇區,所以奇數個扇區會導致最後一個扇區不能使用,這不會有什麼問題,但不好,有些版本的 fdisk 會對此給出警告。

  改變分區大小一般要求首先備分此分區想保留的所有東西(為防萬一,最好備分整個硬盤),然後刪除此分區,產生新分區,最後回存所有東西到新分區。如果是擴大分區,你可能需要調整相鄰分區的大小(並備分、回存)。

  由於改變分區大小是如此痛苦,最好一次就確定。或擁有一個有效而易用的備分系統。如果你通過無須太多人工干預的介質安裝(例如CDROM,而不是軟盤),那麼開始可以比較容易地玩玩各種設置。因為你無須備分什麼數據,改幾次分區大小不會太過痛苦。

  有個MSDOS的程序叫fips , 可以無須備分和回存地改變MSDOS分區的大小, 但對其他文件系統,備分回存還是必須的。

  設備文件和分區

  每個分區和擴展分區有自己的設備文件。這些文件的命名規定是在整個盤的名字加分區號,並約定1-4是基本分區(不管真的有幾個基本分區),5-8是邏輯分區(不管它在哪個基本分區中)。例如,/dev/hda1 是第一個IDE硬盤的第一個基本分區,而/dev/sdb7 是第二個SCSI硬盤的第三個擴展分區。設備列表 [Anv]給出更詳細的信息。

  文件系統

  什麼是文件系統?

  文件系統是操作系統用於明確磁盤或分區上的文件的方法和數據結構;即在磁盤上組織文件的方法。也指用於存儲文件的磁盤或分區,或文件系統種類。因此,可以說"我有2個文件系統"意思是他有2個分區,一個存文件,或他用 "擴展文件系統",意思是文件系統的種類。

  磁盤或分區和它所包括的文件系統的不同是很重要的。少數程序(包括最有理由的產生文件系統的程序)直接對磁盤或分區的原始扇區進行操作;這可能破壞一個存在的文件系統。大部分程序基於文件系統進行操作,在不同種文件系統上不能工作。

  一個分區或磁盤能作為文件系統使用前,需要初始化,並將記錄數據結構寫到磁盤上。這個過程就叫建立文件系統。

  大部分UNIX文件系統種類具有類似的通用結構,即使細節有些變化。其中心概念是超級塊superblock, i節點inode, 數據塊data block,目錄塊directory block, 和間接塊indirection block。超級塊包括文件系統的總體信息,比如大小(其准確信息依賴文件系統)。 i節點包括除了名字外的一個文件的所有信息,名字與i節點數目一起存在目錄中,目錄條目包括文件名和文件的i節點數目。 i節點包括幾個數據塊的數目,用於存儲文件的數據。 i節點中只有少量數據塊數的空間,如果需要更多,會動態分配指向數據塊的指針空間。這些動態分配的塊是間接塊;為了找到數據塊,這名字指出它必須先找到間接塊的號碼。

  UNIX文件系統通常允許在文件中產生孔(hole) (用lseek ; 請看手冊), 意思是文件系統假裝文件中有一個特殊的位置只有0字節,但沒有為這文件的這個位置保留實際的磁盤空間(這意味著這個文件將少用一些磁盤空間)。這對小的二進制文件經常發生,Linux共享庫、一些數據庫和其他一些特殊情況。 (孔由存儲在間接塊或i節點中的作為數據塊地址的一個特殊值實現,這個特殊地址說明沒有為文件的這個部分分配數據塊,即,文件中有一個孔。)

  孔有一定的用處。在筆者的系統中,一個簡單的測量工具顯示在200MB使用的磁盤空間中,由於孔,節約了大約4MB。在這個系統中,程序相對較少,沒有數據庫文件。有關這個測量工具的細節請看附錄 A.

  Filesystems galore

  Linux支持多種文件系統。下面是最重要的幾個:

  minix

  最老的,相信是最可靠的,但缺少特色(有些沒有時間標記,文件名最長30個字符),能力有局限(每個文件系統最多64MB)。

  xia

  minix文件系統的一個修正版本,提升了文件名和文件系統大小的局限,但沒有新的特色。不太流行,但據說工作得很好。

  ext2

  最好的Linux自己的文件系統,也是當前最通用的。其設計易於向上兼容,所以新版的文件系統代碼無需重做已有的文件系統。

  ext

  ext2的老版,且不向上兼容。難於用新版安裝程序安裝,大部分人都改用ext2。

  另外,支持多種其他現存的外圍文件系統,很容易與其他外圍文件系統交換文件。這些外圍文件系統好象是自己的一樣,除了可能缺少一些一般UNIX的特征,或有些不同的局限。

  msdos

  與MSDOS、OS/2等的FAT文件系統兼容。

  umsdos

  Linux下的擴展msdos文件系統驅動,支持長文件名、所有者、允許權限、連接和設備文件。允許一個普通的msdos文件系統用於Linux,而無須為Linux建立單獨的分區。

  iso9660

  標准CDROM文件系統,通用的Rock Ridge增強,允許長文件名。

  nfs

  網絡文件系統,允許多台計算機之間共享文件系統,易於從所有這些計算機上存取文件。

  hpfs

  OS/2文件系統。

  sysv

  SystemV/386, Coherent, 和Xenix文件系統。

  根據情況選擇文件系統。如兼容性或其他原因必需使用非Linux文件系統,那就必須用。如果可以自由選擇,可能最明智的選擇是ext2,因為它擁有全部特征而無須忍受性能缺陷。

  還有proc文件系統, 一般在/proc 目錄, 它不是一個真正的文件系統,雖然好象是。proc文件系統使用戶易於存取全部核心數據結構,比如進程列表。它使這些數據結構看起來象個文件系統,且此文件系統可以用所有一般的文件工具操作。例如,要得到所有進程的列表,可以使用命令

  

$ ls -l /proc
total 0
dr-xr-xr-x 4 root root 0 Jan 31 20:37 1
dr-xr-xr-x 4 liw users 0 Jan 31 20:37 63
dr-xr-xr-x 4 liw users 0 Jan 31 20:37 94
dr-xr-xr-x 4 liw users 0 Jan 31 20:37 95
dr-xr-xr-x 4 root users 0 Jan 31 20:37 98
dr-xr-xr-x 4 liw users 0 Jan 31 20:37 99
-r--r--r-- 1 root root 0 Jan 31 20:37 devices
-r--r--r-- 1 root root 0 Jan 31 20:37 dma
-r--r--r-- 1 root root 0 Jan 31 20:37 filesystems
-r--r--r-- 1 root root 0 Jan 31 20:37 interrupts
-r-------- 1 root root 8654848 Jan 31 20:37 kcore
-r--r--r-- 1 root root 0 Jan 31 11:50 kmsg
-r--r--r-- 1 root root 0 Jan 31 20:37 ksyms
-r--r--r-- 1 root root 0 Jan 31 11:51 loadavg
-r--r--r-- 1 root root 0 Jan 31 20:37 meminfo
-r--r--r-- 1 root root 0 Jan 31 20:37 modules
dr-xr-xr-x 2 root root 0 Jan 31 20:37 net
dr-xr-xr-x 4 root root 0 Jan 31 20:37 self
-r--r--r-- 1 root root 0 Jan 31 20:37 stat
-r--r--r-- 1 root root 0 Jan 31 20:37 uptime
-r--r--r-- 1 root root 0 Jan 31 20:37 version
$

Copyright © Linux教程網 All Rights Reserved