Linux:Swap分区

Linux中Swap(即:交换分区),类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。

 

方法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来参看结果。

你可能感兴趣的:(LINUX)