Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1352979
  • 博文数量: 245
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3094
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-12 14:51
文章存档

2011年(2)

2009年(152)

2008年(91)

我的朋友

分类:

2009-01-14 14:15:16

磁碟的分割、格式化、检验与挂载:

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

   1. 对磁碟进行分割,以建立可用的 partition ;
   2. 对该 partition 进行格式化( format ),以建立系统可用的 filesystem;
   3. 若想要仔细一点,则可对刚刚建立好的 filesystem 进行检验;
   4. 在 Linux 系统上,需要建立挂载点 ( 亦即是目录 ),并将他挂载上来;

当然啰,在上述的过程当中,还有很多需要考虑的,例如磁碟分割槽 (partition) 需要定多大? 是否需要加入 journal 的功能?inode 与 block 的数量应该如何规划等等的问题。但是这些问题的决定, 都需要与你的主机用途来加以考量的~所以,在这个小节里面,鸟哥仅会介绍几个动作而已, 更详细的设定值,则需要以你未来的经验来参考啰!

磁碟分割: 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):     <==等待你的输入!

由于每个人的环境都不一样,因此每部主机的磁碟数量也不相同。所以你可以先使用 df 这个指令找出可用磁碟档名, 然后再用 fdisk 来查阅。在你进入 fdisk 这支程式的工作画面后,如果您的硬碟太大的话(通常指磁柱数量多于 1024 以上),就会出现如上讯息。这个讯息仅是在告知你,因为某些旧版的软体与作业系统并无法支援大于 1024 磁柱 (cylinter) 后的磁区使用,不过我们新版的 Linux 是没问题啦!底下继续来看看 fdisk 内如何操作相关动作吧!

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’即可。 ^_^! 好了,先来看看分割表资讯吧!

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 之内;

fdisk 还可以直接秀出系统内的所有 partition 喔!举例来说,鸟哥刚刚插入一个 USB 磁碟到这部 Linux 系统中, 那该如何观察 (1)这个磁碟的代号与 (2)这个磁碟的分割槽呢?

范例:查阅目前系统内的所有 partition 有哪些?
[root@www ~]# fdisk -l
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

Disk /dev/sda: 8313 MB, 8313110528 bytes
59 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 才对!那么我们知道可以利用 fdisk 来查阅硬碟的 partition 资讯外,底下再来说一说进入 fdisk 之后的几个常做的工作!

Tips:

再次强调,你可以使用 fdisk 在您的硬碟上面胡搞瞎搞的进行实际操作,都不打紧, 但是请‘千万记住,不要按下 w 即可!’离开的时候按下 q 就万事无妨啰!    

* 删除磁碟分割槽

如果你是按照鸟哥建议的方式去安装你的 CentOS ,那么你的磁碟应该会预留一块容量来做练习的。 实际练习新增硬碟之前,我们先来玩一玩恐怖的删除好了~如果想要测试一下如何将你的 /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 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

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

Command (m for help): d
Partition number (1-4): 3

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/hdc5 是由 /dev/hdc4 所衍生出来的逻辑分割槽,因此 /dev/hdc4 被删除,
# /dev/hdc5 就自动不见了!最终就会剩下两个分割槽而已喔!

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


    * 练习新增磁碟分割槽

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

# 练习一: 进入 fdisk 的分割软体画面中,并删除所有分割槽:
[root@www ~]# fdisk /dev/hdc
Command (m for help): d
Partition number (1-5): 4

Command (m for help): d
Partition number (1-4): 3

Command (m for help): d
Partition number (1-4): 2

Command (m for help): d
Selected partition 1
# 由于最后仅剩下一个 partition ,因此系统主动选取这个 partition 删除去!

# 练习二: 开始新增,我们先新增一个 Primary  的分割槽,且指定为 4 号看看!
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 bytes
255 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): 1
First cylinder (64-5005, default 64): <=[enter]
Using default value 64
Last 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 bytes
255 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): 2
No 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 64
Last cylinder or +size or +sizeM or +sizeK (64-5005, default 5005): +2048M

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              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 就能够离开啰~

