大家在安装Linux系统的时候,可能会碰到这样一个迷茫的问题,那就是硬盘分区。
对于一个硬盘(包括移动存储设备)如何规划分区结构及如何划分才是比较合理的?为了减少由于硬盘划分不合理而造成的风险及不必要的麻烦,在这里给大家介绍一下,如何对一个硬盘的分区结构进行规划。
一、硬盘种类、物理几何结构
硬盘的种类主要是SCSI、IDE、以及现在流行的SATA等;任何一种硬盘的生产都要一定的标准;随着相应的标准的升级,硬盘生产技术也在升级;比如SCSI标准已经经历了SCSI-1、SCSI-2、SCSI-3;其中目前咱们经常在服务器网站看到的Ultral-160就是基于SCSI-3标准的;IDE遵循的是ATA标准,而目前流行的SATA,是ATA标准的升级版本;IDE是并口设备,而SATA是串口,SATA的发展目的是替换IDE;
硬盘的物理几何结构是由盘、硬盘表面、柱面、扇区组成,一个张硬盘内部是由几张碟片叠加在一起,这样形成一个柱体面;每个碟片都有上下表面;磁头和硬盘表面接触从而能读取数据;
二、硬盘容量及分区大小的算法
我们通过fdsik -l 可以发现如下的信息:
[root@yufei ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00058a38
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 26 1938 15360000 83 Linux
/dev/sda3 1938 2004 524288 82 Linux swap / Solaris
其中 heads 是硬盘面;sectors 是扇区;cylinders 是柱面;每个扇区大小是 512byte,也就是0.5M;
通过上面的例子,我们发现此硬盘有 255个硬盘面,有63个扇区,有2610个柱面;所以整个硬盘体积换算公式应该是:
磁面个数 x 扇区个数 x 每个扇区的大小512 x 柱面个数 = 硬盘体积 (单位bytes)
所以在本例中硬盘的大小应该计算如下:
255 x 63 x 512 x 2610 = 21467980800 bytes
注:由于硬盘生产商和操作系统换算不太一样,硬盘厂家以10进位的办法来换算,而操作系统是以2进位制来换算,所以在换算成M或者G时,不同的算法结果却不一样;这就是我们经常看到硬盘标出的是40G,在操作系统下看却少几G的原因;
上面例子中,硬盘厂家算法 和 操作系统算数比较:
硬盘厂家:
21467980800 bytes = 21467980.800 K = 21467.980800 M =21.467980800 G
(向大单位换算,每次除以1000)
操作系统:
21467980800 bytes = 20964825 K = 20473.4619140625 M =19.99361515045166 G
(向大单位换算,每次除以1024)
我们在查看分区大小的时候,可以用生产厂家提供的算法来简单推算分区的大小;把小数点向前移动六位就是以G表示的大小;
三、硬盘分区划分标准
硬盘的分区由主分区、扩展分区和逻辑分区组成;所以我们在对硬盘分区时要遵循这个标准;
主分区(包括扩展分区)的最大个数是四个,主分区(包含扩展分区)的个数由硬盘的主引导记录MBR(Master Boot Recorder)决定的,MBR存放启动管理程序(GRUB,LILO,NTLOARDER等)和分区表记录。其中扩展分区也算一个主分区;扩展分区下可以包含更多的逻辑分区;
所以主分区(包括扩展分区)范围是从1-4,逻辑分区是从5开始的;
比如下面的例子:
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 9729 55617030 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
/dev/hda10 7752 9729 15888253+ 83 Linux
通过这个例子,我们可以看到主分区有3个:hda1 hda1 hda3。扩展分区由 hda5-hda10组成,此硬盘没有主分区4,所以也没有显示主分区hda4 。但逻辑分区不可能从4开始,因为那是主分区的位置。
四、硬盘设备在Linux/Unix系统里面的表示方法
IDE 硬盘在Linux或者其它类Unix系统的一般表示为 hd* ,比如hda、hdb … …
SCSI 和SATA 硬盘在Linux通常也是表示为 sd* ,比如 sda 、sdb … …
移动存储设备在linux表示为 sd* ,比如 sda 、sdb … …
大家可能参考fdisk -l来查看。
有时您可能只有一个硬盘,在操作系统中看到的却是 hdb,这与硬盘的跳线有关;另外hdc大多表示是光驱设备。如果您有两块硬盘,大多是 hda和hdb。
五、合理的规划分区
关于一个硬盘的分区,一个硬盘应该有四个主分区,其中扩展也算一个主分区;存在以下情况:
1)分区划分方式
之一:四个主分区,没有扩展分区;
[主|分区1] [主|分区2] [主|分区3] [主|分区4]
这种情况,如果您想在一个硬盘上划分五个以上分区,这样是行不通的。
之二:三个主分区 一个扩展分区;
[主|分区1] [主|分区2] [主|分区3] [扩展分区]
|
[逻辑|分区5] [逻辑|分区6] [逻辑|分区7] [逻辑|分区8] … …
这种情况行得通,而且分区的自由度比较大,分区也不受约束,能分超过5个分区。
2)最合理的的分区方式
最合理的分区划分方式:主分区在前,扩展分区在后,然后在扩展分区中划分逻辑分区。主分区的个数+扩展分区个数要控制在四个之内。
比如下面的分区是比较好的
[主|分区1] [主|分区2] [主|分区3] [扩展分区]
|
[逻辑|分区5] [逻辑|分区6] [逻辑|分区7] [逻辑|分区8] … …
[主|分区1] [主|分区2] [扩展分区]
|
[逻辑|分区5] [逻辑|分区6] [逻辑|分区7] [逻辑|分区8] … …
[主|分区1] [扩展分区]
|
[逻辑|分区5] [逻辑|分区6] [逻辑|分区7] [逻辑|分区8] … …
最不合理的分区划分方式: 主分区包围扩展分区。
比如下面的
[主|分区1] [主|分区2] [扩展分区] [主|分区4] [空白未分区空间]
|
[逻辑|分区5] [逻辑|分区6] [逻辑|分区7] [逻辑|分区8] … …
这样 [主|分区2] 和 [主|分区4] 之间的 [扩展分区] 是有自由度,但[主|分区4]后的[空白未分区空间]怎么办?除非把主分区4完全利用扩展分区后的空间,否则您想在主分区4后再划一个分区是不可能的,划分逻辑分区更不可能。虽然类似此种办法也符合一个硬盘四个主分区的标准,但这样主分区包围扩展分区的分区方法实在不可取。
六、Linux系统的硬盘分区
系统对于硬盘的需求跟主机开放的服务有关,和数据的分类与安全性有关。由于Linux是多人多任务的环境,因此很可能上面已经有很多人的数据在其中了,如果需要重新安装的话,光是搬移与备份数据就已经是很痛苦的事了,所以硬盘的分区考虑是相当重要的。同时,硬盘的规划对于Linux新手而言,那将是造成头疼的主要凶手之一,因为硬盘的分区技巧需要对于Linux文件结构有相当程度的认知之后才能够做比较完善的规划的。所以建议,大家在初学Linux系统的时候,只需要分出两个来,分别是/ 与 Swap 。
下面就来借鉴一下一般主机的分区情况
通常一般的大型主机都不会将所有的数据放置在一个硬盘分区中(就是只有一个/根目录),这有几个目的:
1)安全性:你的系统通常是在/usr/中,而个人数据则可能放置在/home当中,至于一些开机数据则放置在/etc当中。如果将所有的数据放在一起,当你的系统不小心被黑客破坏,或者不小心自己删除了一些小东西,导致系统崩溃,那么所有的资料也都跟着不见了…..这对于我们市井小民或许无所谓,再安装一次就好了,但是对于一些大型企业可不能这样,因此需要将数据分别放置于不同的硬盘分区中,这样会比较保险一些。
2)便利性:如果你需要升级你的系统的话,是否需要重新format 安装呢?有些数据例如/home里面的数据为个人用户的数据,似乎与系统无关,所以如果你将这些数据分别放置于不同的硬盘分区,则你要升级或者进行一些系统更动时,将比较有弹性。
我们在进行分区的时候,一定要考虑到这部主机的未来用途,然后根据用途去分析需要较大容量的目录,以及读写较为频繁的目录,将这些重要的目录分别独立出来而不与根目录放在一起,那当这些读写较频繁的硬盘分区有问题时,至少不会影响到根目录的系统数据,那挽救数据方面就比较容易了。
在默认的CentOS环境中,下面的目录是比较符合容量大或读写频繁的目录:
/boot
/
/usr
/home
/var
swap
不可与root分区分开的目录:/dev,/etc,/sbin,/bin,/lib,系统启动时,内核只载入一个分区,那就是/,内核启动需要加载/dev,/etc,/sbin,/bin,/lib五个目录的程序,所以以上几个目录必须和/根目录在一起。
或许可以将你的系统做成这样的分区分布:
/
/boot
/usr
/home
/var
swap
这是比较常见的硬盘分布情况,其中,
/ 根目录可以分配约 256 MB 以内;
/boot 大概在 50 MB 就可以了,因为开机档案并不大;
/var 就至少需要1GB以上,因为你的mail、proxy预设的储存区都在这个目录中,除非你要将一些设定改变。
/home 与 /usr 通常是最大的,因为你所安装的数据都是在/usr/当中,而用户数据则放置在/home当中,因此通常书上都会建议你将所剩下的硬盘空间平均分配给这两个目录。
无论如何,每部主机的环境与功能用途都不相同,自然其硬盘的分配就会不太一样,因此,上面的设定只是参考,等您将整个Linux系统全部搞明白后,尤其是Linux文件与目录的使用架构之后,那么大概就知道怎样设定您的主机最恰当
摘自:羽飞博客™