linux硬盤分區講解

   在學習 Linux 的過程中,安裝 Linux 是每一個初學者的第一個門檻。在這個過程中間,最大的困惑莫過於給硬盤進行分區。雖然,現在各種發行版本的 Linux 已經提供了友好的圖形交互界面,但是很多的人還是感覺無從下手。這其中的原因主要是不清楚 Linux 的分區規定,以及它下面最有效的分區工具― Fdisk 的使用方法。

 

     首先我們要對硬盤分區的基本概念進行一些初步的瞭解,硬盤的分區主要分爲基本分區(primary partion)擴充分區(extension partion)兩種,基本分區和擴充分區的數目之和不能大於四個且基本分區可以馬上被使用但不能再分區。擴充分區必須再進行分區後才能使用,也就是說它必須還要進行二次分區。那麼由擴充分區再分下去的是什麼呢?它就是邏輯分區(logical partion),況且邏輯分區沒有數量上限制. (硬盤分區爲基本分區和擴充分區,擴充分區下有可以分爲邏輯分區)。

 

      對習慣於使用dos或windows的用戶來說,有幾個分區就有幾個驅動器,並且每個分區都會獲得一個字母標識符,然後就可以選用這個字母來指定在這個分區上的文件和目錄,它們的文件結構都是獨立的,非常好理解。但對這些初上手 red hat linux的用戶,可就有點惱人了。因爲對red hat linux用戶來說無論有幾個分區,分給哪一目錄使用,它歸根結底就只有一個根目錄,一個獨立且唯一的文件結構。red hat linux中每個分區都是用來組成整個文件系統的一部分,因爲它採用了一種叫“載入”的處理方法,它的整個文件系統中包含了一整套的文件和目錄,且將一個分區和一個目錄聯繫起來。這時要載入的一個分區將使它的存儲空間在一個目錄下獲得。

       對windows用戶來說,操作系統必須裝在同一分區裏,它是商業軟件! 所以你沒有選擇的餘地!對red hat linux來說,你有了較大的選擇餘地,你可以把系統文件分幾個區來裝(必須要說明載入點),也可以就裝在同一個分區中(載入點是“/”)。

下面從這兩個方面入手,來講解這個困擾大家的問題。

 

Linux 的分區規定

   1. 設備管理  (設備命名規則)

 在 Linux 中,每一個硬件設備都映射到一個系統的文件(一個硬件對應一個設備文件結點),對於硬盤、光驅等 IDE 或 SCSI 設備也不例外。Linux 把各種 IDE 設備分配了一個由 hd 前綴組成的文件;而對於各種 SCSI 設備,則分配了一個由 sd 前綴組成的文件。

對於ide硬盤,驅動器標識符爲“hdx~”,其中“hd”表明分區所在設備的類型,這裏是指ide硬盤了。“x”爲盤號(a爲基本盤,b爲基本從屬盤,c爲輔助主盤,d爲輔助從屬盤),“~”代表分區,前四個分區用數字1到4表示,它們是主分區或擴展分區,從5開始就是邏輯分區。例,hda3表示爲第一個ide硬盤上的第三個主分區或擴展分區,hdb2表示爲第二個ide硬盤上的第二個主分區或擴展分區。對於scsi硬盤則標識爲“sdx~”,scsi硬盤是用“sd”來表示分區所在設備的類型的,其餘則和ide硬盤的表示方法一樣,不在多說。

例如,第一個 IDE 設備,Linux 就定義爲 hda;第二個 IDE 設備就定義爲 hdb;下面以此類推。而 SCSI 設備就應該是 sda、sdb、sdc 等。

 

         2. 分區數量  

         要進行分區就必須針對每一個硬件設備進行操作(對一個硬盤設備來說),這就有可能是一塊IDE硬盤或是一塊SCSI硬盤。對於每一個硬盤(IDE 或 SCSI)設備,Linux 分配了一個 1 到 16 的序列號碼,這就代表了這塊硬盤上面的分區號碼。

  例如,第一個 IDE 硬盤的第一個分區,在 Linux 下面映射的就是 hda1,第二個分區就稱作是 hda2。對於 SCSI 硬盤則是 sda1、sdb1 等。

 

3. 各分區的作用   

