在Linux中使用shell脚本自动创建/移除并挂载交换文件

几天前我们写了一篇关于在 Linux 中 3 种创建交换文件的方法,它们是常见的方法,但是需要人工操作。

今天我发现了一个 Gary Stafford[1] 写的 shell 小脚本(两个 shell 脚本,一个用于创建交换文件,另外一个用于移除交换文件),它可以帮助我们在 Linux 中创建/移除并且自动挂载交换文件。

默认这个脚本创建并挂载 512MB 的交换文件。如果你想要更多的交换空间和不同的文件名,你需要相应地修改脚本。修改脚本不是一件困难的事,因为这是一个容易上手而且很小的脚本。

推荐阅读: Linux 中 3 种简易创建或扩展交换空间的方法

如何检查当前交换文件大小

使用 free[3] 和 swapon 命令检查已经存在交换空间。


  1. $ free -h 
  2.  
  3.               total        used        free      shared  buff/cache   available 
  4.  
  5. Mem:           2.0G        1.3G        139M         45M        483M        426M 
  6.  
  7. Swap:          2.0G        655M        1.4G 
  8.  
  9. $ swapon --show 
  10.  
  11. NAME      TYPE      SIZE   USED PRIO 
  12.  
  13. /dev/sda5 partition   2G 655.2M   -1 

上面的输出显示我当前的交换空间是 2GB。

创建交换文件

创建 create_swap.sh 文件并添加下面的内容来自动化交换空间的创建和挂载。


  1. $ nano create_swap.sh 
  2.  
  3. #!/bin/sh 
  4.  
  5. # size of swapfile in megabytes 
  6.  
  7. swapsize=1024 
  8.  
  9. # does the swap file already exist? 
  10.  
  11. grep -q "swapfile" /etc/fstab 
  12.  
  13. # if not then create it 
  14.  
  15. if [ $? -ne 0 ]; then 
  16.  
  17.     echo 'swapfile not found. Adding swapfile.' 
  18.  
  19.     fallocate -l ${swapsize}M /swapfile 
  20.  
  21.     chmod 600 /swapfile 
  22.  
  23.     mkswap /swapfile 
  24.  
  25.     swapon /swapfile 
  26.  
  27.     echo '/swapfile none swap defaults 0 0' >> /etc/fstab 
  28.  
  29. else 
  30.  
  31.     echo 'swapfile found. No changes made.' 
  32.  
  33. fi 
  34.  
  35. echo '--------------------------------------------' 
  36.  
  37. echo 'Check whether the swap space created or not?' 
  38.  
  39. echo '--------------------------------------------' 
  40.  
  41. swapon --show 

给文件添加执行权限。


  1. $ sudo +x create_swap.sh 

运行文件来创建和挂载交换文件。


  1. $ sudo ./create_swap.sh 
  2.  
  3. swapfile not found. Adding swapfile. 
  4.  
  5. Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) 
  6.  
  7. no label, UUID=d9004261-396a-4321-a45f-9923e3e1328c 
  8.  
  9. -------------------------------------------- 
  10.  
  11. Check whether the swap space created or not? 
  12.  
  13. -------------------------------------------- 
  14.  
  15. NAME      TYPE       SIZE   USED PRIO 
  16.  
  17. /dev/sda5 partition    2G 954.1M   -1 
  18.  
  19. /swapfile file      1024M     0B   -2 

你可以看到新的 1024M 的 swapfile。重启系统以使用新的交换文件。

移除交换文件

如果不再需要交换文件,接着创建 remove_swap.sh 文件并添加下面的内容来移除交换文件以及它的 /etc/fstab 挂载点。


  1. $ nano remove_swap.sh 
  2.  
  3. #!/bin/sh 
  4.  
  5. # does the swap file exist? 
  6.  
  7. grep -q "swapfile" /etc/fstab 
  8.  
  9. # if it does then remove it 
  10.  
  11. if [ $? -eq 0 ]; then 
  12.  
  13.     echo 'swapfile found. Removing swapfile.' 
  14.  
  15.     sed -i '/swapfile/d' /etc/fstab 
  16.  
  17.     echo "3" > /proc/sys/vm/drop_caches 
  18.  
  19.     swapoff -a 
  20.  
  21.     rm -f /swapfile 
  22.  
  23. else 
  24.  
  25.     echo 'No swapfile found. No changes made.' 
  26.  
  27. fi 
  28.  
  29. echo '--------------------------------------------' 
  30.  
  31. echo 'Check whether the swap space removed or not?' 
  32.  
  33. echo '--------------------------------------------' 
  34.  
  35. swapon --show 

并给文件添加可执行权限。


  1. $ sudo +x remove_swap.sh 

运行脚本来移除并卸载交换文件。


  1. $ sudo ./remove_swap.sh  
  2. swapfile found. Removing swapfile. 
  3.  
  4. swapoff: /dev/sda5: swapoff failed: Cannot allocate memory 
  5.  
  6. -------------------------------------------- 
  7.  
  8. Check whether the swap space removed or not? 
  9.  
  10. -------------------------------------------- 
  11.  
  12. NAME      TYPE      SIZE   USED PRIO 
  13.  
  14. /dev/sda5 partition   2G 951.8M   -1  

