歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux 簡介——磁盤和其他存貯介質的使用

Linux 簡介——磁盤和其他存貯介質的使用

日期:2017/2/25 10:39:59   编辑: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硬盤。有所有的設備文件使安裝程序更簡單,也易於增加新硬件(無須再為產生新設備的設備文件找出正確的參數)。

noauto選項使系統啟動是不自動mount(即, it stops mount -a from mounting it)。 user允許任何用戶mount這個文件系統,並且,由於安全原因,不允許執行程序(normal or setuid) and interpretation of device files from the mounted filesystem。這樣,任何用戶都可以用如下命令mount一個msdos文件系統的軟盤:

$ mount /floppy
$

  軟盤可以用相關的umount 被unmount。

  如果想提供多種軟盤的存取,需要給出多個安裝點。對每個安裝點的設置可以不同。例如,提供MSDOS和ext2文件系統的存取,可以在/etc/fstab 文件中加如下行:

/dev/fd0 /dosfloppy msdos user,noauto 0 0
/dev/fd0 /ext2floppy ext2 user,noauto 0 0

  對於MSDOS文件系統(不僅是軟盤),可能需要用uid, gid,和umask 文件系統選項來限制存取權限,請看mount 手冊頁。如果不小心,mount一個MS-DOS文件系統將給予任何用戶至少是讀權限,這可不是一個好主意。

用fsck檢查文件系統完整性

  文件系統很復雜,因此易於發生錯誤。可以用fsck 命令檢查文件系統是否正確和有效。它可以根據指令修復找到的小錯誤,並將未修復錯誤報告用戶。幸運的是,文件系統的代碼非常有效,所以根本極少出現問題,並且問題通常原因是電源失敗、硬件失敗、或操作錯誤,例如沒有正常關閉系統。

  大多數系統設置為啟動時自動運行fsck ,因此任何錯誤將在系統使用前被檢測到(並根據希望修正)。使用有錯誤的文件系統可能使問題變得更壞:如果數據結構有問題,使用這個文件系統可能使之更糟,導致更多的數據丟失。當然,在大的文件系統上運行fsck 會花一定的時間,如果系統正常關閉,幾乎從不發生錯誤,因此有一些方法可以不進行檢查。如果文件/etc/fastboot 存在,就不檢查。另外,如果ext2文件系統在超級快中有一個特定的標記告知該文件系統在上次mount後沒有正常unmount. 如果標記指出unmount正常完成(假設正常unmount指出沒問題),e2fsck (fsck 的ext2文件系統版) 就不檢查系統。/etc/fastboot 是否影響系統依賴於你的啟動手稿,但ext2標記則在你使用e2fsck 時發生作用--基於一個e2fsck 選項(參閱e2fsck 手冊頁)

  自動檢查只對啟動時自動mount的文件系統發生作用。使用fsck 手工檢查其他文件系統,比如軟盤。

  如果fsck 發現為修復的問題,你需要深入了解文件系統的一般工作原理和有問題的文件系統的細節,或好的備份。最後一個辦法容易(雖然冗長)安排,如果你自己不知道,有時可以通過朋友、Linux新聞組、電子郵件列表或其他支持源安排。我很想告訴你更多,但我對這的學習和實踐也並不多。Theodore T'so的debugfs 程序應該有用。

  fsck 只能運行於未mount的文件系統,不要用於已mount的文件系統(除了啟動時的只讀根文件系統)。這是因為它存取原始磁盤,在操作系統不知道的情況下修改文件系統。 There will be trouble, if the operating system is confused.

用badblocks檢查磁盤錯誤

  應該周期性地用badblocks 命令檢查壞塊它輸出找到的所有壞塊的編號的列表。列表給fsck 記錄在文件系統數據結構中,使操作系統存儲數據時不使用這些壞塊。舉例:

$ badblocks /dev/fd0H1440 1440 > bad-blocks
$ fsck -t ext2 -l bad-blocks /dev/fd0H1440
Parallelizing fsck version 0.5a (5-Apr-94)
e2fsck 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Check reference counts.
Pass 5: Checking group summary information.

/dev/fd0H1440: ***** FILE SYSTEM WAS MODIFIED *****
/dev/fd0H1440: 11/360 files, 63/1440 blocks
$

  如果badblocks報告一個塊已經使用,e2fsck 將試著將此塊移到其他地方。如果該塊真的壞了,而不是在壞塊邊緣,文件內容可能丟失。

Fighting fragmentation

  文件寫到磁盤時,不一定在連續的塊中。沒在連續塊中的文件叫碎片。因為磁盤的讀寫頭回更多地移動,讀碎片文件會花較長的時間。雖然如果有好的讀前緩沖系統不會有什麼問題,但最好還是避免碎片。

  Ext2文件系統試圖使碎片最少,即使不能將一個文件的所有塊存在連續扇區中,也盡量靠近。 Ext2通常有效地安排裡文件其他塊最近的空閒塊,因此很少需要關心碎片問題。 Ext2文件系統有一個消除碎片程序,請看參考書目中的 [TV]。

  有許多MSDOS消碎片程序在文件系統中移動塊以消除碎片。其他一些文件系統,消碎片必須通過備份-重產生-回存文件系統來完成。對於所有文件系統,消碎片應該備份文件系統,因為很多原因可能在消碎片過程中導致錯誤。