在 Linux 中規定,每一個硬盤設備最多能有 4個主分區(其中包含擴展分區)構成,任何一個擴展分區都要佔用一個主分區號碼,也就是在一個硬盤中,主分區和擴展分區一共最多是 4 個。
  對於早期的 DOS 和 Windows(Windows 2000 以前的版本),系統只承認一個主分區,可以通過在擴展分區上增加邏輯盤符(邏輯分區)的方法,進一步地細化分區。

主分區的作用就是計算機用來進行啓動操作系統的,因此每一個操作系統的啓動,或者稱作是引導程序,都應該存放在主分區上。

這就是主分區和擴展分區及邏輯分區的最大區別。  

我們在指定安裝引導 Linux 的 bootloader 的時候,都要指定在主分區上,就是最好的例證。
  Linux 規定了主分區(或者擴展分區)佔用 1 至 16 號碼中的前 4 個號碼。以第一個 IDE 硬盤爲例說明,主分區(或者擴展分區)佔用了 hda1、hda2、hda3、hda4,而邏輯分區佔用了 hda5 到 hda16 等 12 個號碼
  因此,Linux 下面每一個硬盤總共最多有 16 個分區
  對於邏輯分區,Linux 規定它們必須建立在擴展分區上(在 DOS 和 Windows 系統上也是如此規定),而不是主分區上。
  因此,我們可以看到擴展分區能夠提供更加靈活的分區模式,但不能用來作爲 操作系統 的引導。 除去上面這些各種分區的差別,我們就可以簡單地把它們一視同仁了。


  4. 分區指標  

       對於每一個 Linux 分區來講,分區的大小和分區的類型是最主要的指標。容量的大小讀者很容易理解,但是分區的類型就不是那麼容易接受了。分區的類型規定了這個分區上面的文件系統的格式。
  Linux 支持多種的文件系統格式,其中包含了我們熟悉的FAT32、FAT16、NTFS、HP-UX,以及各種 Linux 特有的 Linux Native和 Linux Swap分區類型。
  在 Linux 系統中,可以通過分區類型號碼來區別這些不同類型的分區。各種類型號碼在介紹Fdisk的使用方式的時候將會介紹。


   5  常用分區

/boot分區,它包含了操作系統的內核和在啓動系統過程中所要用到的文件,建這個 分區是有必要的,因爲目前大多數的pc機要受到bios的限制,況且如果有了一個單獨的/boot啓動分區,即使主要的根分區出現了問題,計算機依然能夠 啓動。這個分區的大小約在50mb—100mb之間。但是如果想用lilo啓動red hat linux系統的話,含有/boot的分區必須完全在柱面1023以下。又由於8gb後的數據lilo不能讀取,所以red hat linux要安裝在8gb的區域以內。

/usr分區,是red hat linux系統存放軟件的地方,如有可能應將最大空間分給它。

/home分區,是用戶的home目錄所在地,這個分區的大小取決於有多少用戶。如 果是多用戶共同使用一臺電腦的話,這個分區是完全有必要的,況且根用戶也可以很好地控制普通用戶使用計算機,如對用戶或者用戶組實行硬盤限量使用,限制普 通用戶訪問哪些文件等。其實單用戶也有建立這個分區的必要,因爲沒這個分區的話,那麼你只能以根用戶的身份登陸系統,這樣做是危險的,因爲根用戶對系統有 絕對的使用權,可一旦你對系統進行了誤操作,麻煩也就來了。

/var/log分區,是系統日誌記錄分區,如果設立了這一單獨的分區,這樣即使系統的日誌文件出現了問題,它們也不會影響到操作系統的主分區。

/tmp分區,用來存放臨時文件。這對於多用戶系統或者網絡服務器來說是有必要的。 這樣即使程序運行時生成大量的臨時文件,或者用戶對系統進行了錯誤的操作,文件系統的其它部分仍然是安全的。因爲文件系統的這一部分仍然還承受着讀寫操 作,所以它通常會比其它的部分更快地發生問題。

/bin分區,存放標準系統實用程序。

/dev分區,存放設備文件。

/opt分區,存放可選的安裝的軟件。

/sbin分區,存放標準系統管理文件。

上面介紹了幾個常用的分區,一般來說我們需要一個swap分區,一個/boot分區,一個/usr分區,一個/home 分區,一個/var/log分區。當然這沒有什麼規定,完全是依照你個人來定的。但記住至少要有兩個分區,一個swap分區,一個/分區。


