天天看點

fdisk分區指令詳解與fdisk非互動式分區

1.說明:fdisk如何來學習

    fdisk,就是在linux中用來分區的一個指令了,至于詳細的參數,可以man一下,這裡給出實際應用過程中最常用的用法,因為這樣比起單純講指令的文法功能更能掌握一個指令的實際用法。

    下面的過程是在我自己的實驗環境中搭建,先把簡要的過程看一下:

(1)添加一塊1gb的磁盤

(2)fdisk詳細分區過程

(3)通知linux核心分區資訊的更改

(4)格式化分區

(5)挂載分區

    ok!我相信這樣一個過程下來,你是真正可以做到添加一塊硬碟,并自己做分區格式化以及使用,這樣的話,意義就真的比單純講fdisk的文法參數要好得多了!

2.實戰示範:從添加硬碟到真正可以使用硬碟

我是在虛拟機環境下直接添加的,方法很簡單,這裡就不多說了,下面給出在linux下檢視該硬碟的資訊:

1

2

3

4

5

6

7

8

<code>[root@xpleaf ~]# fdisk -l /dev/sdb</code>

<code> </code> 

<code>disk /dev/sdb: </code><code>1073</code> <code>mb, 1073741824bytes</code>

<code>255</code> <code>heads, </code><code>63</code> <code>sectors/track, 130cylinders</code>

<code>units = cylinders of </code><code>16065</code> <code>* </code><code>512</code> <code>=</code><code>8225280</code> <code>bytes</code>

<code>sector size (logical/physical): 512bytes / </code><code>512</code> <code>bytes</code>

<code>i/o size (minimum/optimal): </code><code>512</code> <code>bytes/ </code><code>512</code> <code>bytes</code>

<code>disk identifier: </code><code>0x00000000</code>

下面直接給出詳細過程,重要的一些說明在該過程中已經給出,注意看了:

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

<code>[root@xpleaf ~]# fdisk /dev/sdb ===&gt;直接接磁盤名就可以分區</code>

<code>device contains neither a valid dospartition table, nor sun, sgi or osf disklabel</code>

<code>building a </code><code>new</code> <code>dos disklabel </code><code>with</code> <code>diskidentifier </code><code>0x7f3aa9cb</code><code>.</code>

<code>changes will remain </code><code>in</code> <code>memory only,until you decide to write them.</code>

<code>after that, of course, the previouscontent won't be recoverable.</code>

<code>warning: invalid flag </code><code>0x0000</code> <code>ofpartition table </code><code>4</code> <code>will be corrected by w(rite)</code>

<code>warning: dos-compatible mode isdeprecated. it's strongly recommended to</code>

<code>         </code><code>switch</code> <code>off the mode (command </code><code>'c'</code><code>) andchange display units to</code>

<code>         </code><code>sectors (command </code><code>'u'</code><code>).</code>

<code>command (m </code><code>for</code> <code>help): m</code>

<code>command action</code>

<code>  </code><code>a   toggle a bootable flag</code>

<code>  </code><code>b   edit bsd disklabel</code>

<code>  </code><code>c   toggle the dos compatibilityflag</code>

<code>  </code><code>d   </code><code>delete</code> <code>a partition           ===&gt;删除一個分區</code>

<code>  </code><code>l   list known partition types   ===&gt;檢視分區類型對應編号清單</code>

<code>  </code><code>m   print </code><code>this</code> <code>menu              ===&gt;列印此幫助菜單</code>

<code>  </code><code>n   add a </code><code>new</code> <code>partition          ===&gt;建立一個分區</code>

<code>  </code><code>o   create a </code><code>new</code> <code>empty dospartition table</code>

<code>  </code><code>p   print the partition table    ===&gt;列印分區表</code>

<code>  </code><code>q   quit without saving changes  ===&gt;退出但不儲存更改</code>

<code>  </code><code>s   create a </code><code>new</code> <code>empty sundisklabel</code>

<code>  </code><code>t   change a partition's system id   ===&gt;更改分區類型(做lvm時需要)</code>

<code>  </code><code>u   change display/entry units</code>

<code>  </code><code>v   verify the partition table</code>

