Linux通用系统优化大全(4)

在安装系统之前,您就需要对硬盘做好恰当的规划。划分一定的文件系统,不仅仅是系统本身的需要,而且在安全层面上也十分有意义。在Linux系统中,我们可以自由地组织磁盘分区。一个优化的分区策略,可以很好地改进Linux系统的性能,减少磁盘碎片,提高磁盘I/O能力。根据磁盘的特点,我们知道越是靠磁盘外部的柱面,旋转越快,而且每次旋转时,磁盘读写头可以覆盖较多的区域,也就意味着靠外部的柱面可以得到较好的性能。所以在分区时,我们应该考虑将访问频率高的,对系统性能影响相对较大的分区置于磁盘的靠外部分。同时,为了减少磁盘碎片,应将内容经常改变的目录放在单独的分区。从方便备份数据的角度考虑,因为很多备份工具对整个分区进行备份的效率要高,所以我们应将Linux系统的几个主要的目录作为单独的文件系统,为它们各自分配一个区。推荐的分区策略如图一:

在上图中,磁盘还有一部分未分区的空间,为什么不在安装系统时,将整个磁盘分区呢?现在的硬盘空间比较大,而在安装系统时,也许你所安装的文件加上以后增长所需要的空间用不到整个磁盘存储空间。保留一部分未分区空间,当以后有新的需要时,就可以用fdisk重新将之分区。在分区时,需要注意的是,根据系统将来运行的需要或过去的经验来估计各个分区的大小,以免将来空间不够。

/dev/hda5 swap swap defaults,pri=5 0 0

/dev/hdc5 swap swap defaults,pri=5 0 0

当然,如果你的系统内存足够大,而你的系统又远远用不了那么多的内存,那也就用不到什么虚存了。分区时你就可以考虑去掉交换分区。不过作为一个Linux服务器,即使你的内存足够大,还是应该设置交换分区。如果有多个硬盘的话,可以在每个硬盘上各开 swap 分区,另外,建议 swap 分区的大小为物理内存的两倍。

2、使用hdparm改善Linux系统性能

如果你的Linux系统运行于IDE硬盘,可以使用hdparm工具来提高磁盘I/O的性能。不过使用hdparm要小心,因为可能破坏硬盘上的数据。所以在使用hdparm之前,仔细阅读你的硬盘手册。根据你具体的硬盘规格来使用相应的hdparm开关参数。对一块UltraATA/66

EIDE 硬盘,其控制芯片支持多 PIO 模式和DMA,我们使用以下命令来调谐磁盘性能:

# /sbin/hdparm -x66 -d1 -u1 -m16 -c3 /dev/hda

选项说明:

① c3 :就是把硬盘的16位格式转换为32位模式(32-bit mode w/sync)。控制数据如何从pci总线传递到控制器。

② m16 :改变硬盘的多路扇区的读功能,-m16可以使得硬盘在一次i/o中断中读入16个扇区的数据(据具体硬盘而定)。

③ d1:打开DMA模式。

④ x66 :在支持UDMA-capable的硬盘中,这个参数可以支持双DMA通道的数据传输模式。

⑤ u1 :Linux在处理磁盘中断时,可以unmask其他的中断或者响应其他中断相关的任务。

查看以上的更改情况可以使用命令:

# /sbin/hdparm /dev/hda

测试磁盘I/O性能可以使用命令:

# /sbin/hdparm -tT /dev/hda

如果磁盘的性能有改进的话,可以使用以下命令来保存设置:

# /sbin/hdparm -k1 /dev/hda

3、Linux下使用软RAID

RAID(磁盘冗余阵列)是通过将数据分布在多个磁盘上来增强磁盘性能和可靠性的技术。如果你的系统没有硬件RAID控制器的话,在Linux下可以通过软件来实现RAID。RAID有很多的级别,不同的级别对硬件有不同的要求,相应也会得到不同的性能和可靠性。RAID0为数据分割,数据块被交替写到磁盘,可以得到最好的读写性能,但是不提供数据冗余。RAID1为磁盘镜像,写到磁盘1中的一切也写到磁盘2中,从任何一个磁盘都可以读取。RAID3除了数据分割之外,还指定一个磁盘驱动器来存储奇偶信息。

在LINUX下通过软件来实现RAID, 需要LINUX的内核支持,可以通过编译新内核来添加对RAID的支持。然后还需编译并安装 raidtools

软件包。raidtools 是可以初始化、启动、停止及控制 RAID 阵列的用户级工具。下面是我们用两块IDE硬盘在LINUX内核2.4上实现RAID0的方法。

设置分区 使用RAID0至少需要两个分区,它们位于不同的磁盘。最好做RAID0的两个分区有相同的大小。创建分区时,将分区类型指定为 "FD"。以使 Linux 内核能将它们识别为 RAID 分区,这样,这些分区就可在每次引导时自动被检测并启动。如果您没有以这种方式标记 RAID 分区,则在每次引导之后,必须首先输入 "raidstart --all" 才能挂载 RAID 阵列。我们做成RAID0的两个分区为hda5和hdc5。

编辑/etc/raidtab文件 创建/etc/raidtab文件以描述RAID阵列的配置信息。Linux 内核使用这些信息在引导时自动检测并启动 RAID 阵列,因此必须对创建的每个 RAID 阵列进行这种配置。将分区hda5和hdc5组成md0 RAID0阵列的配置文件如下:

raiddev /dev/md0

raid-level 0

nr-raid-disks 2

persistent-superblock 1

chunk-size 32

device /dev/hda5

raid-disk 0

device /dev/hdc5

raid-disk 1

在raidtab文件中,"raiddev" 条目指明要创建的 RAID 阵列;"nr-raid-disks"

指定阵列中的磁盘数目;"persistent-superblock" 设置为 1,告诉 raid 工具何时创建该卷;

"chunk-size" 以K字节指定 RAID0 使用的块大小;

最后,要指定的是组成该阵列的设备即分区。

创建文件系统使用命令"# mkraid /dev/md0" 命令初始化/dev/md0分区,同时将启动md0 RAID0阵列。接下来,即可在md0上创建你想要得文件系统。我们在Linux服务器上使用的是Reiserfs日志文件系统,创建的命令为"# mkreiserfs /dev/md0"。

这样,就可以像其它文件系统那样来加载新创建的基于RAID0的文件系统了。

4 使用elvtune调谐磁盘I/O

在Linux内核2.4以后的版本中,可以通过磁盘I/O的调度操作,来控制磁盘I/O的响应时间和吞吐量。通过调整I/O请求在队列中的最大等待时间,可以在响应时间和吞吐量之间调谐。如果要求较少的响应时间,那么吞吐量将降低,反之,较长的响应时间则可以得到较大的吞吐量。可以使用工具"/sbin/elvtune"来改变最大的响应时间值。使用方法如下:

查看当前的设置

# /sbin/elvtune /dev/hda1

修改当前的配置

# /sbin/elvtune -r 2000 -w 4000 /dev/hda1

其中-r参数针对读操作,-w参数针对写操作.

可以通过命令"iostat -d -x

/dev/hda1"得到的平均信息(包括平均请求大小和平均队列长度)来监视以上I/O配置的效果,并调整配置,以得到最佳的性能。一般来讲,对于读写频繁,但操作的数据量较少的Linux服务器,且对实时性要求较高,那么可以将参数调小。反之如果对于读写不频繁,但要求具有较大的吞吐量的Linux服务器,可以将参数调大,以获得较大的吞吐量。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/dcda318075b7aacaa10198f0e081dbb4.html