如何在Linux上使用交换文件而不是交换分区

本文介绍如何从交换分区迁移到交换文件。如果您不需要禁用现有的交换分区,而只需要创建和激活交换文件,请跳过步骤1和2。
Ubuntu 18.04桌面有一个很大的交换分区,我想将其用于其他目的,并将交换移至文件中。 Ubuntu 18.04默认已经使用交换文件而不是交换分区,但是由于您已升级到最新的Ubuntu版本而不是全新安装,因此系统将继续使用交换分区。因此,我必须自己将交换位置移到文件中。结果,以下步骤在Ubuntu 18.04桌面上进行了测试。但是,它可以在任何Linux发行版上使用。
重要的是要提一下 无法将交换文件与BTRFS文件系统一起使用 (感谢艾萨克在评论中提到这一点)。
另外,使用交换文件时,休眠(至磁盘)开箱即用。您可以执行此操作,但是无法测试它,因为先前从系统上的休眠状态重新启动对于切换到交换文件不起作用。因此,我们放弃了休眠方式的使用。另外,默认情况下,大多数Linux发行版都使用暂挂(到RAM)而不是休眠(到磁盘)。如果您需要在交换文件中启用休眠模式,请参考以下信息 在这里。挂起(至RAM)不受此影响。

如何将交换移动到Linux文件系统上的文件

1.关闭当前的交换分区。
要查看活动的交换分区:

swapon -s

就我而言,命令输出如下所示:

Filename    Type        Size       Used   Priority
/dev/sda5   partition   15624188   0      -2

您可以使用以下命令关闭当前的交换设备。

sudo swapoff /dev/sdXX

哪里 /dev/sdXX 列出的设备 swapon -s 命令(在“文件名”部分下- /dev/sda5 就我而言(来自上面的示例),将其替换为交换分区。从/ etc / fstab文件中删除旧的交换项。
要删除旧的交换条目, /etc/fstab 以root用户身份在文本编辑器中归档并删除交换行。不要改变任何其他 /etc/fstab 档案!更改此文件中的其他任何内容都可能导致系统无法启动!
您可以从命令行使用Nano编辑器打开文件,如下所示:

sudo nano /etc/fstab

然后删除包含交换分区信息的条目(您也可以注释掉该行 # 在此之前)。例如,在我的情况下,交换条目如下所示:

UUID=d1b17f9c-9c5e-4471-854a-3ccaf358c30b none swap sw 0 0

如您所见,交换条目包含 swapsw -这是一种知道要删除(或注释掉)的行的方法。
然后 Ctrl + O然后 Enter 保存文件。保存文件后退出Nano编辑器 Ctrl + X.3。创建一个交换文件。
要创建一个1GB的交换文件,请使用以下命令:

sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576

其中:

  • /swapfile 交换文件的路径和名称。您可以将其更改为其他内容。
  • 后号 count (1048576)是1GB。如果使用较大的交换文件,则增加。例如,如果您使用5GB交换文件,则将此数字乘以5(因此5242880 count= 5GB交换文件值)。

如果要使用其他交换文件名和路径,请改用它 /swapfile 4以下所有说明。将交换文件权限设置为600。
使用此选项可以防止其他用户读取可能包含敏感信息的交换文件。
要将交换文件权限设置为600,请使用以下命令:

sudo chmod 600 /swapfile

5.将新创建的文件格式化为swap。

sudo mkswap /swapfile

6.激活新创建的交换文件。

sudo swapon /swapfile

要检查是否正在使用新的交换文件:

swapon -s

输出应类似于以下内容:

Filename    Type   Size      Used   Priority
/swapfile   file   5242876   0      -2

7.复制新创建的交换文件 /etc/fstab
要在每次引导时使用新的交换文件,需要将其添加到。 /etc/fstab 文件开了 /etc/fstab 使用文本编辑器(作为根目录),例如Nano:

sudo nano /etc/fstab

然后将以下行添加到此文件:

/swapfile none swap sw 0 0

要保存文件(如果使用的是Nano命令行编辑器),请按Ctrl + O,然后按Enter。要在保存文件后退出Nano编辑器,请按Ctrl +X。再说一次 /etc/fstab 档案!更改此文件中的其他任何内容都可能导致系统无法启动! 8。对于基于Ubuntu和Debian的Linux发行版,此步骤是必需的(其他人不知道是否需要这样做)。
需要编辑 /etc/initramfs-tools/conf.d/resume 归档并注释掉(添加 # 在一行的开头) RESUME=UUID=... 行。就我而言,如果我不这样做,那么我会有15-20秒的额外启动时间。的 systemd-analyze blame 该命令没有提供有关发生原因的任何信息,因此我不得不花很多时间来找出导致启动延迟的原因。
幸运的是,在启动过程中,我注意到一条简短的“等待暂停/恢复设备”消息。 被挑衅 没有正确的交换UUID /etc/initramfs-tools/conf.d/resume
从休眠状态恢复时使用了此文件,由于缺少交换分区,启动被延迟了。
注释掉这一行 /etc/initramfs-tools/conf.d/resume只需运行以下命令:

sudo sed -i 's/^RESUME=UUID/#RESUME=UUID/g' /etc/initramfs-tools/conf.d/resume

您还需要更新initramfs,然后完成。

sudo update-initramfs -u
Sidebar