分配磁盤空間

分區概要
  用最好的方式給磁盤分區不容易,而且,沒有一個通用的正確方法,這包括很多因素。

  傳統的方法是有個(相對)小的根文件系統,包括 /bin , /etc , /dev , /lib , /tmp , 和其他系統啟動和運行需要的東西。這種方法,根文件系統(在它自己的分區或硬盤上)是所有系統啟動需要的東西。理由是如果根文件系統小而不常用,系統崩潰時它就不太容易損壞,而且崩潰時也易於修復。然後給/usr 目錄樹、用戶主目錄(經常在/home )、對換空間產生單獨的分區或使用單獨的硬盤。分離的用戶主目錄(存用戶文件)在其自己的分區中易於備份,因為一般無須備份程序(/usr 中)。網絡環境中,這樣可以使多台計算機共享/usr (例如使用NFS) 這樣每台機器可以節約數十、數百兆的磁盤空間。

  多分區的問題是將整個磁盤的空閒空間分割成若干小片。現在,由於磁盤和操作系統已經很可靠,許多人更傾向與一個分區存所有文件。當然,這樣可能比備份、回存小分區痛苦些。

  對於小硬盤(假設你不做核心開發),最好的方法可能是只要一個分區。對於大硬盤,分幾個大分區可能更好。尤其在某種情況下出現錯誤時。 (注意這裡說的小和大是相對的,根據你對磁盤空間的需求而言。)

  如果你有多個硬盤,你可能想讓根文件系統(包括/usr ) 在一個上,而用戶主目錄在另一個上。

  最好准備嘗試幾個不同的分區方案(over time, not just while first installing the system)。這有些工作量,因為這其實是從頭安裝系統若干遍,但這是確認正確的唯一方法。

空間要求

  你安裝的Linux給出一些對不同配置所需磁盤空間的指示。單獨安裝的程序可能也是。這能幫助你計劃你的磁盤使用,但你應該為以後可能的需求保留一些額外空間。

  擁護文件總量基於你的用戶希望。許多人好象想要他們所有可能的文件量,但多多益善。有些人只有很少的文字處理,也許幾兆就夠,而有些人可能需要上GB的空間做圖象處理。

  順便說一句,用KB或MB比較文件大小和用MB給出的磁盤空間時,應當注意這2者的可能的不同。一些硬盤制造商喜歡稱1000字節為1KB,1000KB為1MB,而計算機世界的其他地方都以1024為因數。因此我的MB硬盤實際只是330MB硬盤。

  對換空間在5.5章討論。


硬盤分配舉例

  我原來有個109MB的硬盤,現在我用一個330MB硬盤。我解釋一下我如何分區這些硬盤並說明為什麼。

  當我的需要和操作系統變化時,我用不同的方法分區109MB硬盤。我說明2種方案。首先,我曾和Linux一起運行MSDOS,為此,我需要大約20MB給MSDOS、C編譯器、編輯器、一些其他工具、我工作的程序、和足夠的空閒空間。給Linux開了10MB對換分區,其他79MB作為一個分區給Linux。我曾試驗給出單獨的根,/usr , 和/home ,但這樣就沒有什麼空閒空間干什麼有趣的事了。

  當我不再需要MSDOS,我重新分區,12MB對換分區,其他是一個單獨的文件系統。

  從頭分區是為了玩玩要求自己分區的一些東西,例如試試不同的Linux,或比較文件系統的速度。當沒有這些需要後,就把它作為對換區(我喜歡打開好多窗口)。

給Linux增加更多的磁盤空間

  給Linux增加更多的磁盤空間很容易,至少在硬件都安裝好後(硬件安裝不在本書所述的范圍)。如果需要,先格式化,然後產生分區和上面說過的文件系統,在/etc/fstab 中加入正確的行使之能自動mount。

節約磁盤空間的提示

  節約磁盤空間的最好提示是不要安裝不必要的程序。許多Linux distributions給出安裝其所帶軟件包某些部分的選擇,分析你的需求你可能發現好多你並不需要。這會節約很多磁盤空間,因為許多程序需要很大空間。即使你需要某部分包或程序,也不一定需要其全部。例如有些在線文檔可能不必要,有些GNU Emacs的Elisp文件, 有些X11的字體,或者有些編程庫。

  如果你不能卸裝包,你可以壓縮。如gzip 或zip 的壓縮程序可以壓縮/解壓文件或文件群。gzexe 系統可以對用戶透明地壓縮/解壓程序 (沒用的程序被壓縮,當被使用時解壓)。實驗中的DouBle 系統對程序透明地壓縮文件系統中的所有文件。(如果你熟悉例如Stacker for MS-DOS等產品,原理是一樣的。)
Copyright © Linux教程網 All Rights Reserved