RHEL6基础二十六之Swap分区创建和管理

交换分区类似于Windows系统中的虚拟内存,能够在一定程度上缓解物理内存不足的问题。虚拟内存并不是等到物理内存用尽了才使用的,是否尽量的使用或不使用swap,在内核空间有一个参数控制。

[root@justin ~]# cat /proc/sys/vm/swappiness
60
[root@justin ~]#

swappiness=0 的时候表示最大限度使用物理内存,然后才是swap空间;

swappiness=100 的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
通过修改swappiness值来决定swap和物理内存使用情况

当达到这个值时,系统会将内存中不经常调用、CPU不经常处理的数据转移到交换分区中,以腾出更多的内存空间让常用的程序使用。Red Hat(红帽官方)推荐交换分区的大小应当与系统物理内存的大小保持线性比例关系。不过在小于2GB物理内存的系统中,交换分区大小应该设置为内存大小的 两倍,如果内存大小多于2GB,交换分区大小应该是物理内存大小加上2GB。其原因在于,系统中的物理内存越大, 对于内存的负荷可能也越大在32位的Linux系统中,每一个交换分区空间最大不能超过2GB,而且同时启用的交换分区数量最多只能有32个。64位系统没有这个限制。

配置交换分区空间也就是要指定用哪个分区作为交换分区。在用fdisk命令进行分区时,所有的分区默认使用的文件系统类型为EXT4,如果要将某个分区作为交换分区,则首先必须更改该分区的类型。
在fdisk命令中,使用“t”指令可以更改分区的类型,只要依次指定分区序号及更改后分区类型ID标记号即可。如果不知道分区类型对应的ID号,可以输入“l”指令查看各种分区类型所对应的ID标记号

Command (m for help): l
 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris   
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx    
 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt

Linux系统中最常用的两种文件系统EXT4的ID标记号为83、swap的ID标记号为82(十六进制数)

格式化成专门的swap文件系统不能使用先前的mkfs格式化命令,要创建交换文件系统,必须使用专门的mkswap命令

wKioL1ZZRPWyYmpHAAFON5ldynE046.png