上面的练习非常重要!您得要自行练习一下比较好!注意,不要按下 w 喔!会让你的系统损毁的! 由上面的一连串练习中,最重要的地方其实就在于建立分割槽的形式( primary/extended/logical )以及分割槽的大小了!一般来说建立分割槽的形式会有底下的数种状况:

    * 1-4 号尚有剩余,且系统未有 extended:
      此时会出现让你挑选 Primary / Extended 的项目,且你可以指定 1~4 号间的号码;

    * 1-4 号尚有剩余,且系统有 extended:
      此时会出现让你挑选 Primary / Logical 的项目;若选择 p 则你还需要指定 1~4 号间的号码; 若选择 l(L的小写) 则不需要设定号码,因为系统会自动指定逻辑分割槽的档名号码;

    * 1-4 没有剩余,且系统有 extended:
      此时不会让你挑选分割槽类型,直接会进入 logical 的分割槽形式。

例题:
请依照你的系统情况,建立一个大约 1GB 左右的分割槽,并显示该分割槽的相关资讯:
答:
鸟哥的磁碟为 /dev/hdc ,尚有剩余磁柱号码,因此可以这样做:

[root@www ~]# fdisk /dev/hdc
Command (m for help): n
First cylinder (2053-5005, default 2053): <==[enter]
Using default value 2053
Last cylinder or +size or +sizeM or +sizeK (2053-5005, default 5005): +2048M

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
/dev/hdc6            2053        2302     2008093+  83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or
resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

[root@www ~]# partprobe

在这个实作题中,请务必要按下‘ w ’这个动作!因为我们实际上确实要建立这个分割槽嘛!但请仔细看一下最后的警告讯息,因为我们的磁碟无法卸载(因为含有根目录),所以核心无法重新取得分割表资讯,因此此时系统会要求我们重新开机(reboot)以更新核心的分割表资讯才行。

如上的练习中,最终写入分割表后竟然会让核心无法捉到分割表资讯!此时你可以直接使用 reboot 来处理, 也可以使用 GNU 推出的工具程式来处置,那就是 partprobe 这个指令。这个指令的执行很简单, 他仅是告知核心必须要读取新的分割表而已,因此并不会在萤幕上出现任何资讯才是! 这样一来,我们就不需要 reboot 啰!

    * 操作环境的说明

以 root 的身份进行硬碟的 partition 时,最好是在单人维护模式底下比较安全一些, 此外,在进行 fdisk 的时候,如果该硬碟某个 partition 还在使用当中, 那么很有可能系统核心会无法重新载入硬碟的 partition table ,解决的方法就是将该使用中的 partition 给他卸载,然后再重新进入 fdisk 一遍,重新写入 partition table ,那么就可以成功啰!

    * 注意事项:

另外在实作过程中请特别注意,因为 SATA 硬碟最多能够支援到 15 号的分割槽, IDE 则可以支援到 63 号。 但目前大家常见的系统都是 SATA 磁碟,因此在练习的时候千万不要让你的分割槽超过 15 号! 否则即使你还有剩余的磁柱容量,但还是会无法继续进行分割的喔!

另外需要特别留意的是,fdisk 没有办法处理大于 2TB 以上的磁碟分割槽! 这个问题比较严重!因为虽然 Ext3 档案系统已经支援达到 16TB 以上的磁碟,但是分割指令却无法支援。 时至今日(2008)所有的硬体价格大跌,硬碟也已经出到单颗 1TB 之谱,若加上磁碟阵列 (RAID) , 高于 2TB 的磁碟系统应该会很常见!此时你就得使用 parted 这个指令了!我们会在本章最后谈一谈这个指令的用法。

阅读(2020) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~