Fdisk 使用詳解

下面通過介紹 Fdisk 的使用方法,來鞏固上面所學到的各種關於 Linux 分區的知識。
  Fdisk 是各種 Linux 發行版本中最常用的分區工具,是被定義爲 Expert 級別的分區工具,它讓初學者有點望而卻步。
  1. Fdisk 參數說明
   運行Fdisk的時候,首先映入眼簾的是歡迎界面,用戶通過在這個界面中輸入命令參數來操作Fdisk。用戶通過提示鍵入 “m”,可以顯示 Fdisk 命令各個參數的說明。 讀者可以看到 Fdisk 有很多參數,可是經常使用的就是幾個,如果讀者熟練掌握這幾個參數就可以流暢地運用 Fdisk,對 Linux 的硬盤進行分區。我們先簡單介紹各個參數的意義,然後詳細說明幾個重點參數。
  用戶在 Linux 中進行分區的時候,最常用的參數分別是 d、l、m、n、p、q、t、w 等。

2.用 Fdisk 進行分區

在 Linux 分區過程,一般是先通過 p 參數來顯示出硬盤分區表信息,然後根據信息確定將來的分區。如果想完全改變硬盤的分區格式,就可以通過 d 參數一個個刪除存在的硬盤分區。

例如 d1,d2。 刪除完畢,就可以通過 n 參數來增加新的分區。當按下 “n” 後,我們就可以看到新增的分區。這裏要選擇新建的分區類型,是主分區還是擴展分區;然後選擇 p 或是 e。它們的區別在上文中已經說明。然後就是設置分區的大小。需要提醒注意的是,如果硬盤上有擴展分區,就只能增加邏輯分區,不能增加擴展分區了,(這裏的意思是說一個盤只能有一個擴展分區,可以有多個邏輯分區),在增加分區的時候,其類型都是默認的 Linux Native,如果需要把其中的某些分區改變爲其它類型,例如 Linux Swap 或 FAT32 等,可以通過命令 t 來改變, 當按下 “t” 改變分區類型的時候,系統會提示要改變哪個分區,並且改變爲什麼類型(如果想知道系統所支持的分區類型,鍵入 l)。Linux 所支持的分區類型號碼和其對應的分區類型,可以參考表 2(這些信息可以用 l 命令得到)。改變完了分區類型,就可以按下 “w”,保存並且退出。如果不想保存,那麼可以選擇 “q” 直接退出。

fdisk 是一款強大的磁盤操作工具,來自util-linux軟件包,我們在這裏只說他如何查看磁盤分區表及分區結構;參數 -l ,通過-l 參數,能獲得機器中所有磁盤的個數,也能列出所有磁盤分區情況;

[root@localhost beinan]# fdisk -l
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1         765     6144831    7  HPFS/NTFS
/dev/hda2             766        2805    16386300    c  W95 FAT32 (LBA)
/dev/hda3            2806        7751    39728745    5  Extended
/dev/hda5            2806        3825     8193118+  83  Linux
/dev/hda6            3826        5100    10241406   83  Linux
/dev/hda7            5101        5198      787153+  82  Linux swap / Solaris
/dev/hda8            5199        6657    11719386   83  Linux
/dev/hda9            6658        7751     8787523+  83  Linux

在上面Blocks中,表示的是分區的大小,Blocks的單位是byte ,我們可以換算成M,比如第一個分區/dev/hda1的大小如果換算成M,應該是6144831/1024=6000M,也就是6G左右,其實沒有這麼 麻煩,粗略的看一下把小數點向前移動三位,就知道大約的體積有多大了;
    System 表示的文件系統,比如/dev/hda1 是NTFS格式的;/dev/hda2 表示是fat32格式的文件系統;.

在此例中,我們要特別注意的是/dev/hda3分區,這是擴展分區;他下面包含着邏輯分區,其實這個分區相當於一個容器;從屬於她的有 hda5,hda6,hda7,hda8,hda9 ;

