您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

如何在 Linux 上创建和使用交换文件

时间:2019-09-16 11:58:29  来源:  作者:

 

本教程讨论了 linux 中交换文件的概念,为什么使用它以及它相对于传统交换分区的优势。你将学习如何创建交换文件和调整其大小。

-- Abhishek Prakash(作者)

本教程讨论了 Linux 中交换文件的概念,为什么使用它以及它相对于传统交换分区的优势。你将学习如何创建交换文件和调整其大小。

什么是 Linux 的交换文件?

交换文件允许 Linux 将磁盘空间模拟为内存。当你的系统开始耗尽内存时,它会使用交换空间将内存的一些内容交换到磁盘空间上。这样释放了内存,为更重要的进程服务。当内存再次空闲时,它会从磁盘交换回数据。我建议 阅读这篇文章,了解 Linux 上的交换空间的更多内容 。

传统上,交换空间是磁盘上的一个独立分区。安装 Linux 时,只需创建一个单独的分区进行交换。但是这种趋势在最近几年发生了变化。

使用交换文件,你不再需要单独的分区。你会根目录下创建一个文件,并告诉你的系统将其用作交换空间就行了。

使用专用的交换分区,在许多情况下,调整交换空间的大小是一个可怕而不可能的任务。但是有了交换文件,你可以随意调整它们的大小。

最新版本的 Ubuntu 和其他一些 Linux 发行版已经开始 默认使用交换文件 。甚至如果你没有创建交换分区,Ubuntu 也会自己创建一个 1GB 左右的交换文件。

让我们看看交换文件的更多信息。

检查 Linux 的交换空间

在你开始添加交换空间之前,最好检查一下你的系统中是否已经有了交换空间。

你可以用 Linux 上的 free 命令 检查它。就我而言,我的 戴尔 XPS 有 14GB 的交换容量。

free -h
 total used free shared buff/cache available
Mem: 7.5G 4.1G 267M 971M 3.1G 2.2G
Swap: 14G 0B 14G

free 命令给出了交换空间的大小,但它并没有告诉你它是真实的交换分区还是交换文件。swapon 命令在这方面会更好。

swapon --show
NAME TYPE SIZE USED PRIO
/dev/nvme0n1p4 partition 14.9G 0B -2

如你所见,我有 14.9GB 的交换空间,它在一个单独的分区上。如果是交换文件,类型应该是 file 而不是 partition。

swapon --show
NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2

如果你的系统上没有交换空间,它应该显示如下内容:

free -h
 total used free shared buff/cache available
Mem: 7.5G 4.1G 267M 971M 3.1G 2.2G
Swap: 0B 0B 0B

而 swapon 命令不会显示任何输出。

在 Linux 上创建交换文件

如果你的系统没有交换空间,或者你认为交换空间不足,你可以在 Linux 上创建交换文件。你也可以创建多个交换文件。

让我们看看如何在 Linux 上创建交换文件。我在本教程中使用 Ubuntu 18.04,但它也应该适用于其他 Linux 发行版本。

步骤 1:创建一个新的交换文件

首先,创建一个具有所需交换空间大小的文件。假设我想给我的系统增加 1GB 的交换空间。使用fallocate 命令创建大小为 1GB 的文件。

sudo fallocate -l 1G /swapfile

建议只允许 root 用户读写该交换文件。当你尝试将此文件用于交换区域时,你甚至会看到类似“不安全权限 0644,建议 0600”的警告。

sudo chmod 600 /swapfile

请注意,交换文件的名称可以是任意的。如果你需要多个交换空间,你可以给它任何合适的名称,如 swap_file_1、swap_file_2 等。它们只是一个预定义大小的文件。

步骤 2:将新文件标记为交换空间

你需要告诉 Linux 系统该文件将被用作交换空间。你可以用 mkswap 工具做到这一点。

sudo mkswap /swapfile

你应该会看到这样的输出:

Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=7e1faacb-ea93-4c49-a53d-fb40f3ce016a

步骤 3:启用交换文件

现在,你的系统知道文件 swapfile 可以用作交换空间。但是还没有完成。你需要启用该交换文件,以便系统可以开始使用该文件作为交换。

