最新消息: 新版网站上线了!!!

linux fdisk 的用户指南

磁盘的分区、格式化、挂载

 

对于一个系统管理者( root )而言,磁盘的的管理是相当重要的一环,尤其近来硬盘已经渐渐的被当成是消耗品了 ..... 如果我们想要在系统里面新增一颗硬盘时,应该有哪些动作需要做的呢:

 

  1. 对磁盘进行分区,以创建可用的 partition ;

  2. 对该 partition 进行格式化( format ),以创建系统可用的 filesystem;

  3. 在 Linux 系统上,需要创建挂载点 ( 亦即是目录 ),并将他挂载上来;

磁盘分区: fdisk命令参数和帮助

 

[root@www ~]# fdisk [-l] 装置名称
选项与参数:-l  :输出后面接的装置所有的 partition 内容。若仅有 fdisk -l 时,
      则系统将会把整个系统内能够搜寻到的装置的 partition 均列出来。

范例:找出你系统中的根目录所在磁盘,并查阅该硬盘内的相关信息
[root@www ~]# df /            <==注意:重点在找出磁盘文件名而已
Filesystem           1K-blocks      Used Available Use% Mounted on/dev/hdc2              9920624   3823168   5585388  41% /[root@www ~]# fdisk /dev/hdc  <==仔细看,不要加上数字喔!
The number of cylinders for this disk is set to 5005.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:1) software that runs at boot time (e.g., old versions of LILO)2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help):     <==等待你的输入!
Command (m for help): m   <== 输入 m 后,就会看到底下这些命令介绍
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition            <==删除一个partition
   l   list known partition types
   m   print this menu
   n   add a new partition           <==新增一个partition
   o   create a new empty DOS partition table
   p   print the partition table     <==在屏幕上显示分区表
   q   quit without saving changes   <==不储存离开fdisk程序
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit  <==将刚刚的动作写入分区表
   x   extra functionality (experts only)

 

 

老实说,使用 fdisk 这支程序是完全不需要背命令的!如同上面的表格中,你只要按下 m 就能够看到所有的动作! 比较重要的动作在上面已经用底线画出来了,你可以参考看看。其中比较不一样的是『q 与 w』这两个玩意儿! 不管你进行了什么动作,只要离开 fdisk 时按下『q』,那么所有的动作『都不会生效!』相反的, 按下『w』就是动作生效的意思。所以,你可以随便玩 fdisk ,只要离开时按下的是『q』即可。

 新增磁盘分区

新增磁盘分区槽有好多种情况,因为新增 Primary / Extended / Logical 的显示结果都不太相同。 底下我们先将 /dev/hdc 全部删除成为干净未分区的磁盘,然后依序新增给大家瞧瞧!

 

 

 

开始新增,我们先新增一个 Primary  的分区槽,且指定为 4 号看看

 

 

[root@www ~]# fdisk /dev/hdc
Command (m for help): n
Command action            <==因为是全新磁盘,因此只会问extended/primary而已
   e   extended
   p   primary partition (1-4)
p                         <==选择 Primary 分区槽
Partition number (1-4): 4 <==配置为 4 号!
First cylinder (1-5005, default 1): <==直接按下[enter]按键决定!
Using default value 1               <==启始磁柱就选用默认值!
Last cylinder or +size or +sizeM or +sizeK (1-5005, default 5005): +512M
# 这个地方有趣了!我们知道 partition 是由 n1 到 n2 的磁柱号码 (cylinder),
# 但磁柱的大小每颗磁盘都不相同,这个时候可以填入 +512M 来让系统自动帮我们找出
# 『最接近 512M 的那个 cylinder 号码』!因为不可能刚好等于 512MBytes 啦!
# 如上所示:这个地方输入的方式有两种:
# 1) 直接输入磁柱的号码,你得要自己计算磁柱/分区槽的大小才行;
# 2) 用 +XXM 来输入分区槽的大小,让系统自己捉磁柱的号码。
#    +与M是必须要有的,XX为数字

Command (m for help): p

Disk /dev/hdc: 41.1 GB, 41174138880 bytes255 heads, 63 sectors/track, 5005 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System/dev/hdc4               1          63      506016   83  Linux
# 注意!只有 4 号! 1 ~ 3 保留下来了!

 

 

 

 