我們還注意到一點,怎麼沒有hda4呢?爲什麼hda4沒有包含在擴展分區?一個磁盤最多有四個主分區; hda1-4算都是主分區;hda4不可能包含在擴展分區裏,另外擴展分區也算主分區;在本例中,沒有hda4這個分區,當然我們可以把其中的一個分區設 置爲主分區,只是我當時分區的時候沒有這麼做而已;

再仔細統計一下,我們看一看這個磁盤是不是還有空間?hda1+hda2+hda3=實際已經分區的體積,所以我們可以這樣算 hda1+hda2+hda3=6144831+16386300+39728745 = 62259876 (b),換算成M單位,小數點向前移三位,所以目前已經劃分好的分區大約佔用體積是62259.876(M),其實最精確的計算 62259876/1024=60800.67(M);而這個磁盤大小是80.0 GB (80026361856byte),其實實際大小也就是78150.744(M);通過我們一系列的計算,我們可以得出這個硬盤目前還有使用的空間;大約還有18G未分區的空間;

我們也可以指定fdisk -l 來查看其中一個硬盤的分區情況;

[root@localhost beinan]# fdisk -l /dev/sda

Disk /dev/sda: 60.0 GB, 60011642880 bytes
64 heads, 32 sectors/track, 57231 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1       57231    58604528   83  Linux


通過上面情況可以知道,在/dev/sda 這個磁盤中,只有一個分區;使用量差不多是百分百了;

我們還可以來查看 /dev/hda的

[root@localhost beinan]# fdisk -l /dev/hda

自己試試看?

我們也可以通過: cat /proc/partitions查看目前機器中的所有磁盤及分區情況

 

df 命令
df 是來自coreutils 軟件包,系統安裝時,就自帶的;我們通過這個命令可以查看磁盤的使用情況以及文件系統被掛載的位置

舉例:

[root@localhost beinan]# df -lh

Filesystem            容量  已用 可用 已用% 掛載點

/dev/hda8              11G  6.0G  4.4G  58% /

/dev/shm              236M     0  236M   0% /dev/shm

/dev/sda1              56G   22G   35G  39% /mnt/sda1

我們從中可以看到,系統安裝在/dev/hda8 ;還有一個56G的磁盤分區/dev/sda1掛載在 /mnt/sda1中;

其它的參數請參考 man df

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/aaronychen/archive/2008/04/09/2270048.aspx

 

應用fdisk創建U盤分區的過程:

root@ubuntu:~# fdisk /dev/sdb1                                       //此處的設備是/dev/sdb1

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): p

Disk /dev/sdb1: 516 MB, 516567552 bytes
16 heads, 62 sectors/track, 1017 cylinders
Units = cylinders of 992 * 512 = 507904 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6f20736b

This doesn't look like a partition table
Probably you selected the wrong device.           //注意這兩條語句的提示,也由此注意到設備文件錯誤.應該是/dev/sdb

     Device Boot      Start         End      Blocks   Id  System
/dev/sdb1p1   ?      784412     1935127   570754815+  72  Unknown
Partition 1 has different physical/logical beginnings (non-Linux?):
     phys=(357, 116, 40) logical=(784411, 3, 11)
Partition 1 has different physical/logical endings:
     phys=(357, 32, 45) logical=(1935126, 8, 51)
Partition 1 does not end on cylinder boundary.
/dev/sdb1p2   ?      170050     2121692   968014120   65  Novell Netware 386
Partition 2 has different physical/logical beginnings (non-Linux?):
     phys=(288, 115, 43) logical=(170049, 14, 47)
Partition 2 has different physical/logical endings:
     phys=(367, 114, 50) logical=(2121691, 4, 42)
Partition 2 does not end on cylinder boundary.
/dev/sdb1p3   ?     1884962     3836603   968014096   79  Unknown
Partition 3 has different physical/logical beginnings (non-Linux?):
     phys=(366, 32, 33) logical=(1884961, 2, 30)
Partition 3 has different physical/logical endings:
     phys=(357, 32, 43) logical=(3836602, 7, 39)
Partition 3 does not end on cylinder boundary.
/dev/sdb1p4   ?     2908953     2909009       27749+   d  Unknown
Partition 4 has different physical/logical beginnings (non-Linux?):
     phys=(372, 97, 50) logical=(2908952, 12, 25)
Partition 4 has different physical/logical endings:
     phys=(0, 10, 0) logical=(2909008, 11, 33)
