想想以下情况:
- 系统安装时,没有创建swap分区
- 服务器无法添加物理内存,而且swap分区不够用
此时,我们就需要手动的创建或者增大swap分区了。注意,虚拟内存必须是独立的文件系统,那么我们也必须为其提供单独的分区。
swap分区可以建立两个或更多,但都是单独的分区,用free -m查看的时候是两个大小之和。
查看磁盘各个分区的uuid,可以用blkid命令就可以查看。
1、创建一个单独的分区
[root@localhost ~]# fdisk /dev/sdb
Command (m for help): p # 打印分区表
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 123 987966 83 Linux
Command (m for help): n # 创建新分区
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (124-652, default 124):
Using default value 124
Last cylinder or +size or +sizeM or +sizeK (124-652, default 652): +512M
Command (m for help): p
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 123 987966 83 Linux
/dev/sdb2 124 186 506047+ 83 Linux
Command (m for help): t # 调整分区类型
Partition number (1-4): 2
Hex code (type L to list codes): 82
Changed system type of partition 2 to 82 (Linux swap / Solaris)
Command (m for help): p
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 123 987966 83 Linux
/dev/sdb2 124 186 506047+ 82 Linux swap / Solaris
Command (m for help): w # 写入到磁盘
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# partprobe /dev/sdb
2、使用mkswap命令创建swap文件系统
[root@7-node4 /]# mkswap /dev/sda2
mkswap: /dev/sda2: warning: wiping old xfs signature.
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=3caab240-a7ca-4fb8-890f-3298b4598a24
[root@7-node4 /]# blkid
/dev/sda1: UUID="32035c69-fe91-4fff-b293-2d23138b906d" TYPE="xfs"
/dev/sda2: UUID="3caab240-a7ca-4fb8-890f-3298b4598a24" TYPE="swap"
/dev/sda3: UUID="84e75afb-5fff-4b50-a0cc-c1cc81d6ed84" TYPE="xfs"
/dev/sr0: UUID="2015-12-09-23-14-10-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/loop0: UUID="4e303d62-de13-4aba-8363-c729b82fb496" TYPE="xfs"
/dev/sdb: UUID="bea6399b-ffac-4f38-bfd1-3a0f7a3a23b3" TYPE="xfs"
/dev/mapper/docker-8:3-33624628-pool: UUID="4e303d62-de13-4aba-8363-c729b82fb496" TYPE="xfs"
[root@7-node4 /]#
3、使用swapon命令激活swap分区
# swapon [device]
# swapon -a # 开启所有标识为swap的分区
[root@localhost ~]# free -m
total used free shared buffers cached
Mem: 122 103 18 0 1 33
-/+ buffers/cache: 68 53
Swap: 1027 70 957
[root@localhost ~]# swapon /dev/sdb2
[root@localhost ~]# free -m
total used free shared buffers cached
Mem: 122 103 18 0 1 33
-/+ buffers/cache: 68 53
Swap: 1521 70 1451
4、设置开机自动挂载
我们可以编辑/etc/fstab配置文件,在文件末尾增加:
1
|
/dev/sda5 swap swap defaults 0 0 |
二、把swap分区去掉,作为普通磁盘来挂载
1、umount掉swap分区
swapoff /dev/sda2
2、重新格式化/dev/sda2,因为swap文件系统不能直接用,所以需要格式化。
[root@7-node4 ~]# mkfs -t xfs -f /dev/sda2
meta-data=/dev/sda2 isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@7-node4 ~]#
3、挂载mount /dev/sda2 /data
[root@7-node4 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 15G 9.2G 5.3G 64% /
devtmpfs 483M 0 483M 0% /dev
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 493M 6.8M 486M 2% /run
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/sdb 5.0G 33M 5.0G 1% /glusterfs-storage
/dev/sda1 597M 246M 351M 42% /boot
tmpfs 99M 0 99M 0% /run/user/0
/dev/sda2 1014M 33M 982M 4% /data
[root@7-node4 ~]#
4、可以写入/etc/fstab开机自动挂载
三、当系统没有多余的磁盘给我们添加swap时怎么做
当前系统上,没有任何磁盘空间可以创建分区了,但是又必须要扩展swap时,该如何是好呢?
在类Unix系统中,/dev/loop(或称vnd (vnode disk)、lofi(循环文件接口))是一种伪设备,这种设备使得文件可以如同块设备一般被访问。在使用之前,循环设备必须与现存文件系统上的文件相关联。这种关联将提供给用户一个应用程序接口,接口将允许文件视为块特殊文件(参见设备文件系统)使用。因此,如果文件中包含一个完整的文件系统,那么这个文件就能如同磁盘设备一般被挂载。
那么意味着我们可以通过创建本地回环设备,来模拟磁盘分区使用。那么下面就来看看如何使用文件来模拟swap分区。
1、查看系统swap分区
1
2
3
|
[root@localhost ~] # cat /proc/swaps Filename Type Size Used Priority /dev/sda2 partition 1052248 71776 -1 |
2、使用dd命令创建大文件
使用下面这条命令,就可以创建一个512M大小的文件,名为swapfile
1
2
3
4
|
[root@localhost ~] # dd if=/dev/zero of=swapfile bs=1M count=512 512+0 records in 512+0 records out 536870912 bytes (537 MB) copied, 15.0813 seconds, 35.6 MB /s |
3、使用mkswap命令创建swap文件系统
1
2
|
[root@localhost ~] # mkswap swapfile Setting up swapspace version 1, size = 536866 kB |
4、使用swapon命令启用swap分区
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[root@localhost ~] # cat /proc/swaps Filename Type Size Used Priority /dev/sda2 partition 1052248 71792 -1 [root@localhost ~] # free -m total used free shared buffers cached Mem: 122 119 2 0 0 50 -/+ buffers /cache : 68 54 Swap: 1027 70 957 [root@localhost ~] # swapon swapfile [root@localhost ~] # cat /proc/swaps Filename Type Size Used Priority /dev/sda2 partition 1052248 71792 -1 /root/swapfile file 524280 0 -6 [root@localhost ~] # free -m total used free shared buffers cached Mem: 122 119 2 0 0 50 -/+ buffers /cache : 68 53 Swap: 1539 70 1469 |
5、使用swapoff关闭swap分区
1
|
[root@localhost ~] # swapoff swapfile |
6、设置开机自动挂载swap分区
编辑/etc/fstab文件,写入下面这一行
1
|
echo "/root/swapfile swap swap defaults 0 0" >> /etc/fstab |
总结:
1. dd if=/dev/zero of=/path/swapfile bs=1k count=2048000
2. mkswap /path/swapfile
3. swapon /path/swapfile
4. 修改/etc/fstab使其启动时自动mount:
在/etc/fstab中增加如下语句:
/path/swapfile swap swap defaults 0 0
原文链接:创建SWAP分区和把SWAP分区作为普通分区来使用,转载请注明来源!