作者:geekpi译

来源:51CTO

时间: 2024-11-05 16:40:57

在Linux中使用shell脚本自动创建/移除并挂载交换文件的相关文章

linux中利用Shell脚本自动提交网站404死链到搜索引擎

  Shell脚本 说做就做,简单的写了个 Shell 脚本就搞定了! 脚本名称:网站死链生成脚本 脚本功能:每天定时分析网站前一天的 nginx 日志, 然后提取状态码为404并且UA为百度蜘蛛的抓取路径,并写入到网站根目录下的 death.txt 文件,用于提交百度死链. 脚本代码: #!/bin/bash #Desc: Death Chain File Script #Author: ZhangGe #Blog: http://你的域名/5038.html #Date: 2015-05-0

如何在Linux中启用Shell脚本的调试模式

脚本是存储在一个文件的一系列命令.在终端上输入一个个命令,按顺序执行的方法太弱了,使用脚本,系统中的用户可以在一个文件中存储所有命令,反复调用该文件多次重新执行命令. 在学习脚本或写脚本的初期阶段,我们通常从写小脚本或者几行命令的短脚本开始,调试这样的脚本时我们通常无非就是通过观察它们的输出来确保其正常工作. 然而,当我们开始写非常长或上千行命令的高级脚本,例如改变系统设置的脚本,在网络上执行关键备份 等等,我们会意识到仅仅看脚本输出是不足以在脚本中找到 Bug 的! 因此,在 Linux 系列

如何在 Linux 中启用 Shell 脚本的调试模式

脚本是存储在一个文件的一系列命令.在终端上输入一个个命令,按顺序执行的方法太弱了,使用脚本,系统中的用户可以在一个文件中存储所有命令,反复调用该文件多次重新执行命令. 在学习脚本或写脚本的初期阶段,我们通常从写小脚本或者几行命令的短脚本开始,调试这样的脚本时我们通常无非就是通过观察它们的输出来确保其正常工作. 然而,当我们开始写非常长或上千行命令的高级脚本,例如改变系统设置的脚本,在网络上执行关键备份 等等,我们会意识到仅仅看脚本输出是不足以在脚本中找到 Bug 的! 因此,在 Linux 系列

linux中的shell脚本管理(二)

在Shell脚本中执行使用if语句的好处是:可以根据特定的条件(eg:判断备份目录是否存在)来决定是否执行某项操作,当满足不同的条件时执行不同的操作(eg:备份目录不存在则创建该目录,否则跳过操作).该文将分别从条件测试操作,if语句结构,应用示例这三个方面讲解if语句在Shell脚本中的应用. 1.条件测试操作: 需要在Shell脚本中有选择性地执行任务时,首先面临的问题就是,如何设置命令执行的条件? 在Shell环境中,可以根据命令执行后返回状态值来判断该命令是否成功执行,当返回值为0是表示

linux中利用shell脚本监控网站状态异常

  最近刚好需要测试一下新建站的稳定性,所以写了个SHELL脚本放到本机(最近换了mac本),能够实时查看你需要监控的WEB页面状态,并发送到指定邮箱.     这里赞一下OS X自带有crontab计划任务,可以直接在本机测试脚本啦^_^    代码如下 复制代码 # vi check_web_alive.sh --------------------------------------------------------------------- #!/bin/bash PATH=/bin:

linux中防止shell脚本重复执行

今天在jenkins里部署的时候,由于开发们多次频繁的提交的代码,造成jenkins里的shell脚本在那频繁的部署,为了阻止这样的问题,专门找了个防止重复执行的代码.下面来看代码: #!/bin/bash   LOCK_NAME="/tmp/my.lock" if ( set -o noclobber; echo "$$" > "$LOCK_NAME") 2> /dev/null; then         trap 'rm -f

Linux中执行shell脚本的4种方法总结_linux shell

bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本: 复制代码 代码如下: cd /data/shell ./hello.sh ./的意思是说在当前的工作目录下执行hello.sh.如果不加上./,bash可能会响应找到不到hello.sh的错误信息.因为目前的工作目录(/data/shell)可能不在

linux中的shell脚本管理(一)

一:Shell的作用及常见种类: Shell是一个特殊的应用程序,他介于操作系统内核与用户之间,负责接受用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行.因此,Shell程序在系统中充当了一个"命令解释器"的角色,eg:微软的cmd.exe也属于Shell程序: 在Unix/Linux操作系统中,能够使用的Shell程序有很多种,功能也比微软的"cmd.exe"要强大的多,下面就是常见到的Shell程序环境,(功能可以自己去了解下:) Bsh:

linux中利用shell脚本查看占用swap的进程

查看进程在占用swap分区的脚本 命令脚本如下:  代码如下 复制代码 for i in `cd /proc;ls |grep "^[0-9]"|awk ' $0 >100'` ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps ;done |sort -k2nr 查看占用swap的进程  代码如下 复制代码 #!/bin/bash   echo -e `d