安裝和升級系統時,需要對硬盤做很多工作。必須在硬盤上做文件系統,使文件能存在其上,並為系統不同的部分保留空間。
本章說明所有這些初始化工作。通常,一旦你建立了系統,就不必再做這些工作(除了使用軟盤)。如果你要增加一個新硬盤或更好地調整你的硬盤的使用,那麼可能回到這一章。
管理磁盤的基本任務有:
格式化磁盤。這為磁盤進入使用做一些工作,比如檢查壞扇區。(現在多數硬盤無須格式化。)
給硬盤分區,如果想用於互相不干擾的幾件事。分區的一個原因是要在一個硬盤上存不同的操作系統。另一個原因是將用戶文件和系統文件分開,以簡化備份並在系統崩潰時有助於保護系統文件。
在每個磁盤或分區上建立合適類型的文件系統,然後文件就可以在其上產生和存取。在你建立文件系統前,磁盤對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更粗糙。這樣,由於它是這麼小,所