方法1:使用独立的分区来实现
1. lsblk 查看是否有可用的磁盘分区,使用fdsik划分磁盘分区
2. fdisk /dev/sdc 创建后的分区为/dev/sdc2,注意使用t选项修改分区id为82
3. 创建swap文件系统
mkswap /dev/sdc2 -L swap_sdc2
4. vim /etc/fstab
:r!blkid /dev/sdc2 #读取命令输出至文件,再次进行编辑
UUID="6f50983b-1452-41fc-8efd-2151e4613959" swap swap defaults 0 0
5. swapon -a 让编辑后的/etc/fstab中的swap 分区生效
发散思维: 其实执行mount -a 是否生效不还是看选项是否有auto吗,man 5 fstab中找到的(学会使用man 5 配置文件 来查看配置信息,你值得拥有!)
defaults
use default options: rw, suid, dev, exec, auto, nouser, and async.
noauto do not mount when "mount -a" is given (e.g., at boot time)
提取关键信息:defaults: rw, suid, dev, exec, auto, nouser, and async.
noauto: do not mount when "mount -a" is given (e.g., at boot time) 这句话取反你就知道啥意思了!
6. 重新读取挂载信息后,使用swapon -s 查看swap文件系统的信息
[root@centos7 ~]#swapon -s
Filename Type Size Used Priority
/dev/sda3 partition 2047996 2800 -1
/dev/sdc2 partition 10484732 0 -2
注意一下还有优先级的,数值越大优先级越高
发散思维: 在使用是swap分区的时候要使用外磁道来使用(即磁道号较小的,最外圈的是0磁道),因为这样数据的访问效率会比内圈磁道高,具体的原因在此不再赘述。
7. 查看swap分区的状态也可以使用 lsblk
[root@centos7 ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1000M 0 part /boot
├─sda2 8:2 0 9.8G 0 part /
├─sda3 8:3 0 2G 0 part [SWAP] #原来的swap分区大小
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 48.8G 0 part /data
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 2G 0 part
├─sdb2 8:18 0 2G 0 part
├─sdb3 8:19 0 3G 0 part
├─sdb4 8:20 0 1K 0 part
└─sdb5 8:21 0 2G 0 part
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 10G 0 part
└─sdc2 8:34 0 10G 0 part [SWAP] #新增加的swap分区的大小
sr0 11:0 1 3.7G 0 rom /run/media/root/CentOS_6.9_Final
sr1 11:1 1 8.1G 0 rom /run/media/root/CentOS 7 x86_64
8. 禁用新增的swap分
# swapoff /dev/sdc1
总结记忆: swapon -a 生效/etc/fstab 添加swap分区
fdisk分区的时候注意使用t 修改磁盘的id 为82
swpaon -s 查看swap分区信息
swapoff /dev/sdc1 禁用swap分区
方法2: 文件模拟分区创建swap文件系统
1. dd if=dev/zero of=/data/swap_file bs=1G count=5 创建5G空间的大小的文件
发散思维: dd if=/dev/zero of=/dev/sdc1 bs=512 count=1 可以干掉MBR的信息,你可以这样删除分区信息,也可以使用fdisk /dev/sdc 来使用d选项来删除
当然也可以不删除bootloader的信息(446bytes),直接将64bytes的分区表信息填零,如:
dd if=/dev/zero of=/dev/sdc1 bs=1 count=64 seek=446 直接填充64bytes至 分区表,跳过目标 /dev/sdc1的前446bytes
注意不能使用 dd if=/dev/zero of=/dev/sdc1 bs=64 count=1 seek=446
hexdump -C /dev/sda -n 512 -v 显示sda分区的前512字节信息
葵花宝典的套路: 记住玩之前先要备份MBR啊!哈哈哈,dd if=/dev/sdc1 count=/data/mbr.bak bs=512 count=1 (默认单位是字节)
恢复的时候 可以直接 dd if=/dev/mbr.bak of=/dev/sdc1 不用给出bs和count了,因为只有512字节的备份信息,是吧。
也可以使用dd if=/dev/zero of=/dev/null bs=1G count=2 这方法可以测试磁盘的读写速度,有兴趣的可以试试
2. mkswap -L swap_file /data/swap_file 创建swap文件系统
3. 为了永久生效,编辑配置文件/etc/fstab,永久生效配置修改配置文件似乎是linux的铁律,你们觉得呢?因为使用的是文件模拟的分区,所以不要使用UUID哟!
vim /etc/fstab
/data/file2 swap swap defaults 0 0
4.swapon -a 读取/etc/fstab中的swap分区信息
5.swapon -s 查看swap分区的信息,顺便看看自己刚刚创建的swap分区是否生效
6.swapoff /data/swap_file 不想玩了,可以直接禁用
最近在用一个自己装的debian系统的时候,发现运行很多脚本的时候出现:Cannot fork。
网上说有可能是因为swap分区空间不够导致的问题。然后看了一下swap空间的大小。居然大小是0M。
查看的命令是free -m。
难道真的是swap分区导致的问题?不管了,先添加个swap分区再说吧。
1.创建一个swap文件。
cd /var
sudo mkdir swap
sudo dd if=/dev/zero of=swapfile bs=1024 count=2000000
count代表的是大小,我这里是2G。
2.把文件转换为swap文件
在 var目录执行:
sudo mkswap swapfile
3.激活swap文件
这里可以直接用命令挂载上一个swap分区,但是重启后要重新挂载:
挂载: sudo swapon /var/swapfile
如果不需要了,可以也可以卸载:
卸载:sudo swapoff /var/swapfile
4、如果需要开机启动后自动挂载的话,可以把它添加到/etc/fstab文件中。
开机自动挂载SWAP分区,
编辑 /etc/fstab,末行添加:
在文件中增加:
/var/swapfile swap swap defaults 0 0
4.这样就已经完成增加swap分区了。可以用free -m来参看结果。