欢迎光临散文网 会员登陆 & 注册

在Raspberry pi os环境下新建并使用Swap交换文件

2021-01-15 14:29 作者:28283844972_bili  | 我要投稿

前传:因家境实在贫寒,自己去年淘来的树莓派的RAM规格是2GiB,除去为硬件分配的必要内存空间外,实际可用1.8GiB。本着节约并充分利用硬件资源的目标,在机子上刷了raspberry pi os lite 32bit系统镜像,当时以为完全够用。之后就一直作为内网文件传输服务器和minecraft局域网服务器使用,直到前段时间例行检查机子运行状况,好家伙,系统默认分配给用户的swap空间已耗尽!RAM剩余可用空间也所剩无几。照这样下去,当物理内存也被耗尽的时候,就很有可能触发oom_killer机制强制释放占用当前内存最多的进程(也就是minecraft游戏服务),直接影响到其他玩家的游戏体验(不带这么坑队友的!)。

本机实际可用RAM 1.8GiB,剩余可用空间即将告罄
/var/swap为系统默认分配给用户的swap空间,已耗尽

外有家境贫寒先天条件的限制,内有节省并充分利用硬件资源的目标,所以决定临时开辟一份swap文件作为缓兵之计(实则扬汤止沸)。本文适合同我一样家境贫寒、或想要折腾着研究raspberry pi os环境下使用swap文件的朋友,有条件的话还是尽可能地升级你的树莓派(使用外接RAM或重买解决100%问题),毕竟swap涉及到外设的IO操作,与RAM的IO操作相比要慢好几个数量级,高强度地对swap进行IO操作或swap空间耗尽早晚会达到新的性能瓶颈。土豪请直接忽略本文,这将节约你人生中宝贵的几分钟时间!!!


首先根据机子的当前状况,自行分析确定需要创建的swap文件大小,上图中我创建了一份大小为256MiB的临时swap文件以解决燃眉之急。我个人的观点是如果之前的swap空间耗尽,那么下一次创建swap空间大小为之前的2倍,以此类推,不要一次性创建过大或者过小的swap空间,过大浪费空间不符合我们的初衷,过小频繁创建自找麻烦。另外如果对swap IO操作比较频繁,多个swap文件可以在一定程度上实现swap负载均衡。

命令行环境下要做的第一件事就是确认你当前所在的工作目录,就好比户外旅游给自己定位,搞清楚方位状况。

当前的工作目录是本用户的家目录

搞清楚身处的环境之后,就要按照开始设想的需求创建swap文件。这里我使用了Linux自带的dd命令,设置块大小为1MiB(默认为512字节),块数量为512块,总大小也就是512MiB。

一些网上的教程可能会使用另外一个更为简便的命令:fallocate,但是无法再部分文件系统中使用(请注意,swap文件和swap分区不同,swap文件仅仅是一个用作swap空间的文件,其本质还是文件,其实现依赖于具体的文件系统),最后还得求助于dd命令。所以我个人使用工具遵循三项原则:系统自带工具优先、使用简单优先、通用工具优先,尽量不要聪明反被聪明误。

在家目录下的media目录中创建了一个名为swapfile的文件

到目前为止,新创建好的swap文件还仅仅是一份普通的文件,和你平时创建的文件没啥两样,可以使用:file 当前你认为创建好的swap文件 做一个简单的实验,这将显示当前文件的类别,按照上述步骤,不出意外的话会显示文件类型为data类型,是一个数据文件。

接下来要做的就是将普通的swap文件转变为真正意义上的swap文件,使用mkswap命令工具将普通的swap文件转变为真正的swap文件。

注意,使用mkswap命令之前请务必再三确认你所给定的文件路径是否绝对正确,如果不多加注意,轻则执行失败,重则很有可能会破坏现有文件数据,最坏的情况就是破坏重要的系统文件,导致系统崩溃,特别是习惯在root用户环境下操作的朋友。如非必要,平时请养成良好习惯,仅在普通用户的环境下执行命令。

如果你不清楚刚才创建的swap文件路径或是当前工作目录,请善用ctrl+r历史命令回溯查找和pwd命令,而且pwd命令本身也很简短好记,这么方便好记得命令还不多用用?(手动狗头)

注意配图中suggested警告提示

可以看到命令运行结果中出现了警告(建议)字段,因为当前用户创建文件默认开启的权限是0644,而swap文件建议开启的权限是0600,为了系统安全性考虑,设置swap文件权限为0600。提前剧透一下,除了需要修改权限之外,进一步提升系统安全性,建议将swap文件的所有者和所属组改为root,这样普通用户对swap文件将没有任何读写权限,如图所示:

