Username: Password:

Linux Swap 空间(分区/文档)
来源: ChinaUnix博客  作者: 发布时间:2008-04-25 06:40:31


Redhat Linux Space ,add ,delete and move(假如操作步骤,看红颜色的部分就能够了,周详能够看Redhat相关的指南书)

You have two options: add a swap partition or add a swap file. It is recommended that you add a swap partition, but sometimes that is not easy if you do not have any free space available.

To add a swap partition (assuming /dev/hdb2 is the swap partition you want to add):
1. The hard drive can not be in use (partitions can not be mounted, and swap space can not be enabled). The easiest way to achieve this it to boot your system in rescue mode. Refer to Red Hat Linux Manuals Chapter 8 for instructions on booting into rescue mode. When prompted to mount the filesystem, select Skip.
Alternately, if the drive does not contain any partitions in use, you can unmount them and turn off all the swap space on the hard drive with the swapoff command.
2. Create the swap partition using parted or fdisk. Using parted is easier than fdisk; thus, only parted will be explained. To create a swap partition with parted:

* At a shell prompt as root, type the command parted /dev/hdb, where /dev/hdb is the device name for the hard drive with free space.
* At the (parted) prompt, type print to view the existing partitions and the amount of free space. The start and end values are in megabytes. Determine how much free space is on the hard drive and how much you want to allocate for a new swap partition.
* At the (parted) prompt, type mkpartfs part-type linux-swap start end, where part-type is one of primary, extended, or logical, start is the starting point of the partition, and end is the end point of the partition.

Warning
  Changes take place immediately; be careful when you type.
* Exit parted by typing quit.
3. Now that you have the swap partition, use the command mkswap to setup the swap partition. At a shell prompt as root, type the following:
mkswap /dev/hdb2
4. To enable the swap partition immediately, type the following command:
swapon /dev/hdb2
5. To enable it at boot time, edit /etc/fstab to include:
/dev/hdb2               swap                    swap    defaults        0 0
6. The next time the system boots, it will enable the new swap partition.
7. After adding the new swap partition and enabling it, make sure it is enabled by viewing the output of the command cat /proc/swaps or free.
To add a swap file:
1. Determine the size of the new swap file and multiple by 1024 to determine the block size. For example, the block size of a 64 MB swap file is 65536.
2. At a shell prompt as root, type the following command with count being equal to the desired block size:
dd if=/dev/zero of=/swapfile bs=1024 count=65536
3. Setup the swap file with the command:
mkswap /swapfile
4. To enable the swap file immediately but not automatically at boot time:
swapon /swapfile
5. To enable it at boot time, edit /etc/fstab to include:
/swapfile               swap                    swap    defaults        0 0
6. The next time the system boots, it will enable the new swap file.
7. After adding the new swap file and enabling it, make sure it is enabled by viewing the output of the command cat /proc/swaps or free.  

Removing Swap Space
To remove a swap partition:
1. The hard drive can not be in use (partitions can not be mounted, and swap space can not be enabled). The easiest way to achieve this it to boot your system in rescue mode. Refer to Red Hat Linux Manuals Chapter 8 for instructions on booting into rescue mode. When prompted to mount the filesystem, select Skip.
Alternately, if the drive does not contain any partitions in use, you can unmount them and turn off all the swap space on the hard drive with the swapoff command.
2. At a shell prompt as root, execute the following command to make sure the swap partition is disabled (where /dev/hdb2 is the swap partition):
swapoff /dev/hdb2
3. Remove its entry from /etc/fstab.
4. Remove the partition using parted or fdisk. Only parted will be discussed. To remove the partition with parted:
* At a shell prompt as root, type the command parted /dev/hdb, where /dev/hdb is the device name for the hard drive with free space.
* At the (parted) prompt, type print to view the existing partitions and determine the minor number of the swap partition you wish to delete.
* At the (parted) prompt, type rm MINOR, where MINOR is the minor number of the partition you want to remove.

Warning
  Changes take effect immediately; you must type the correct minor number.
* Type quit to exit parted.
To remove a swap file:
1. At a shell prompt as root, execute the following command to disable the swap file (where /swapfile is the swap file):
swapoff /swapfile
2. Remove its entry from /etc/fstab.
3. Remove the actual file:
rm /swapfile