Partition 4 does not end on cylinder boundary.

Partition table entries are not in disk order

Command (m for help): q

root@ubuntu:~# fdisk /dev/sdb                                                   //注意此處的設備文件名
You will not be able to write the partition table.

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): p

Disk /dev/sdb: 516 MB, 516685824 bytes
17 heads, 62 sectors/track, 957 cylinders
Units = cylinders of 1054 * 512 = 539648 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe32bfb4e

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1         958      504460+   b  W95 FAT32
Partition 1 has different physical/logical beginnings (non-Linux?):
     phys=(0, 1, 0) logical=(0, 3, 46)
Partition 1 has different physical/logical endings:
     phys=(1001, 16, 0) logical=(957, 7, 40)
Partition 1 does not end on cylinder boundary.

Command (m for help): n                                          //試圖加入分區
Command action
   e   extended
   p   primary partition (1-4)
p                                                                               //選擇加入主分區
Partition number (1-4): 1                                         //選擇加入的分區號爲1
Partition 1 is already defined.  Delete it before re-adding it.  //系統提示分區號爲1的分區已定義,重加前請刪除

Command (m for help): d                                        //刪除分區
Selected partition 1                                                //系統自動的刪除分區1

Command (m for help): p                                       //再次顯示系統分區

Disk /dev/sdb: 516 MB, 516685824 bytes
17 heads, 62 sectors/track, 957 cylinders
Units = cylinders of 1054 * 512 = 539648 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe32bfb4e

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n                                      //選擇添加系統分區
Command action
   e   extended
   p   primary partition (1-4)
p                                                                           //添加主分區
Partition number (1-4): 1                                     //添加的主分區號爲1
First cylinder (1-957, default 1):                          //選擇1號分區的起始cylinder
Using default value 1                                           //選擇默認值
Last cylinder, +cylinders or +size{K,M,G} (1-957, default 957): +200M    //選擇1號分區的結束cylinder(或者1號分區的大小)

Command (m for help): n                                    //選擇繼續添加分區
Command action
   e   extended
   p   primary partition (1-4)
e                                                                         //選擇添加extended分區
Partition number (1-4): 2                                   //extended分區的分區號爲2
First cylinder (391-957, default 391):                //選擇2號分區的起始cylinder
Using default value 391                                     //選擇默認值
Last cylinder, +cylinders or +size{K,M,G} (391-957, default 957):   //選擇此分區的結束cylinder 
Using default value 957                                    //選擇默認值

Command (m for help): p                                   // 再此顯示分區列表

Disk /dev/sdb: 516 MB, 516685824 bytes
17 heads, 62 sectors/track, 957 cylinders
Units = cylinders of 1054 * 512 = 539648 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe32bfb4e

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         390      205499   83  Linux
/dev/sdb2             391         957      298809    5  Extended

Command (m for help): n                                   // 選擇添加分區
Command action
   l   logical (5 or over)                                         //此處已經沒有extended分區了,可以選擇創建於extended分區下的logic分區
   p   primary partition (1-4)
l                                                                         //選擇創建logic分區
First cylinder (391-957, default 391): +100M  

Value out of range.
First cylinder (391-957, default 391): //在創建logic分區過程中沒有讓我們再次選擇分區號,logic分區號是由系統指點的
Using default value 391
Last cylinder, +cylinders or +size{K,M,G} (391-957, default 957): +100M

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (586-957, default 586):
Using default value 586
Last cylinder, +cylinders or +size{K,M,G} (586-957, default 957):
Using default value 957

Command (m for help): p                                            //再此顯示分區表

Disk /dev/sdb: 516 MB, 516685824 bytes
17 heads, 62 sectors/track, 957 cylinders
Units = cylinders of 1054 * 512 = 539648 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe32bfb4e

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         390      205499   83  Linux
/dev/sdb2             391         957      298809    5  Extended
/dev/sdb5             391         585      102734   83  Linux
/dev/sdb6             586         957      196013   83  Linux

Command (m for help): w                                              //把新的分區表寫入U盤

Unable to write /dev/sdb                     //寫入不成功,沒找到解決辦法,可能是因爲我用的U盤做實驗的,我的U盤不支持重寫分區表
root@ubuntu:~#

 

 

發佈了21 篇原創文章 · 獲贊 5 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章