sudo swapon /swapfile

现在,如果你检查交换空间,你应该会看到你的 Linux 系统会识别并使用它作为交换空间:

swapon --show
NAME TYPE SIZE USED PRIO
/swapfile file 1024M 0B -2

步骤 4:让改变持久化

迄今为止你所做的一切都是暂时的。重新启动系统,所有更改都将消失。

你可以通过将新创建的交换文件添加到 /etc/fstab 文件来使更改持久化。

对 /etc/fstab 文件进行任何更改之前,最好先进行备份。

sudo cp /etc/fstab /etc/fstab.back

现在将以下行添加到 /etc/fstab 文件的末尾:

/swapfile none swap sw 0 0

你可以使用 命令行文本编辑器 手动操作,或者使用以下命令:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

现在一切都准备好了。即使在重新启动你的 Linux 系统后,你的交换文件也会被使用。

调整 swAppiness 参数

swappiness 参数决定了交换空间的使用频率。swappiness 值的范围从 0 到 100。较高的值意味着交换空间将被更频繁地使用。

Ubuntu 桌面的默认的 swappiness 是 60,而服务器的默认 swappiness 是 1。你可以使用以下命令检查 swappiness:

cat /proc/sys/vm/swappiness

为什么服务器应该使用低的 swappiness 值?因为交换空间比内存慢,为了获得更好的性能,应该尽可能多地使用内存。在服务器上,性能因素至关重要,因此 swappiness 应该尽可能低。

你可以使用以下系统命令动态更改 swappiness:

sudo sysctl vm.swappiness=25

这种改变只是暂时的。如果要使其永久化,可以编辑 /etc/sysctl.conf 文件,并在文件末尾添加swappiness 值:

vm.swappiness=25

在 Linux 上调整交换空间的大小

在 Linux 上有几种方法可以调整交换空间的大小。但是在你看到这一点之前,你应该了解一些关于它的事情。

当你要求系统停止将交换文件用于交换空间时,它会将所有数据(确切地说是内存页)传输回内存。所以你应该有足够的空闲内存,然后再停止交换。

这就是为什么创建和启用另一个临时交换文件是一个好的做法的原因。这样,当你关闭原来的交换空间时,你的系统将使用临时交换文件。现在你可以调整原来的交换空间的大小。你可以手动删除临时交换文件或留在那里,下次启动时会自动删除(LCTT 译注:存疑?)。

如果你有足够的可用内存或者创建了临时交换空间,那就关闭你原来的交换文件。

sudo swapoff /swapfile

现在你可以使用 fallocate 命令来更改文件的大小。比方说,你将其大小更改为 2GB:

sudo fallocate -l 2G /swapfile

现在再次将文件标记为交换空间:

sudo mkswap /swapfile

并再次启用交换文件:

sudo swapon /swapfile

你也可以选择同时拥有多个交换文件。

删除 Linux 中的交换文件

你可能有不在 Linux 上使用交换文件的原因。如果你想删除它,该过程类似于你刚才看到的调整交换大小的过程。

首先,确保你有足够的空闲内存。现在关闭交换文件:

sudo swapoff /swapfile

下一步是从 /etc/fstab 文件中删除相应的条目。

最后,你可以删除该文件来释放空间:

sudo rm /swapfile

你用了交换空间了吗?

我想你现在已经很好地理解了 Linux 中的交换文件概念。现在,你可以根据需要轻松创建交换文件或调整它们的大小。

如果你对这个话题有什么要补充的或者有任何疑问,请在下面留下评论。


via: https://itsfoss.com/create-swap-file-linux/

作者: Abhishek Prakash 选题: lujun9972 译者: heguangzhi 校对: wxy

本文由 LCTT 原创编译, Linux中国 荣誉推出



Tags:Linux 交换文件   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
本教程讨论了 Linux 中交换文件的概念,为什么使用它以及它相对于传统交换分区的优势。你将学习如何创建交换文件和调整其大小。-- Abhishek Prakash(作者)本教程讨论了 Linux...【详细内容】
2019-09-16  Tags: Linux 交换文件  点击:(150)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(14)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(22)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(25)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(41)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(28)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(19)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(29)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条