当前所在位置:FreeBSD使用大全>> |
FreeBSD连载(61):其他内核设置选项(2) |
---|
作者:王波 |
磁盘设置 FreeBSD提供了对磁盘上的文件系统和交换空间的管理能力,可以供使用者进行设置。 FreeBSD的使用者可以设置对用户的磁盘空间设置,建立伪磁盘设备等,以更好的方式管理磁盘和文件。 磁盘空间限制 FreeBSD提供了强大的系统管理功能,除了可以在/etc/login.conf中使用登录类别对用户占用的处理器资源进行限制之外,还可以对用户占用的磁盘资源进行限制。用户磁盘空间的限制是通过quota来完成的。这样就可以控制用户对硬盘资源的使用,防止硬盘空间被无意或恶意用光而造成系统故障。这对于提供公共访问的计算机比较重要。quota需要内核支持,在编译内核时必须加入选项: options QUOTA 接下来是决定对哪个文件系统使用quota来限制用户磁盘资源,要更改/etc/fstab中该文件系统对应的行,从而更改分区安装时使用的参数,例如要对wd0s1e进行限制,则更改fstab中的对应行为: /dev/wd0s1e /usr ufs rw,userquota,groupquota 1 1 然后更改/etc/rc.conf中的有关quota的设置check_quotas的值为”YES”,使用新内核重新启动计算机之后,就可以使用下列命令打开用户磁盘设置。 # quotacheck -av # repquota -a 这些命令在第一次启动支持quota的系统时使用,用来检查磁盘上的quota状态。如果一切正常,就可以使用edquota来更改每个用户的磁盘限制了。 # edquota -u user1 # edquota -p user1 user2 user3 第一个命令就为更改user1的磁盘空间限制,第二行将user1的quota限制复制给user2和user3。 日常维护要使用quota命令,例如来检查user1的quota设置可以使用下面的命令。 # quota -v user1 为了避免出现问题,需要每天执行一次quotacheck命令,来检查全部设定是否正常,因此这个命令可以放入/etc/daily或crontab中,定期执行。 # quotacheck -a 伪磁盘设备 交换设备的数量是受内核设置的限制,内核中的NSWAPDEV的值就确定了最多可使用的交换设备的数量,而NO_SWAPPING选项可以用来屏蔽任何交换设备。 options NSWAPDEV=20 #options NO_SWAPPING pseudo-device vn 4 pseudo-device ccd 4 当增加了交换设备的数量之后,就能增加交换空间,更好的发挥FreeBSD的虚拟内存机制。 FreeBSD支持的vn伪磁盘设备可用于设置交换文件。缺省内核支持的vn伪设备数量为一个,因此仅可以设置一个交换文件。一般仅需要更改/etc/rc.conf文件中的swapfile选项为交换文件的名字,系统自动使用vnconfig命令来将文件和虚拟设备联系在一起。 为了增加对多个交换文件或多个镜像文件的支持,可以增加内核中伪设备vn的数量,然后还需要创建相应数量的v n设备。此后就可以使用这多个伪磁盘设备,并使用vnconfig命令管理多个磁盘镜像文件或交换文件。 除了伪磁盘设备vn之外,FreeBSD系统还提供一个将多个磁盘文件系统映射为一个磁盘的伪设备ccd,这样原有的小磁盘分区就能联合起来,形成一个大的文件系统。ccd要求内核中支持ccd这个伪设备,当内核中支持了cc d伪设备之后,就可以通过设备文件/dev/ccd0c等来使用这个伪磁盘了(缺省/dev下只有ccd0的设备文件,可以根据需要建立其他的设备文件)。 将多个磁盘分区与单一的ccd设备联系起来,还需要使用ccdconfig进行配置,最基本的ccdconf ig使用例子为: # ccdcofnig -c ccd1 0 0 /dev/da0s2g /dev/da1s2e 这个例子使用-c参数对ccd1设备进行配置,指出ccd1由/dev/da0s2g和/dev/da1s2e两个分区联合组成。如果这两个磁盘分区都是100M大小,那么新的设备/dev/ccd1c就有200M大小。然后就可以在ccd1设备上建立文件系统,并使用这个设备了。 # newfs /dev/ccd1c # mount /dev/ccd1c /mnt 这是一个对ccd进行配置并使用的最简单的例子,这里没有对ccdconfig命令中紧跟ccd设备的两个数字参数的意义进行解释。而通过选择这两个参数的不同数值,能将多个磁盘文件系统采用不同的RAID方式映射为单个设备。 RAID为冗余磁盘阵列的简称,它意味着物理上使用多个磁盘,而逻辑上却只有一个磁盘设备。RAID之所以流行,是因为它使用了分段(strip)和冗余的概念,就是说通过RAID映射的逻辑磁盘上的数据是以分段的方式保存的,例如一个文件的第一段数据保存在第一个物理磁盘上,第二段数据保存在第二个物理磁盘上,依次类推。这样在存取这一个文件上的连续数据时,多个磁盘可以同时进行存取操作,因此增加了磁盘访问速度。而冗余则是物理磁盘的空间大于逻辑磁盘的大小,通过物理磁盘上多余的磁盘空间,保存冗余信息,这样一旦多个磁盘中的某一些出现问题,数据能通过冗余数据得到恢复,而不会丢失。 按照不同的冗余组织方式,RAID被分为不同的级别。最简单的RAID称为RAID 0,这个级别中没有冗余,多个磁盘只是以分段的方式组织起来,由于使用分段的方式存取,可以同时访问这两个磁盘,因此存取单个文件的速度会有所改善。更高一级的RAID级别为RAID 1,它同时使用两个磁盘,每个磁盘都是另一个磁盘的镜像,这样一旦一个磁盘出现问题,还可以在另一个磁盘找到数据,保证了数据完整性,但这样设置,有一半的磁盘空间都用做了冗余,浪费了磁盘空间。此外还有RAID 3级别,至少要使用3个物理磁盘,前两个磁盘中分段存储数据,第三个磁盘的冗余空间中并不是直接保存原有的数据,而是保存根据前两个磁盘中对应分段中的数据进行计算得到一个校验和。在前面某一个磁盘被破坏后能通过冗余磁盘中保存的校验和来恢复原有数据。由于RAID 3中校验和是单独保存在一个物理磁盘上的,不能充分发挥分段存取的优势,因此RAID 5中将校验和与其他数据一起分段、分布保存在各个磁盘上,提供了更好冗余效果。因此当前常用的RAID级别为RAID 0, RAID 1和RAID 5,可根据不同的需要进行选择使用。 当在ccdconfig中使用两个0作为参数来设置ccd伪设备时,ccd是以最普通的直接连接方式来连接多个磁盘的,当数据写满第一个磁盘后,才接着写入第二个磁盘,这里没有使用任何分段存储策略,因此这是一种不完善的RA ID 0方式。然而也可以设置ccd以使用分段存储策略,以大来存取速度的优势,这就需要设置分段存储中的段的大小,即设置交错因子的大小,因此就需要改变第一个数字参数,例如: # umount /mnt # ccdconfig -u ccd1 # ccdconfig -c ccd1 32 0 /dev/da0s2e /dev/da1s2g 上面第一条命令是卸载已安装的ccd文件系统,第二条命令是将原有的ccd1设备释放出来,使用这两条命令是因为前面操作中已经将ccd1设置过并安装到文件系统中了。第三条命令为重新设置ccd1的命令,其参数中紧随ccd 1设备的参数设置为32,这个参数代表交错因子为32个磁盘块,即数据每隔32个磁盘块大小,进行分段保存到不同的磁盘上,显然前面的参数设置为0表示不进行分段存储。 由于ccd使用的磁盘设备为预分配的磁盘分区空间,那么这些分区的大小很可能不一致。当一个磁盘设备用光,而另一个较大的设备还有空余的时候,分段策略就不再有效了。此时ccd可以有两种选择,一个是尽量利用磁盘空间,必要时不再进行分段存储,顺序存储数据;另一种选择是不使用这些不能进行分段存储的空间,以保证分段存储带来的优势。当cc d命令的第二个数字参数设置为0时,将尽量利用磁盘空间,因此就ccd伪设备就混合使用分段存储和顺序存储。但也可以将其设置为2,这样ccd只使用分段存储策略,忽略分区不一致的空间。推荐在建立磁盘文件系统时为ccd划分大致相等的空间,这样就可以充分利用分段带来的好处,并且不浪费磁盘空间。 当使用分段存储之后,理论上在两个磁盘上同时分段存储,存取速度可以加快。这种速度的提高是针对单次数据存取而言的,例如在读取一个大文件时,ccd可以同时从两个磁盘读取。可以看出ccd所作只是改变数据存取的位置,通过将可能会同时访问的数据放置到可以同时访问的多个磁盘上,来提高存取速度。然而而由于ccd是使用软件方式实现的分段,软件方式不能提高磁盘I/O的硬件限制,而高负荷的服务器,同时会有多个进程对多个磁盘进行I/O操作,ccd的作用就不太明显了。此时使用硬件RAID的方式更为有效。 FreeBSD支持DPT的硬件RAID卡,很多服务器附带的RAID卡均是OEM这家厂商的产品,虽然它们使用其他厂商的商标,但实质还是同一个厂家的产品。因此在使用RAID卡时,需要检查其手册或卡上的芯片标识,判断其是否为OEM产品,以获得RAID卡的真实型号。 此外,还有一些SCSI-to-SCSI的RAID卡,因此只要该卡使用SCSI控制芯片为FreeBSD所支持,该卡就能在FreeBSD下使用。 虽然ccd设备能够提高存取速度,但对于建立交换磁盘空间意义不大,一般也并没有必要将交换空间建立在ccd 设备上。这是因为FreeBSD对交换设备本身也采用了交错存取的策略,如果在多个磁盘上设定了多个交换空间,系统会自动使用交错方式使用交换空间,而不必依赖ccd设备的帮助。 对于IDE磁盘,尤其对于连接在同一条IDE线上的IDE磁盘,使用分段策略是无益的。因为同一条IDE总线上不能进行并发存取数据,分段存储反而影响速度。即使是连接在两个IDE总线上的两个IDE磁盘,由于IDE磁盘的存取十分占用CPU的处理时间,因此分段存储带来的益处也极为有限,只有SCSI磁盘才能充分发挥分段存储的带来的好处。 ccd也支持RAID 1,这种方式又称为磁盘镜像方式,主要用于保护磁盘数据不会因为偶然损坏而丢失数据,但同时多使用一倍的磁盘空间。此时需要将ccdconfig中的第二个数字参数设置为4,它将强制使用相同大小的各个物理磁盘的空间并使用RAID 1方式。当前的ccd还不支持RAID 5。 # ccdconfig -c ccd1 32 4 /dev/da0s2e /dev/da1s2g 虽然ccd能够支持RAID 1,但通常并不使用它来进行RAID 1。主要原因是ccd并没有提供相应的软件工具,使得能够在系统出现问题时,能从镜像磁盘中恢复出数据。由于ccd设备和物理磁盘的存储格式存在差异,并不能直接安装上ccd镜像磁盘其中的一个,要恢复存储的数据就需要其他工具的帮助。由于ccd本身并没有提供这种工具,就只能依靠从原始磁盘上读取数据的方式恢复,就使得恢复数据比较困难,所以很少有使用者真正利用ccd来进行磁盘镜像。 如果需要使用RAID 1以增强系统的可靠性,可以考虑使用vinum,这个软件使用一个内核可加载模块,能提供RAID 0、RAID 1和RAID 5,但由于版权的原因(产生校验和的算法被其专利保护),其中的RAID 5代码没有被直接放入FreeBSD系统中,随同FreeBSD一起提供的vinum只提供RAID 0和RAID 1能力。由于ccd用于RAID 0更容易,而vinum提供了相当完善的RAID 1功能,因此习惯上使用ccd来提供RAID 0,而使用vinum提供RAID 1。具备RAID 5能力的vinum版本可以从Cybernet 公司获得(http://www.cybernet.com),或者与vinum的开发者联系获得测试版。vinum 是一个相当复杂的软件,这里就不再讨论其设置和使用方法了。 当设置好ccd之后,就可以将其配置放入配置文件中。使用ccdconfig -g命令可以将当前的配置显示出来,把这些设置放入/etc/ccd.conf中之后,使用ccdconfig -C将直接读取这个设置文件,来设置ccd的各个设备,启动时也将自动执行这个设置任务。 # ccdconfig -g > /etc/ccd.conf 由于ccdconfig及vinum会直接和内核中的伪设备交谈,因此使用它们具备一定的危险性,对它们进行设置时就有造成系统当机的可能性。因此进行设置不要运行其他进程,最好进入单用户状态进行操作,在设置完毕之后,系统就会正常运行了。如果在设置时连续出现当机问题,可以尝试改变设置时使用的ccd设备及其顺序,例如本来使用ccd0 的改变为使用ccd1,再进行重新配置,以避开ccd驱动中可能存在的问题。 非标准配置 标准系统内核配置均列在配置文件LINT中,这对于绝大多数情况是足够的。然而很多新特性并没有包括在这些标准内核配置中,如果要使用这些独立特性,就需要单独安装这些非标准配置。 在FreeBSD的开发模式中,可以有任意多个项目组,这些项目组开发的结果要合并到正式的FreeBSD源码中的时候,就必须被FreeBSD core team认可。与Linux的开发方式相比,这种方式较为保守。因此虽然FreeBSD中能够支持很多种特性,但很多都没有包括在FreeBSD的正式版本中。因此使用者要了解Free BSD具备的其他新特性,就必须检查标准配置之外的各种配置。今天的非标准配置,可能就是明天的标准配置。 在FreeBSD的主页中,介绍了基于FreeBSD的各种商业和自由的开发计划,例如System V系统防真功能、实现IPv6和IPSec的KAME计划等。 除了正在开发的功能之外,新特性不能被合并到标准配置中的另一个原因是版权原因,很多软件有较严格的版权声明,不能直接放到FreeBSD系统中。另一个原因是FreeBSD的核心小组认为这个特性没有太大的需求,不需要被支持。 未完,待续。。。 |
来源:http://freebsd.online.ha.cn/ |