继续新增一个,这次我们新增 Extended 的分区槽好了

 

 

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e    <==选择的是 Extended 喔!
Partition number (1-4): 1First cylinder (64-5005, default 64): <=[enter]
Using default value 64Last cylinder or +size or +sizeM or +sizeK (64-5005, default 5005): <=[enter]
Using default value 5005# 还记得我们在第三章的磁盘分区表曾经谈到过的,扩展分配最好能够包含所有
# 未分区的区间;所以在这个练习中,我们将所有未配置的磁柱都给了这个分区槽喔!
# 所以在开始/结束磁柱的位置上,按下两个[enter]用默认值即可!

Command (m for help): p

Disk /dev/hdc: 41.1 GB, 41174138880 bytes255 heads, 63 sectors/track, 5005 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System/dev/hdc1              64        5005    39696615    5  Extended/dev/hdc4               1          63      506016   83  Linux
# 如上所示,所有的磁柱都在 /dev/hdc1 里面啰!

 

 

 

 

这次我们随便新增一个 2GB 的分区槽看看

 

 

Command (m for help): n
Command action
   l   logical (5 or over)     <==因为已有 extended ,所以出现 logical 分区槽
   p   primary partition (1-4)
p   <==偷偷玩一下,能否新增主要分区槽
Partition number (1-4): 2No free sectors available   <==肯定不行!因为没有多余的磁柱可供配置

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l   <==乖乖使用逻辑分区槽吧!
First cylinder (64-5005, default 64): <=[enter]
Using default value 64Last cylinder or +size or +sizeM or +sizeK (64-5005, default 5005): +2048M

Command (m for help): p

Disk /dev/hdc: 41.1 GB, 41174138880 bytes255 heads, 63 sectors/track, 5005 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System/dev/hdc1              64        5005    39696615    5  Extended/dev/hdc4               1          63      506016   83  Linux/dev/hdc5              64         313     2008093+  83  Linux
# 这样就新增了 2GB 的分区槽,且由于是 logical ,所以由 5 号开始!
Command (m for help): q
# 鸟哥这里仅是做一个练习而已,所以,按下 q 就能够离开啰~

 

 

一般来说创建分区槽的形式会有底下的数种状况:

 

  • 1-4 号尚有剩余,且系统未有 extended:

  • 此时会出现让你挑选 Primary / Extended 的项目,且你可以指定 1~4 号间的号码;

 

  • 1-4 号尚有剩余,且系统有 extended:

  • 此时会出现让你挑选 Primary / Logical 的项目;若选择 p 则你还需要指定 1~4 号间的号码; 若选择 l(L的小写) 则不需要配置号码,因为系统会自动指定逻辑分区槽的文件名号码;

 

  • 1-4 没有剩余,且系统有 extended:

  • 此时不会让你挑选分区槽类型,直接会进入 logical 的分区槽形式。

 

 

查看分区表信息

 

Command (m for help): p  <== 这里可以输出目前磁盘的状态

Disk /dev/hdc: 41.1 GB, 41174138880 bytes        <==这个磁盘的文件名与容量255 heads, 63 sectors/track, 5005 cylinders      <==磁头、扇区与磁柱大小
Units = cylinders of 16065 * 512 = 8225280 bytes <==每个磁柱的大小

   Device Boot      Start         End      Blocks   Id  System/dev/hdc1   *           1          13      104391   83  Linux/dev/hdc2              14        1288    10241437+  83  Linux/dev/hdc3            1289        1925     5116702+  83  Linux/dev/hdc4            1926        5005    24740100    5  Extended/dev/hdc5            1926        2052     1020096   82  Linux swap / Solaris
# 装置文件名 启动区否 开始磁柱    结束磁柱  1K大小容量 磁盘分区槽内的系统

Command (m for help): q
# 想要不储存离开吗?按下 q 就对了!不要随便按 w 啊!

 

 

使用『 p 』可以列出目前这颗磁盘的分区表信息,这个信息的上半部在显示整体磁盘的状态。 以鸟哥这颗磁盘为例,这个磁盘共有 41.1GB 左右的容量,共有 5005 个磁柱,每个磁柱透过 255 个磁头在管理读写, 每个磁头管理 63 个扇区,而每个扇区的大小均为 512bytes ,因此每个磁柱为『 255*63*512 = 16065*512 = 8225280bytes 』。

 

