一天一点学习Linux之SWAP的创建/扩展

来源:岁月联盟 编辑:exp 时间:2011-10-25

 

SWAP我称之为交换区,相当于Windows系统下的虚拟内存。他的作用就是当我们系统中的内存不够用的时候,可以通过SWAP来增加内存。我们在安装Linux系统的时候,最基本的分区一个是根,一个是SWAP。如果我们当初把SWAP分小了的话,你需要增加他的大小,那么今天的内容就是这个内容:SWAP的创建/扩展。有两种方法供我们选择。

 

1、利用磁盘的剩余空间

这个前提就是你的磁盘还有剩余空间没有划分,或者是已经划分的分区不在使用。这个时候才能使用此方法。下面是此方法的实现步骤。

 

第一步:分区

查看磁盘的情况

 

[root@yufei ~]# fdisk -l /dev/sdb

此处省略N多行

Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1         132     1060258+  83  Linux

/dev/sdb2             133         183      409657+   b  W95 FAT32

/dev/sdb3             184        2610    19494877+   5  Extended

/dev/sdb5             184         445     2104483+  83  Linux

/dev/sdb6             446         511      530113+  82  Linux swap / Solaris

sdb6是我们前面讲分区与格式化的时候分出来的,先不理会他。为了完整的来演示,所以我们增加新的分区

 

[root@yufei ~]# fdisk /dev/sdb

此处有省略内容

Command (m for help): n

Command action

l   logical (5 or over)

p   primary partition (1-4)

l

First cylinder (512-2610, default 512):

Using default value 512

Last cylinder, +cylinders or +size{K,M,G} (512-2610, default 2610): +256M

 

Command (m for help): p

此处有省略

/dev/sdb7             512         545      273073+  83  Linux

第二步:转换分区类型

Command (m for help): t

Partition number (1-7): 7

Hex code (type L to list codes): L

此处有省略

Hex code (type L to list codes): 82

Changed system type of partition 7 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: Device or resource busy.

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@yufei ~]# partprobe /dev/sdb也是同样的错误。

 

上面的错误提示大概内容就是设备繁忙,无法识别新的分区表,什么原因呢?看下面的解决方法。

还记得我们上一篇关于自动挂载的内容吗?对了,我们的sdb上的分区已经挂载到系统中了。通过下面的命令来查看

 

[root@yufei ~]# df

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda1             15118728   6980344   7370384  49% /

tmpfs                   255784         0    255784   0% /dev/shm

/dev/sdb1              1033560     40980    939568   5% /mnt

/dev/sdb2               409424         0    409424   0% /test

把他们两个卸载掉

 

[root@yufei ~]# umount /dev/sdb1

[root@yufei ~]# umount /dev/sdb2

再来

[root@yufei ~]# partprobe /dev/sdb

这时候就没有显示错误信息了

 

[root@yufei ~]# fdisk -l /dev/sdb

此处有省略

Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1         132     1060258+  83  Linux

/dev/sdb2             133         183      409657+   b  W95 FAT32

/dev/sdb3             184        2610    19494877+   5  Extended

/dev/sdb5             184         445     2104483+  83  Linux

/dev/sdb6             446         511      530113+  82  Linux swap / Solaris

/dev/sdb7             512         545      273073+  82  Linux swap / Solaris

sdb7已经分出来了。下面进行格式化

 

第三步:格式化SWAP分区

SWAP的格式化与我们前面的格式化稍有不同,只是命令不同而已,SWAP用mkswap

 

[root@yufei ~]# mkswap /dev/sdb7

Setting up swapspace version 1, size = 273068 KiB

no label, UUID=edca6b3a-047b-4e26-9b28-21493f92e2b4

因为没有设置卷标,所以是无卷标的。

 

第四步:激活SWAP

在激活我们创建的SWAP前,我们先来看看系统中的SWAP大小

 

[root@yufei ~]# free

total       used       free     shared    buffers     cached

Mem:        511572     154664     356908          0      17408      76236

-/+ buffers/cache:      61020     450552

Swap:       524280          0     524280

这里面显示的是512M

 

[root@yufei ~]# swapon /dev/sdb7

激活SWAP,再显示SWAP的大小,多了256M

[root@yufei ~]# free

total       used       free     shared    buffers     cached

Mem:        511572     154928     356644          0      17444      76252

-/+ buffers/cache:      61232     450340

Swap:       797344          0     797344