total used free shared buffers cached
Mem(物理机上内存状况 总内存 已用内存 未用内存 共享的内存 用于缓冲的(通常是为了写操作设定的) 用于缓存的(通常是为了读操作设定的)
-/+ buffers/cache
表示真正意义上的已用内存空间大小(减去缓存缓冲) 表示真正意义上的未用空间(加上缓存缓冲)


Swap(交换分区大小及使用状况





系统的可用内存应该看第二行-/+ buffers/cache数据,因为第一行的used包含了系统使用的buffer及cache,而free则没包含buffer及cache,这部分也是可以使用的部分.如上所示284556为真正的系统使用内存情况,而727792为系统真正的可用内存情况.

buffer与cache的差别:

A buffer is something that has yet to be "written" to disk.

A cache is something that has been "read" from the disk and stored for later use.

buffer:  

   缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据

的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据

时,速度快的设备的操作进程不发生间断。

cache:

       高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于

CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期, Cache中保存

着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调

用,这样就减少了CPU的等待时间,提高了系统的效率。Cache又分为一级Cache(L1 Cache)

和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现

在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。

       当你读写文件的时候,Linux内核为了提高读写性能与速度,会将文件在内存中进行缓存,

这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会

自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存会很少。

其实这缓存内存(Cache Memory)在你需要使用内存的时候会自动释放,所以你不必担心没有

内存可用。


swap分区添加

一、使用分区的方式

1.直接安装系统的时候在文件系统类型里选择swap添加分区

2.如果安装系统时候忘记添加swap分区,通过如下步骤添加:

这里直接把上次创建的/dev/sdb1修改为swap分区

[root@justin ~]# fdisk /dev/sdb
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
Command (m for help): p
Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 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: 0x9adeb999
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         393     3156741   83  Linux
/dev/sdb4             394        1044     5229157+   5  Extended
/dev/sdb5             394         786     3156741   83  Linux
/dev/sdb6             787        1044     2072353+  83  Linux
Command (m for help): t     ;修改文件系统类型
Partition number (1-6): 1   ;指sdb1分区
Hex code (type L to list codes): 82   ;swap分区ID
Changed system type of partition 1 to 82 (Linux swap / Solaris)
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.            ;因为之前挂载了,最好修改钱卸载掉
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[root@justin ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 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: 0x9adeb999
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         393     3156741   82  Linux swap / Solaris
/dev/sdb4             394        1044     5229157+   5  Extended
/dev/sdb5             394         786     3156741   83  Linux
/dev/sdb6             787        1044     2072353+  83  Linux
[root@justin ~]# free
             total       used       free     shared    buffers     cached
Mem:       1030796     113716     917080          0      17400      58992
-/+ buffers/cache:      37324     993472
Swap:      2097144          0    2097144
[root@justin ~]# mkswap /dev/sdb1
/dev/sdb1: 设备或资源忙
[root@justin ~]# umount /dev/sdb1
[root@justin ~]# mkswap /dev/sdb1   ;格式化为swap分区
Setting up swapspace version 1, size = 3156736 KiB
no label, UUID=b02fa6eb-b2ff-445b-a22a-9789263c729b
[root@justin ~]# swapon /dev/sdb1    ;激活swap分区
[root@justin ~]# free
             total       used       free     shared    buffers     cached
Mem:       1030796     115984     914812          0      17412      59012
-/+ buffers/cache:      39560     991236
Swap:      5253876          0    5253876
[root@justin ~]# swapon -s     ;显示swap分区列表
Filename                Type        Size    Used    Priority
/dev/sda3                               partition   2097144 0   -1
/dev/sdb1                               partition   3156732 0   -2
[root@justin ~]# vim /etc/fstab
/dev/sdb1               /mnt/sdb1               swap    defaults        0 0
[root@justin ~]# swapon -a          ;加载swap分区
[root@justin ~]# swapoff /dev/sdb1  ;卸载swap分区
[root@justin ~]# free
             total       used       free     shared    buffers     cached
Mem:       1030796     116416     914380          0      17276      61604
-/+ buffers/cache:      37536     993260
Swap:      2097144          0    2097144
[root@justin ~]# swapon /dev/sdb1
[root@justin ~]# free
             total       used       free     shared    buffers     cached
Mem:       1030796     118296     912500          0      17280      61616
-/+ buffers/cache:      39400     991396
Swap:      5253876          0    5253876
[root@justin ~]#


至此swap分区创建完成

二、使用文件的方式:

文件写入swap的时候分区会比文件快,所以最好还是使用分区的方式,以下创建一个200M的swap:

[root@justin ~]# grep SwapTotal /proc/meminfo
SwapTotal:       5253876 kB
[root@justin ~]# dd if=/dev/zero of=/home/swapfile bs=100M count=2
记录了2+0 的读入
记录了2+0 的写出
209715200字节(210 MB)已复制,2.19593 秒,95.5 MB/秒
[root@justin ~]# mkswap /home/swapfile
mkswap: /home/swapfile: warning: don't erase bootbits sectors
        on whole disk. Use -f to force.
Setting up swapspace version 1, size = 204796 KiB
no label, UUID=b977d4b9-acfb-4feb-8fb6-22b2ea132a42
[root@justin ~]# swapon /home/swapfile
[root@justin ~]# vim /etc/fstab
/home/swapfile          swap                    swap    defaults        0 0
[root@justin ~]# swapon -a
[root@justin ~]# grep SwapTotal /proc/meminfo
SwapTotal:       5458668 kB
[root@justin ~]#

至此swap分区创建完成

Tips:dd功能是把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换,if=/dev/zero if的意思是i代表input 就是输入的意思f=file代表文件 if=/dev/zero 说明使用/dev/zero 这个文件作为输入,of代表output file 就是输出文件,就是我们生成的那个文件的文件名,我们这里名字叫做swapfile, bs代表块大小,count代表使用几个块,bs乘以count大小为该文件的总大小,

/dev/null,外号叫"黑洞",它等价于一个只写文件,所有写入它的内容都会永远丢失.,而尝试从它那儿读取内容则什么也读不到。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到它。

/dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件。

使用dd命令来测试硬盘的写入速度

[root@justin ~]# dd if=/dev/zero of=/tmp/1Gbytes bs=4k count=256000 oflag=dsync
 
[root@justin ~]# dd if=/dev/zero of=/tmp/1Gbytes bs=4k count=256000 conv=fdatasync

两个都是往硬盘中写入1 Gbytes的数据,只是第一个的速度慢的要命。使用dsync,dd会从/dev/zero中,每次读取4Kbytes数据,然后直接写入到硬盘当中,重复此步骤,直到共读取并且写入了1 Gbytes的数据。使用fdatasync,dd会从/dev/zero中一次性读取1 Gbytes的数据,写入到磁盘的缓存中,然后再从磁盘缓存中读取,一次性写入到硬盘当中。



你可能感兴趣的:(swap,fdisk,swapon,mkswap,swapoff)