更改swap文件的默认权限、所有者和所有组

当然,你也可以在使用dd命令的阶段使用sudo dd 选项(参数)命令,这样做的好处是创建好的swap文件所属者与所属组直接就是root,后面有需要的话,只需要修改文件权限即可。缺点就是后续命令执行都需要在最前面加上sudo提权,看个人的喜好吧。

万事俱备只欠东风,接下来准备正式启用swap文件,使用sudo swapon swap文件路径 给当前的swap空间扩容。

可以看到之前创建的swapfile已经被成功启用,且没有任何报错

至此,作为用来临时救场的swap文件就已经被投入使用了。至于网上其他教程中修改配套参数,我个人认为没必要也不建议修改,系统默认的参数设置是大部分情况下的最优配置,不需要用户去画蛇添足。当然,随着你的机子重启,上述的启用设置也将失效,换句话来讲,以上设置只是临时设置,而且我也在文章中多次强调我的目的。

如果需要设置成开机自动配置,raspberry pi os环境下的配置和一般的Linux有些不一样,甚至我查到的一些专门的树莓派raspberry系统swap文件教程依旧照搬其他Linux系统的配置方案,导致在raspberry pi os环境中不能达到预期效果。先不管教程内容讲的怎么样,至少让我觉得这些教程很不负责,所以我将尽我所能正确引导大家在raspberry pi os环境下配置自己的swap文件。

首先根据网上的教程,我找到了有关开机自动挂载的配置文件:

配置文件路径如图

查看当前配置文件内容,注意最后两行注释内容,我特地标记为黄色,注释说:“swap文件不是一个swap分区,请不要在此添加(配置),请使用(同目录下)dphys-swapfile配置文件或swapon/swapoff命令完成上述配置”

注释中已经写得很清楚了,swap文件开机自动添加的配置信息不应该在此文件中配置。

注意最后两行的注释内容

验证同目录下是否存在dphys-swapfile配置文件,很明显是存在的

查看dphys-swapfile配置文件文件内容,通过阅读注释,可以较为轻松的了解此配置文件的作用和用法。正如上文所述,系统默认给用户提供了一个大小为100MiB的swap文件/var/swap,同时给定的swap文件大小存在最大限制,32bit操作系统最大限制为2048MiB,也就是2GiB,这是需要我们注意的地方。根据注释的提示即可完成自定义swap文件在系统中的注册。

注释真的很有用,所以下次任何自定义配置都要习惯去写一些注释

万一哪天我不再需要自己创建的临时swap文件怎么办?使用sudo swapoff命令来撤销你的临时swap文件,注意后面的swap文件路径必须是绝对路径!必须是绝对路径!必须是绝对路径!我已经用黄色字体标记,有意思的是这和umount命令有异曲同工之妙,大家可以故意去试一下错,加深对命令使用的理解,真的很有趣!

可以看到命令执行完毕后,原先添加的swap文件已不再开启

确定之后一段时间内不再使用后,可以删除已创建好的swap文件,这也是swap文件比swap分区灵活的地方,大小调整会轻松许多,创建和删除也比较轻松,如果你是临时想要扩展你自己的swap空间,建议还是使用swap文件比较方便,前提是你的Linux得支持swap文件。

执行rm命令时,附上 -i 选项是一个好的习惯,这将会在开始删除文件之前给你一次反悔的机会!因为你是知道的,命令行界面没有回收站这个机制,文件被删除了在某种意义上它将不可恢复。

可以看到swap文件以被彻底删除,以释放磁盘空间

感谢你能耐心地看到文章最后,本文也只是较为浅薄地讲述了在Raspberry pi os环境下新建并使用Swap交换文件地方法,让有需要的朋友尽可能地少走一些弯路,本人也只是一个对树莓派和Linux操作系统感兴趣的业余爱好者,学识浅薄,如果文章中存在疏漏和谬误还请b站的各位大佬、朋友们批评指正。(错别字也行,培养自身文案能力,手动狗头)

关于Linux swap技术讨论可以在评论区进行,我本人还是对这些技术很感兴趣的,另外我是完全意义上的随性所欲型“鸽子”,只要我在一段时间内感兴趣的内容都会发表,只要这篇文章或多或少能帮助到你,那么它就达到了自身的使命。

在Raspberry pi os环境下新建并使用Swap交换文件的评论 (共 条)

分享到微博请遵守国家法律