下半部的分区表信息主要在列出每个分区槽的个别信息项目。每个项目的意义为:

 

  • Device:装置文件名,依据不同的磁盘接口/分区槽位置而变。

  • Boot:是否为启动引导块?通常 Windows 系统的 C 需要这块!

  • Start, End:这个分区槽在哪个磁柱号码之间,可以决定此分区槽的大小;

  • Blocks:就是以 1K 为单位的容量。如上所示,/dev/hdc1 大小为104391K = 102MB

  • ID, System:代表这个分区槽内的文件系统应该是啥!不过这个项目只是一个提示而已, 不见得真的代表此分区槽内的文件系统喔!

 

从上表我们可以发现几件事情:

 

  • 整部磁盘还可以进行额外的分区,因为最大磁柱为 5005 ,但只使用到 2052 号而已;

  • /dev/hdc5 是由 /dev/hdc4 分区出来的,因为 /dev/hdc4 为 Extended,且 /dev/hdc5 磁柱号码在 /dev/hdc4 之内;

 

 

 

查询系统内的所有 partition 

 

 

[root@www ~]# fdisk -l
Disk /dev/hdc: 41.1 GB, 41174138880 bytes255 heads, 63 sectors/track, 5005 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System/dev/hdc1   *           1          13      104391   83  Linux/dev/hdc2              14        1288    10241437+  83  Linux/dev/hdc3            1289        1925     5116702+  83  Linux/dev/hdc4            1926        5005    24740100    5  Extended/dev/hdc5            1926        2052     1020096   82  Linux swap / Solaris

Disk /dev/sda: 8313 MB, 8313110528 bytes59 heads, 58 sectors/track, 4744 cylinders
Units = cylinders of 3422 * 512 = 1752064 bytes

   Device Boot      Start         End      Blocks   Id  System/dev/sda1               1        4745     8118260    b  W95 FAT32

 

 

由上表的信息我们可以看到我有两颗磁盘,磁盘文件名为『/dev/hdc 与 /dev/sda』,/dev/hdc 已经在上面谈过了, 至于 /dev/sda 则有 8GB 左右的容量,且全部的磁柱都已经分区给 /dev/sda1 ,该文件系统应该为 Windows 的 FAT 文件系统。这样很容易查阅到分区方面的信息吧!

 

这个 fdisk 只有 root 才能运行,此外,请注意, 使用的『装置文件名』请不要加上数字,因为 partition 是针对『整个硬盘装置』而不是某个 partition 呢!所以运行『 fdisk /dev/hdc1 』 就会发生错误啦!要使用 fdisk /dev/hdc 才对!

 

 

删除磁盘分区

删除磁盘分区,应该怎么做?

 

  1. fdisk /dev/hdc :先进入 fdisk 画面;

  2. p :先看一下分区槽的信息,假设要杀掉 /dev/hdc1;

  3. d :这个时候会要你选择一个 partition ,就选 1 啰!

  4. w (or) q :按 w 可储存到磁盘数据表中,并离开 fdisk ;当然啰, 如果你反悔了,呵呵,直接按下 q 就可以取消刚刚的删除动作了!

 

 

# 练习一: 先进入 fdisk 的画面当中去!
[root@www ~]# fdisk /dev/hdc

# 练习二: 先看看整个分区表的情况是如何
Command (m for help): p

Disk /dev/hdc: 41.1 GB, 41174138880 bytes255 heads, 63 sectors/track, 5005 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System/dev/hdc1   *           1          13      104391   83  Linux/dev/hdc2              14        1288    10241437+  83  Linux/dev/hdc3            1289        1925     5116702+  83  Linux/dev/hdc4            1926        5005    24740100    5  Extended/dev/hdc5            1926        2052     1020096   82  Linux swap / Solaris

# 练习三: 按下 d 给他删除吧!
Command (m for help): d
Partition number (1-5): 4Command (m for help): d
Partition number (1-4): 3Command (m for help): p

Disk /dev/hdc: 41.1 GB, 41174138880 bytes255 heads, 63 sectors/track, 5005 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System/dev/hdc1   *           1          13      104391   83  Linux/dev/hdc2              14        1288    10241437+  83  Linux
# 因为 /dev/hdc5 是由 /dev/hdc4 所衍生出来的逻辑分区槽,因此 /dev/hdc4 被删除,
# /dev/hdc5 就自动不见了!最终就会剩下两个分区槽而已喔!

Command (m for help): q
# 鸟哥这里仅是做一个练习而已,所以,按下 q 就能够离开啰~

 

 

 

磁盘格式化

分区完毕后自然就是要进行文件系统的格式化啰!格式化的命令非常的简单,那就是『make filesystem, mkfs』 这个命令啦!这个命令其实是个综合的命令,他会去呼叫正确的文件系统格式化工具软件! 不啰唆,让我们来瞧瞧吧!

 

 

 mkfs

 