第五步:写入fstab

在/etc/fstab 最后加入如下内容

 

UUID=edca6b3a-047b-4e26-9b28-21493f92e2b4  swap     swap   defaults        0 0

重新启动系统看看SWAP的大小情况

[root@yufei ~]# free -m

total       used       free     shared    buffers     cached

Mem:        511572     152636     358936          0      15132      75900

-/+ buffers/cache:      61604     449968

Swap:       797344          0     797344

2、利用分区的剩余空间

既然用分区的剩余空间,当然要找个空间大的分区来进行下面的操作啊!

 

第一步:创建SWAP文件

[root@yufei ~]# df

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda1             15118728   6980460   7370268  49% /

tmpfs                   255784         0    255784   0% /dev/shm

/dev/sdb1              1033560     40980    939568   5% /mnt

/dev/sdb2               409424         0    409424   0% /test

因为下面两个是sdb磁盘的,我们就不用了,直接用/分区吧。

创建一个256M的文件,名字为根目录下的swapfile

 

[root@yufei ~]# dd if=/dev/zero of=/swapfile bs=1M count=256

256+0 records in

256+0 records out

268435456 bytes (268 MB) copied, 9.43718 s, 28.4 MB/s

第二步:对SWAP文件进行格式化

[root@yufei ~]# mkswap /swapfile

mkswap: /swapfile: warning: don't erase bootbits sectors

on whole disk. Use -f to force.

Setting up swapspace version 1, size = 262140 KiB

no label, UUID=11ca575a-e810-4970-889a-a3f6d9af7dfe

第三步:激活SWAP

[root@yufei ~]# free

total       used       free     shared    buffers     cached

Mem:        511572     419940      91632          0      15492     338472

-/+ buffers/cache:      65976     445596

Swap:       797344          0     797344

 

[root@yufei ~]# swapon /swapfile

[root@yufei ~]# free

total       used       free     shared    buffers     cached

Mem:        511572     419948      91624          0      15492     338472

-/+ buffers/cache:      65984     445588

Swap:      1059480          0    1059480

第四步:写入fstab

加入下面的内容

 

/swapfile                swap                   swap    defaults        0 0

 

重新启动查询SWAP大小情况

[root@yufei ~]# free

total       used       free     shared    buffers     cached

Mem:        511572     151156     360416          0      15228      74056

-/+ buffers/cache:      61872     449700

Swap:      1059480          0    1059480

这样我们把两种方法全部演示了一下,这里面有个问题,那就是现在系统中有三个SWAP,默认的情况下,哪个SWP最先使用呢?Linux的内核会自动给SWAP指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的SWAP,会给这个优先级减一。所以-1他的优先级最好,所以就最先使用。

有这样一种情况,那就是在使用VPS的时候,系统在安装的时候,可能没有给分配SWAP,所以说,你要自己创建SWAP,但就分区与文件的SWAP而言,分区的SWAP效率要比文件高。所以有时候我们需要来调整他们的优先级。请继续看操作。

 

查看swap的优先级

[root@yufei ~]# swapon -s

Filename                Type        Size    Used    Priority

/dev/sda2               partition    524280    0        -1

/dev/sdb7               partition    273064    0        -2

/swapfile               file        262136    0        -3

这里是数字越大,优先级越高。

 

要更改他们的优先级也很简单,只需要在fstab中增加pri参数就OK。注意,这个pri后面的数值不是能负数哦!/etc/fstab修改的主要内容如下。

 

UUID=c70cd6a4-09cd-4aea-ba94-f3641df4e981    swap        swap    defaults,pri=1    0 0

UUID=edca6b3a-047b-4e26-9b28-21493f92e2b4    swap        swap    defaults,pri=2    0 0

/swapfile                                    swap        swap    defaults,pri=3  0 0

为了使修改生效,我们需要先关闭SWAP再开启SWAP

 

[root@yufei ~]# swapoff -a

[root@yufei ~]# swapon -a

[root@yufei ~]# swapon -s

Filename                Type        Size    Used    Priority

/dev/sda2                partition    524280    0        1

/dev/sdb7                partition    273064    0        2

/swapfile                file        262136    0        3

当然我把这个SWAP文件调整成最高优先级不合理,这里只是做个演示,来说明问题而已。所以大家不要把文件的SWAP调整成最高啊。如果不是必要的情况下,用系统默认的就好

摘自:羽飞博客