<code>  </code><code>w   write table to disk and exit     ===&gt;将操作寫入分區表并退出程式</code>

<code>  </code><code>x   extra functionality (expertsonly)</code>

<code>command (m </code><code>for</code> <code>help): n</code>

<code>  </code><code>e   extended</code>

<code>  </code><code>p   primary partition (</code><code>1</code><code>-</code><code>4</code><code>)</code>

<code>p   ===&gt;建立一個主分區</code>

<code>partition number (</code><code>1</code><code>-</code><code>4</code><code>): </code><code>1</code>   <code>===&gt;指定主分區的分區号碼</code>

<code>first cylinder (</code><code>1</code><code>-</code><code>130</code><code>, </code><code>default</code> <code>1</code><code>):  ===&gt;指定分區開始的柱面号</code>

<code>usingdefault value </code><code>1</code>

<code>last cylinder, +cylinders or+size{k,m,g} (</code><code>1</code><code>-</code><code>130</code><code>, </code><code>default</code> <code>130</code><code>): +100m</code>

<code>===&gt;指定分區結束的柱面号,或者指定分區大小,讓fdisk自動判斷結束柱面号</code>

<code>command (m </code><code>for</code> <code>help): p</code>

<code>disk identifier: </code><code>0x7f3aa9cb</code>

<code>  </code><code>device boot      start         end      blocks  id  system</code>

<code>/dev/sdb1               </code><code>1</code>          <code>14</code>      <code>112423</code><code>+ </code><code>83</code>  <code>linux</code>

<code>e   ===&gt;建立一個擴充分區</code>

<code>partition number (</code><code>1</code><code>-</code><code>4</code><code>): </code><code>1</code>

<code>partition </code><code>1</code> <code>is</code> <code>already defined.  delete it before re-adding it.</code>

<code>===&gt;由于前面已經使用了分區号碼</code><code>1</code><code>,是以這裡會提示錯誤</code>

<code>e</code>

<code>partition number (</code><code>1</code><code>-</code><code>4</code><code>): </code><code>2</code>

<code>first cylinder (</code><code>15</code><code>-</code><code>130</code><code>, </code><code>default</code> <code>15</code><code>): </code>

<code>usingdefault value </code><code>15</code>

<code>last cylinder, +cylinders or+size{k,m,g} (</code><code>15</code><code>-</code><code>130</code><code>, </code><code>default</code> <code>130</code><code>): </code>

<code>usingdefault value </code><code>130</code>

<code>===&gt;分區的開始柱面号和結束柱面号都使用預設值,即把剩餘磁盤空間配置設定給該分區</code>

<code>/dev/sdb2              </code><code>15</code>         <code>130</code>      <code>931770</code>   <code>5</code>  <code>extended</code>

<code>  </code><code>l   logical (</code><code>5</code> <code>or over)  ===&gt;由于擴充分區隻能有一個,上面建立擴充分區後</code>

<code>  </code><code>p   primary partition (</code><code>1</code><code>-</code><code>4</code><code>)  這裡就顯示邏輯分區了,也可以看到fdisk指令,</code>

<code>p                              要想建立邏輯分區,需要先建立擴充分區</code>

<code>partition number (</code><code>1</code><code>-</code><code>4</code><code>): </code><code>3</code>

<code>no free sectors available</code>

<code>===&gt;這裡還想再建立一個主分區,但是提示已經沒有磁盤空間剩餘</code>

<code>  </code><code>l   logical (</code><code>5</code> <code>or over)</code>

<code>l   ===&gt;建立一個邏輯分區</code>

<code>last cylinder, +cylinders or+size{k,m,g} (</code><code>15</code><code>-</code><code>130</code><code>, </code><code>default</code> <code>130</code><code>): +400m</code>

<code>  </code><code>device boot      start         end     blocks   id system</code>

<code>/dev/sdb5              </code><code>15</code>          <code>66</code>      <code>417658</code><code>+ </code><code>83</code>  <code>linux</code>

<code>l</code>

<code>first cylinder (</code><code>67</code><code>-</code><code>130</code><code>, </code><code>default</code> <code>67</code><code>): </code>

<code>usingdefault value </code><code>67</code>