[root@www ~]# mkfs [-t 文件系统格式] 装置文件名
选项与参数:-t  :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)

范例一:请将上个小节当中所制作出来的 /dev/hdc6 格式化为 ext3 文件系统
[root@www ~]# mkfs -t ext3 /dev/hdc6
mke2fs 1.39 (29-May-2006)
Filesystem label=                <==这里指的是分区槽的名称(label)
OS type: Linux
Block size=4096 (log=2)          <==block 的大小配置为 4K 
Fragment size=4096 (log=2)251392 inodes, 502023 blocks     <==由此配置决定的inode/block数量25101 blocks (5.00%) reserved for the super user
First data block=0Maximum filesystem blocks=51589939216 block groups32768 blocks per group, 32768 fragments per group15712 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912Writing inode tables: doneCreating journal (8192 blocks): done <==有日志记录
Writing superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 34 mounts or180 days, whichever comes first.  Use tune2fs -c or -i to override.
# 这样就创建起来我们所需要的 Ext3 文件系统了!简单明了!

[root@www ~]# mkfs[tab][tab]
mkfs         mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.msdos   mkfs.vfat
# 按下两个[tab],会发现 mkfs 支持的文件格式如上所示!可以格式化 vfat 喔!

 

 

mkfs 其实是个综合命令而已,事实上如同上表所示,当我们使用『 mkfs -t ext3 ...』时, 系统会去呼叫 mkfs.ext3 这个命令来进行格式化的动作啦!若如同上表所展现的结果, 那么鸟哥这个系统支持的文件系统格式化工具有『cramfs, ext2, ext3, msdoc, vfat』等, 而最常用的应该是 ext3, vfat 两种啦! vfat 可以用在 Windows/Linux 共享的 U盘 闪盘啰。

 

 

例题:
将刚刚的 /dev/hdc6 格式化为 Windows 可读的 vfat 格式吧!
答:
mkfs -t vfat /dev/hdc6

 

 

在格式化为 Ext3 的范例中,我们可以发现结果里面含有非常多的信息,由于我们没有详细指定文件系统的细部项目, 因此系统会使用默认值来进行格式化。其中比较重要的部分为:文件系统的标头(Label)、Block的大小以及 inode 的数量。 如果你要指定这些东西,就得要了解一下 Ext2/Ext3 的公用程序,亦即 mke2fs 这个命令啰!

 

 

mke2fs

 

[root@www ~]# mke2fs [-b block大小] [-i block大小] [-L 标头] [-cj] 装置
选项与参数:-b  :可以配置每个 block 的大小,目前支持 1024, 2048, 4096 bytes 三种;-i  :多少容量给予一个 inode 呢?-c  :检查磁盘错误,仅下达一次 -c 时,会进行快速读取测试;
      如果下达两次 -c -c 的话,会测试读写(read-write),会很慢~-L  :后面可以接标头名称 (Label),这个 label 是有用的喔!e2label命令介绍会谈到~-j  :本来 mke2fs 是 EXT2 ,加上 -j 后,会主动加入 journal 而成为 EXT3。

 

 

mke2fs 是一个很详细但是很麻烦的命令!因为里面的细部配置太多了!现在我们进行如下的假设:

 

  • 这个文件系统的标头配置为:vbird_logical

  • 我的 block 指定为 2048 大小;

  • 每 8192 bytes 分配一个 inode ;

  • 建置为 journal 的 Ext3 文件系统。

 

开始格式化 /dev/hdc6 结果会变成如下所示:

 

 

[root@www ~]# mke2fs -j -L "vbird_logical" -b 2048 -i 8192 /dev/hdc6
mke2fs 1.39 (29-May-2006)
Filesystem label=vbird_logical
OS type: Linux
Block size=2048 (log=1)
Fragment size=2048 (log=1)251968 inodes, 1004046 blocks50202 blocks (5.00%) reserved for the super user
First data block=0Maximum filesystem blocks=53791948862 block groups16384 blocks per group, 16384 fragments per group4064 inodes per group
Superblock backups stored on blocks:
        16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816Writing inode tables: doneCreating journal (16384 blocks): doneWriting superblocks and filesystem accounting information: done# 比较看看,跟上面的范例用默认值的结果,有什么不一样的啊?

谷谷点程序 » linux fdisk 的用户指南