Moving Swap Space
To move swap space from one location to another, follow the steps for removing swap space, and then follow the steps for adding swap space.


.............

Linux允许同时使用几个交换分区连同/或交换文档。这意味着假如您只是偶尔地另外需要一个交换空间时,您能够在当时配置一个额外的交换文档,而不是一直分配这个交换空间。
操作系统术语注释:电脑科学常常将交换[swapping](将整个进程写到交换空间)和页面调度[paging](在某个时刻,仅仅固定大小的几千字节写到交换空间内)加以区分。页面调度通常更有效,这也是Linux的做法,但是传统的Linux术语却指的是交换。
创建交换空间
一个交换文档是个普通的文档;对内核来说一点也不特别。对内核有关系的是他不能有孔,并且他是用mkswap来准备的。而且,他必须驻留在一个本地硬盘上,他不能由于实现的原因而驻留在一个通过NFS加载的文档系统中。
关于孔是重要的。交换文档保留了磁盘空间,以至于内核能够快速地交换出页面而无需做分配磁盘扇区给文档时所要做的一些事。内核仅仅是使用早已分配给交换文档的任何扇区而已。因为文档中的一个孔意味着没有磁盘扇区分配(给该文档的孔的相应部分),对内核来说就不能使用这类有孔的文档。
创建无孔的交换文档的一个好方法是通过下列命令:
$ dd if=/dev/zero of=/extra-swap bs=1024 count=1024 \
上面/extra-swap是交换文档的名字,大小由count=后面的数值给出。大小最好是4的倍数,因为内核写出的内存页面(memory pages)大小是4千字节。假如大小不是4的倍数,最后几千字节就用不上了。
一个交换分区也并没有什么特别的。您能够象创建其他分区相同地创建他;唯一的区分在于他是作为一个原始的分区使用的,也即,他不包括任何的文档系统。将交换分区标记为类型82(Linux交换分区)是个好主意;这将使得分区的列表更清楚,尽管对内核来说并不是一定要这样的。
在创建了一个交换文档或一个交换分区以后,您必须在他的开头部分写上一个签名;这个签名中包括了一些由内核使用的管理信息。这是用\cmd{mkswap}命令来做到的,用法如下:
$ mkswap /extra-swap 1024
Setting up swapspace, size = 1044480 bytes
请注意此时交换空间还没有被使用:他已存在,但内核还没有用他作为虚拟内存。您必须很小心地使用mkswap,因为他不检查这个文档或分区是否已被别人使用。您能够很容易地使用mkswap来覆盖重要的文档连同分区!幸运的是,仅仅在安装系统时,您才需要使用mkswap。
Linux内存管理程式限制每个交换空间最大约为127MB(由于各种技术上的原因,实际的限制大小为(4096-10) * 8 * 4096 = 133890048$ 字节,或127.6875兆字节)。然而,您能够同时使用多至16个交换空间,总容量几乎达2GB。
交换空间的使用
一个已初始化的交换空间是使用命令swapon投入正式使用的。该命令告诉内核这个交换空间能够被使用了。到交换空间的路径是作为参数给出的,所以,开始在一个临时交换文档上使用交换的命令如下:
$ swapon /extra-swap
通过把交换空间列入/etc/fstab文档中就能被自动地使用了。
/dev/hda8 none swap sw 0 0
/swapfile none swap sw 0 0
启动描述文档会执行命令swapon ?a,这个命令会启动列于/etc/fstab中的任何交换空间。因此,swapon命令通常仅用于需要有外加的交换空间时。
您能够用free命令监控交换空间的使用情况。他将给出已使用了多少的交换空间。
total used free shared buffers
Swap: 32452 6684 25768
输出的第一行(Mem:)显示出物理内存的使用情况。总和(total)列中并没有显示出被内核使用的内存,他通常将近一兆字节。已用列(used column)显示出已用内存的总和(第二行没有把缓冲算进来)。空闲列(free column)显示了任何未被使用的空闲内存。共享列(shared column)显示出了被几个进程共享的内存的大小;共享的内存越多,情况就越好。缓存列(buffer column)显示出了当前磁盘缓存的大小。已缓冲列(cached column)显示出了已使用的缓存的大小。
最后一行(Swap:)显示出了和交换空间相应的信息。假如这一行的数值都是零,表示您的交换空间没有被击活。
也可通过用top命令来获得同样的信息,或使用proc文档系统中的文档/proc/meminfo 。通常要取得指定交换空间的使用情况是困难的。
能够使用命令swapoff来移去一个交换空间。通常没有必要这样做,但临时交换空间除外。一般,在交换空间中的页面首先被换入内存;假如此时没有足够的物理内存来容纳他们又将被交换出来(到其他的交换空间中)。假如没有足够的虚拟内存来容纳任何这些页面,Linux就会波动而不正常;但经过一段较长的时间Linux会恢复,但此时系统已不可用了。在移去一个交换空间之前,您应该检查(例如,用free)是否有足够的空闲内存。
任何由swapon ?a而自动被使用的任何交换空间都能够用swapoff ?a命令移去;该命令参考/etc/fstab文档来确定移去什么。任何手工配置使用的交换空间将始终能够被使用。
有时,尽管有许多的空闲内存,仍然会有许多的交换空间正被使用。这是有可能发生的,例如假如在某一时刻有进行交换的必要,但后来一个占用很多物理内存的大进程结束并释放内存时。被交换出的数据并不会自动地交换进内存,除非有这个需要时。此时物理内存会在一段时间内保持空闲状态。对此并没有什么可担心的,但是知道了是怎么一回事我们也就放心了。
许多操作系统使用了虚拟内存的方法。因为他们仅在运行时才需要交换空间,以即决不会在同一时间使用交换空间,因此,除了当前正在运行的操作系统的交换空间,其他的就是一种浪费。所以让他们共享一个交换空间将会更有效率。这是可能的,但需要有一定的了解。在HOWTO技巧文档中含有怎样实现这种做法的一些建议。
有些人会对您说需要用物理内存的两倍容量来分配交换空间,但这是不对的。下面是合适的做法:
。估计您的总内存需求。这是某一时刻您所需要的最大的内存容量,也就是在同一时刻您想运行的任何程式所需内存的总和。通过同时运行任何的程式您能够做到这一点。
例如,假如您要运行X,您将给他分配大约8MB内存,gcc需要几兆字节(有些文档需要异呼寻常的大量的内存量,多至几十兆字节,但通常约4兆字节应该够了),等等。内核本身要用大约1兆字节、普通的shell连同其他一些工具可能需要几百千字节(就说总和要1兆字节吧)。并无需进行精确的计算,粗率的估计也就足够了,但您必须考虑到最坏的情况。
注意,假如会有几个人同时使用这个系统,他们都将消耗内存。然而,假如两个人同时运行一个程式,内存消耗的总量并不是翻倍,因为代码页连同共享的库只存在一份。
Free连同ps命令对估计所需的内存容量是很有帮助的。
对第一步中的估计放宽一些。这是因为对程式在内存中占用多少的估计通常是不准的,因为您很可能忘掉几个您要运行的程式,连同,确信您还要有一些多余的空间用于以防万一。这需几兆字节就够了。(多分配总比少分配交换空间要好,但并无需过分这样以至于使用整个硬盘,因为不用的交换空间是浪费的空间;参见后面的有关增加交换空间。)同样,因为处理数值更好做,您能够将容量值加大到整数兆字节。
基于上面的计算,您就知道了您将需要总和为多少的内存。所以,为了分配交换空间,您仅需从所需总内存量中减去实际物理内存的容量,您就知道了您需要多少的交换空间。(在某些UNIX版本中,您还需要为物理内存的映像分配空间,所以第二步中算出的总量正是您所需要的交换空间的容量,而无需再做上述中的减法运算了。)
假如您计算出的交换空间容量远远大于您的物理内存(大于两倍以上),您通常需要再买些内存来,否则的话,系统的性能将很低。
有几个交换空间是个好主意,即使计算指出您一个都无需。Linux系统常常动不动就使用交换空间,以保持尽可能多的空闲物理内存。即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面。这能够避免等待交换所需的时间:当磁盘闲着,就能够提前做好交换。
能够将交换空间分散在几个硬盘之上。针对相关磁盘的速度连同对磁盘的访问模式,这样做能够提高性能。您可能想实验几个方案,但是您要认识到这些实验常常是很困难的。不要相信其中一个方案比另一个好的说法,因为并不总是这样的。  
高速缓冲
和访问(真正的)的内存相比,磁盘[3]的读写是很慢的。另外,在相应较短的时间内多次读磁盘同样的部分也是常有的事。例如,某人也许首先阅读了一段e-mail消息,然后为了答复又将这段消息读入编辑器中,然后又在将这个消息拷贝到文档夹中时,使得邮件程式又一次读入他。或考虑一下在一个有着许多用户的系统中ls命令会被使用多少次。通过将信息从磁盘上仅读入一次并将其存于内存中,除了第一次读以外,能够加快任何其他读的速度。这叫作磁盘缓冲(disk buffering),被用作此目的的内存称为高速缓冲(buffer cache)。
不幸的是,由于内存是一种有限而又不充足的资源,高速缓冲不可能做的很大(他不可能包容要用到的任何数据)。当缓冲充满了数据时,其中最长时间不用的数据将被舍弃以腾出内存空间用于新的数据。
对写磁盘操作来说磁盘缓冲技术同样有效。一方面,被写入磁盘的数据常常会很快地又被读出(例如,原代码文档被保存到一个文档中,又被编译器读入),所以将要被写的数据放入缓冲中是个好主意。另一方面,通过将数据放入缓冲中,而不是将其立即写入磁盘,程式能够加快运行的速度。以后,写的操作能够在后台完成,而不会拖延程式的执行。
大多数操作系统都有高速缓冲(尽管可能称呼不同),但是并不是都遵守上面的原理。有些是直接写(write-through):数据将被立即写入磁盘(当然,数据也被放入缓存中)。假如写操作是在以后做的,那么该缓存被称为后台写(write-back)。后台写比直接写更有效,但也容易出错:假如机器崩溃,或突然掉电,或是软盘在缓冲中等待写的数据被写入软盘之前被从驱动器中取走,缓冲中改变过的数据就被丢失了。假如仍未被写入的数据含有重要的薄记信息,这甚至可能意味着文档系统(假如有的话)已不完整。
由于上述原因,在使用适当的关闭过程之前,绝对不要关掉电源(见第六章),不要在卸载(假如已被加载)之前将软盘从驱动器中取出来,也不要在任何正在使用软盘的程式指示出完成了软盘操作并且软盘灯熄灭之前将软盘取出来。sync命令倾空(flushes)缓冲,也即,强迫任何未被写的数据写入磁盘,可用以确定任何的写操作都已完成。在传统的UNIX系统中,有一个叫做update的程式运行于后台,每隔30秒做一次sync操作,因此通常无需手工使用sync命令了。Linux另外有一个后台程式,bdflush,这个程式执行更频繁的但不是全面的同步操作,以避免有时sync的大量磁盘I/O操作所带来的磁盘的突然冻结。
在Linux中,bdflush是由update启动的。通常没有理由来担心此事,但假如由于某些原因bdflush进程死掉了,内核会对此作出警告,此时您就要手工地启动他了(/sbin/update)。
缓存(cache)实际并不是缓冲文档的,而是缓冲块的,块是磁盘I/O操作的最小单元(在Linux中,他们通常是1KB)。这样,目录、终极块、其他文档系统的薄记数据连同非文档系统的磁盘数据都能够被缓冲了。
缓冲的效力主要是由他的大小决定的。缓冲大小太小的话等于没用:他只能容纳一点数据,因此在被重用时,任何缓冲的数据都将被倾空。实际的大小依赖于数据读写的频次、相同数据被访问的频率。只有用实验的方法才能知道。
假如缓存有固定的大小,那么缓存太大了也不好,因为这会使得空闲的内存太小而导致进行交换操作(这同样是慢的)。为了最有效地使用实际内存,Linux自动地使用任何空闲的内存作为高速缓冲,当程式需要更多的内存时,他也会自动地减小缓冲的大小。
在Linux中,您无需为使用缓冲做任何事情,他是完全自动处理的。除了上面所提到的有关按照适当的步骤来关机和取出软盘,您不用担心他。


喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