<code>last cylinder, +cylinders or+size{k,m,g} (</code><code>67</code><code>-</code><code>130</code><code>, </code><code>default</code> <code>130</code><code>): </code>

<code>/dev/sdb6              </code><code>67</code>        <code>130</code>      <code>514048</code><code>+  </code><code>83</code> <code>linux</code>

<code>command (m </code><code>for</code> <code>help): w ===&gt;儲存更改</code>

<code>the partition table has been altered!</code>

<code>calling ioctl() to re-read partitiontable.</code>

<code>syncing disks.</code>

ok,可以看到,fdisk的分區方法是非常簡單的,但是前提就是需要你得對硬碟的知識有一定的了解,比如:硬碟的内部結構、磁頭、柱面、扇區等,這些知識都需要非常熟悉才好,不然的話,使用fdisk來分區的話也隻是--“霧裡看花,水中望月”,掌握原理才是最重要的,而使用指令工具隻是為了實作我們的需求,同時也可以加深我們對原理的了解。

<code>[root@xpleaf ~]# partprobe /dev/sdb</code>

分區完成後,需要此步驟,否則去使用這些分區時會出現錯誤資訊。當然,如果不這樣做的話,也可以采取重新啟動系統的方法。

格式化分區是為了建立檔案系統,配置設定inode和block

<code>[root@xpleaf ~]# mkfs.ext4 /dev/sdb</code>

<code>sdb  sdb1  sdb2  sdb5 sdb6  </code>

<code>[root@xpleaf ~]# mkfs.ext4 /dev/sdb1</code>

<code>……</code>

<code>this filesystem will be automaticallychecked every </code><code>31</code> <code>mounts or</code>

<code>180</code> <code>days, whichever comes first.  use tune2fs -c or -i to </code><code>override</code><code>.</code>

最後面提示說系統會定時檢查檔案系統,這裡不想系統檢查,則可以使用下面的指令:

<code>[root@xpleaf ~]# tune2fs -c -</code><code>1</code><code>/dev/sdb1</code>

<code>tune2fs </code><code>1.41</code><code>.</code><code>12</code> <code>(</code><code>17</code><code>-may-</code><code>2010</code><code>)</code>

<code>setting maximal mount count to -</code><code>1</code>

<code>[root@xpleaf ~]# mount /dev/sdb1 /mnt</code>

<code>[root@xpleaf ~]# df -h</code>

<code>filesystem      size used avail use% mounted on</code>

<code>/dev/sda3       </code><code>9</code><code>.2g </code><code>1</code><code>.8g  </code><code>7</code><code>.0g  </code><code>21</code><code>% /</code>

<code>tmpfs           937m     </code><code>0</code> <code>937m   </code><code>0</code><code>% /dev/shm</code>

<code>/dev/sda1       194m  34m  151m  </code><code>19</code><code>% /boot</code>

<code>/dev/sdb1       107m </code><code>5</code><code>.6m   96m   </code><code>6</code><code>% /mnt</code>

這裡的挂載是臨時挂載的,如果需要永久挂載(即開機挂載),則需要修改/etc/fstab檔案,這裡就不提及了。

ok,通過上面的實戰步驟,實際上已經可以掌握fdisk的用法了,這樣的話以後需要添加硬碟、分區格式化的話,就不會不知道怎麼做了吧?

3.拓展:fdisk如何非互動分區???

    從上面的fdisk分區過程可以看到,fidisk使用的是互動式的過程,如果學過parted指令,應該知道parted是可以進行非互動式的分區的,那麼這裡的問題是,fdisk可以非互動式分區嗎?

    答案是肯定可以的,請參考下面:

(1)将你要在fdisk指令行輸入的指令實作寫入一個文本檔案,比如叫做fdisk.txt

(2)然後fdisk.txt的内容類似于這樣:

<code>n</code>

<code>p</code>

<code>1</code>

<code>0</code>

<code>100m</code>

<code>w</code>

實際就是我們在互動式時的分區過程(當然這裡與我上面的分區并非一樣)

(3)然後用類似如下指令實作自動分區:

<code>fdisk /dev/hda &lt; fdiskcmd.txt</code>

ok!内容就這麼多了,看是沒有用,重在實踐,希望可以幫到大家!

繼續閱讀