一、关于硬盘种类、物理几何结构及硬盘容量、分区大小计算
首先了解一下硬盘本身的一些信息。
1、硬盘种类、物理几何结构
硬盘的种类主要是SCSI 、IDE及目前流行的SATA等;所有一种硬盘的生产都要一定的标准;随着相应的标准的升级,硬盘生产技术也在升级;比如SCSI标准已经历了SCSI- 1 、SCSI-2、SCSI-3;其中目前咱们经常在服务器网站看到的Ultral-160就是基于SCSI-3标准的;IDE
遵循的是ATA标准,而目前流行的SATA,是ATA标准的升级版本;IDE是并口设备,而SATA是串口,SATA的发展目的是替换IDE;
硬盘的物理几何结构是由盘、磁盘表面、柱面、扇区组成,一个张硬盘内部是由几张碟片叠加在一起,这样形成一个柱体面;每个碟片都有上下表面;磁头和磁盘表 面接触从而能读取数据;
2、硬盘容量及分区大小的算法
在Linux下执行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 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
其中 heads 是磁盘面;sectors 是扇区;cylinders 是柱面;每个扇区大小是 512byte,也就是0.5K;
通过上面的例子,我们发现此硬盘有 255个磁盘面,有63个扇区,有9729个柱面;所以整个硬盘体积换算公式应该是:
磁面个数 x 扇区个数 x 每个扇区的大小512 x 柱面个数 = 硬盘体积 (单位bytes)
所以在本例中磁盘的大小应该计算如下:
255 x 63 x 512 x 9729 = 80023749120 bytes
提示:由于硬盘生产商和操作系统换算不太相同,硬盘厂家以10进位的办法来换算,而操作系统是以2进位制来换算,所以在换算成M或G 时,不同的算法结果却不相同;所以我们的硬盘有时标出的是80G,在操作系统下看却少几M;
上面例子中,硬盘厂家算法 和 操作系统算数比较:
硬盘厂家: 80023749120 bytes = 80023749.120 K = 80023.749120 M (向大单位换算,每次除以1000)
操作系统: 80023749120 bytes = 78148192.5 K = 76316.594238281 M (向大单位换算,每次除以1024)
我们在查看分区大小的时候,能用生产厂家提供的算法来简单推算分区的大小;把小数点向前移动六位就是以G表示的大小;比如 hda1 的大小约为 6.144831G ;
二、关于硬盘分区划分标准及合理分区结构
1、硬盘分区划分标准
硬盘的分区由主分区、扩展分区和逻辑分区组成;所以我们在对硬盘分区时要遵循这个标准;主分区(包括扩展分区)的最大个数是四个且扩展分区不能包围在主分 区之间,主分区(包含扩展分区)的个数由硬盘的主引导记录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-hda3 ,扩展分区由 hda5-hda10 ;此硬盘没有主分区4,所以也没有显示主分区hda4 ;但逻辑分区不可能从4开始,因为那是主分区的位置,明白了吧;而且可以看出hda3是扩展分区,逻辑分区就是从该分区划分出来的。
另外,可以将L i n u x 安装在一个或多个类型为"Linux Native"的硬盘分区,通常称为"L i n u x原始分区或主分区"。同时还需要一个类型为"Linux Swap "的分区,也叫做"L i n u x 交换分区",关于Swap,一会详细说明。
PS:Windows与Linux硬盘分区对比:
2、硬盘设备(包括移动存储设备)在Linux或其他类Unix系统的表示;
IDE 硬盘在Linux或其他类Unix系统的一般表示为 hd* ,比如hda、hdb ... ... ,我们能通过 fdisk-l 来查看;有时你可能只有一个硬盘,在操作系统中看到的却是 hdb ,这和硬盘的跳线有关;另外hdc大多表示是光驱设备;如果你有两块硬盘,大多是 hda和hdb。在这方面说的太多也无用,还是以fdisk -l 为准为好;SCSI 和SATA 硬盘在Linux通常也是表示为 sd* ,比如 sda 、sdb ... ... 以fdisk -l 为准;移动存储设备在linux表示为 sd* ,比如 sda 、sdb ... ... 以fdisk -l 为准
3、合理的规划分区
在对硬盘进行分区前,应该先弄清楚计算机担负的工作及硬盘的容量有多大,还要考虑到以下几个问题。
第一点也是最重要的一点,要知道当前安装Linux的开机管理程序(boot loader)是使用LILO(Linux Loader)的版本,因为LILO2.21及早期版本对硬盘大小有限制,如果安装LILO到1023磁道以外即 8G的空间以外,LILO就无法启动。但一些BIOS较老的机器,LINUX仍然无法突破1024磁道的限制,因此这些BIOS无法认出大于1024的硬盘空间。
还需要考虑的问题有:
◆ 是否限制用户可使用的磁盘空间大小?
◆ 在系统中需要安装哪些软件?
◆ 交换分区需要多大?
◆ 系统是否有多个硬盘?
下面,我们按系统工作性质的不同对分区的划分提出了一些建议。当然,根据实际情况,在满足系统工作需求的前提下,下面的分区大小也可以灵活的变 动。
基本工作站的分区方案
假设系统的硬盘大小是10G。
1. /boot 20M
2. Swap 128M
3. /root 9.85G
建立一个20M的/boot分区是为了避免将系统内核文件放到1024磁道以外,如果将/boot做为root分区的一个子目录,内核文件就会安 装在root分区的任何地方,因为硬盘的大小超过了8G,所以在启动时就有可能出现问题。建议将交换分区的大小设置为内存的两倍,在这里我们假设系统的内 存为64M。最后我们将硬盘的剩余空间全部分给了root分区。
Red Hat Linux 6.2 及其早期版本上的基本服务器硬盘分区方案
这里的服务器我们假设只提供几种通用的服务,如WWW服务及FTP服务等几种服务,通过telnet登录的用户数很少。假设其硬盘大小为25G。
1. /boot 20M
2. Swap 128M
3. / 10G
4. /home 13G
5. /var 2G
在硬盘的最前面创建20M大小的/boot分区,原因同上。交换分区的大小也是128M,因为内存的大小为64M。
/ ,即root分区设为10G这么大是因为其中有一个/usr目录,这个目录可能会占用很多硬盘空间,特别是在安装了X Server,运行图形界面的应用程序的时候。
/home分区是硬盘中最大的分区,这似乎与我们假设系统用户数不多有些矛盾。实际上在/home目录下确实没有几个用户目录,但在Red Hat6.2及更早的版本中,Apache服务器和wu-ftpd FTP服务器被放在了/home/httpd及/home/ftp目录中。所以这个分区这么大也是有原因的。
最后,/var目录独自占用了一个分区,因为系统的所有日志都写到了/var/log目录下,这将会占用很大的硬盘空间。如果系统日志记录得非常 详细,整个目录很快会被写满,导致系统工作呆滞。当然,可以通过系统日志后台守护程序syslogd来修改日志配置,避免发生这种情况。
Red Hat 7及以上版本的基本服务器分区方案
这种情况同前一个方案的情况相同,不同的是LINUX版本为Red Hat 7.0及其以上版本。
1. /boot 20M
2. Swap 128M
3. / 10G
4. /var 15G
与RedHat6不同,在RedHat7中HTTP服务和FTP服务的目录现在位于 /var/www/ 和/var/ftp/,因此/var分区有15G之大也就不难理解了。
多用户服务器分区方案
在这种服务器系统中,同时有多个用户通过telnet, ssh, rlogin或其方式在远程访问系统。系统中有三个35G的硬盘驱动器,总共有105G的磁盘空间 。系统中用到了RAID 5技术做数据冗余。这种情况下,管理员必须为每个用户分配磁盘空间。对RedHat 6.2及更早的版本,分区如下:
1. Disk 1:
2. /boot 20M
3. / 4G
4. /var 3GB
5. /home 27.98G
6. Disk 2:
7. swap 20MB
8. / 4GB
9. /var 3GB
10. /home 27.98GB
11. Disk 3:
12. swap 20MB
13. / 4GB
14. /var 3GB
15. /home 27.98GB
这样分区的原因:首先,Disk1上的20M /boot分区不属于任何RAID阵列,否则如果你将/boot放至RAID阵列中,以后就不能系统内核升级了。
为了方便管理,在其它两个硬盘中建立了20M的交换分区。这种服务器一般配有1G以上的内存,因此交换分区的大小不成问题。如果增大交换分区,就 会减少RAID分区空间,所以20M是足够的。RAID分区的分组如下:
◆ 1-A, 2-A, and 3-A 一起组成一个8G的 RAID 5 驱动器,做为/根目录打开。
◆ 1-B, 2-B, and 3-B 组成 6GB的 RAID 5 驱动器,做为 /var目录。
◆ 1-C, 2-C, and 3-C 组成 55.96GB RAID 5 驱动器, 做为 /home.目录。
这种分配方案总共有55.96G的空间分配给所有用户及Apache和FTP服务,在/var下用6G空间用做记录日志、邮件,这么大的空间是足 够的。
如果安装Red Hat7或以上版本,应给/var分区更大的空间,因为它同时还存放着WEB和FTP服务的两个目录。 希望你能学会这些Linux硬盘分区的最佳方案。
三、交换分区与交换文件
当程序需要的内存比电脑上拥有的物理内存还要大的时候,不管是 Windows 也好,Linux 也好,解决办法就是把存不下的东西转移到硬盘上的“虚拟内存”中去,尽管硬盘的速度比内存慢上很多,但是至少容量要大上很多。
另外,操作系统也可以把一些很久不活动的程序转移到虚拟内存中去,留出更多的主内存给需要的程序和磁盘缓冲。
Linux 在安装的时候,一般需要划出一个分区作为 Linux 的“交换分区”,作为虚拟内存内容的保存分区。
swapon -s 这个命令,可以查看当前系统的虚拟内存的情况,这条命令需要 root 来运行。
Filename Type Size Used Priority
/dev/sda3 partition 1004052 0 -1
可以看到常常看到当前的交换分区为 /dev/sda3,第 2 栏的 Type 中显示为 partition,说明这是个交换分区,那么,还有其他的 Type 吗?
当然,其实 Linux 也可以像 Windows 一样,用交换文件来保存虚拟内存的内容,这样即使你忘记划出交换分区也不要紧,而且灵活性上会更大一些。下面我们看看如何创建交换文件。
交换文件和交换分区一样,大小是固定的,比如你想要一个 1G 的交换文件,那么首先要创建一个 1G 的空白文件,我们用 dd 这个工具来完成这个任务:
dd if=/dev/zero of=/swapfile bs=1024 count=1048576
1048576 就是 1G 用 KB 表示的大小,如果你想要其他大小的文件,更改这个数字即可。
上面的命令,会在根目录下创建 swapfile 这个文件,然后,我们需要将它格式化为交换文件的格式:
mkswap /swapfile
然后把挂载上去,就可以立刻应用这个交换文件了:
swapon /swapfile
你可以运行 swapon -s 查看一下:
Filename Type Size Used Priority
/dev/sda3 partition 1004052 0 -1
/swapfile file 1048486 0 -2
多出来了一项,Type 为 file,确实是我们创建的交换文件,系统已经在使用了。
如果你想开机的时候自动挂载这个交换文件,那么还要在 /etc/fstab 中加上下面这一句:
/swapfile none swap sw 0 0
这样就 OK 了。
经常有人问,虚拟内存要设多大才合适,是主内存的几点几倍性能最好云云,其实作为一般用途来讲,1~2G 就到顶了,妄想从虚拟内存上提高系统性能,是不可能的,去买内存条才是王道。
PS:
交换分区的创建与使用
一.创建交换分区
系统内存无法存放更多数据的时候linux会自动使用交换分区,如果分区的时候没有创建交换分区,可以格式化一个分区为交换分区,然后在创建交换 分区。
mkswap /dev/hda1 将/dev/hda1格式化为交换分区
mkswap -c /dev/hda1 将/dev/hda1格式化为交换分区,并检查交换分区有无坏块
在文件中创建交换分区:
dd if=/dev/zero of=/tmp/swapfile count=65536 创建一个32M的swapfile文件
chmod 666 /tmp/swapfile 指定/tmp/swapfile文件的权限
mkswap /tmp/swapfile 将/tmp/swapfile格式化成交换分区
二.使用交换分区
swapon /dev/hda1 开启/dev/hda1分区的交换功能
swapon -v /dev/hda1 开启/dev/hda1分区的交换功能,并输出详细信息
swapon -v /tmp/swapfile 开启/tmp/swapfile文件的交换功能,并输出详细信息
swapon -s 查看开启的全部交换分区或交换文件
swapon -v -p 1 /dev/hda1 将/dev/hda1设置成最高优先级,-p选项指定优先级
swapoff -v /tmp/swapfile 关闭交换区
参考网址:
1、http://www.sudu.cn/info/html/edu/20080425/301647.html
2、http://os.51cto.com/art/200912/171215.htm
3、http://linux.ccidnet.com/art/9513/20080108/1334995_1.html
本文转自polaris1119 51CTO博客,原文链接:http://blog.51cto.com/polaris/349653,如需转载请自行联系原作者