在Ubuntu 18.04中增加LVM和加密文件系统的交换空间。

我进行了一次干净的Ubuntu 18.04桌面版安装。
我使用了图形化安装程序,并选择了“为安全性加密新的Ubuntu安装”。
它默认使用了LVM,并创建了一个用于交换的分区,而不是文件。这是sudo swapon -s的结果:
eviatan89@leviatan89-K55VD:~$ sudo swapon -s
Filename                Type        Size    Used    Priority
/dev/dm-2                               partition   1003516 999448  -2

我需要增加内存大小,因为我的RAM经常不足而导致很多问题。
好奇心使然,当我使用Cassandra和Firefox打开多个标签(包括YouTube)时会出现问题。我的系统有6GB的RAM。
非常感谢您的帮助!

这个链接对我很有帮助(18.04全盘加密)。 - olejorgenb
1我在想我们能否只是把分区调大一点。LVM 应该能够让这变得很简单,对吧?有人尝试过吗?在这个选项下找不到任何答案。 - AlikElzin-kilaka
我尝试使用磁盘应用程序调整分区大小,但该选项不可用。即使在我“停止”之后也是如此。我还尝试从闪存驱动器启动,这样就不会在硬盘上挂载任何内容,但是对于任何LVM分区来说,调整大小选项都不可用。这可能是因为“主”分区被锁定吗?解锁后,该选项仍然不可用。 - AlikElzin-kilaka
@AlikElzin-kilaka:是的,你需要使用kpvm来调整swap卷的大小,而且,这非常容易。 - Dan Dascalescu
@DanDascalescu 我的 swap_1 分区的 扩展逻辑卷... 功能被禁用,root减少逻辑卷... 也是如此。应该怎么办? - Bojan P.
@BojanP. 你是以超级用户身份运行 kpvm 吗? - törzsmókus
是的,我做了,其他选项也被启用了(例如,交换空间的缩减和根目录的扩展)。后来我通过创建交换文件以经典方式解决了这个问题。 - Bojan P.
7个回答

最简单的解决方案是添加一个交换文件。如果您已经对根文件系统进行了加密,我不会费心去加密交换文件,这只会稍微复杂一些,而且速度较慢。交换文件的优点是您可以随后删除它以重新获得磁盘空间。而且磁盘已经加密了!
步骤很简单。首先,创建文件。例如,以下命令将创建1GB的新交换文件:
sudo dd if=/dev/zero of=/swapfile bs=1024 count=1024k
of=/swapfile 告诉 dd 将新的交换文件放在 /swapfile 中。你可以随意命名它。你也可以添加多个交换文件。对于最近的Linux内核,速度与交换分区相同。
然后,你需要将交换文件格式化为交换空间,如下所示:
sudo mkswap /swapfile

这个命令会给你一些输出,例如:
Setting up swapspace version 1, size = 1048576 KiB

no label, UUID=83352590-ef57-49f5-84c4-7fb847e4e4e0

这就是你的新交换文件。最后,你需要使用以下命令在你的机器上激活交换。
sudo swapon /swapfile

现在,sudo swapon -s 命令应该会显示出交换分区和交换文件。
然后,我建议通过以下方式更改权限来增加一些安全性:
sudo chown root:root /swapfile
sudo chmod 0600 /swapfile

如果一切看起来都很好,您可以使用您喜欢的编辑器将以下行添加到/etc/fstab以永久添加交换文件:
/swapfile       none    swap    sw      0       0

你当然可以添加多个交换文件。而且你可以使用sudo swapoff /swapfile来删除交换文件。
希望这对你有所帮助。

4谢谢!它起作用了。 这是我用于添加4G交换文件的dd命令: sudo dd if=/dev/zero of=/swapfile bs=1024 count=4096k - leviatan89
为什么是1024k呢?我的直觉告诉我那应该是1兆字节,而不是1吉字节。 - grofte
5块大小参数'bs'以字节为单位。因此,每个1KB的1百万个块的计数为1024k或1GB。 - Martin W
2由于 OP 使用 LVM,因此使用 kpvm 轻松调整 swap 容量将更加容易。 - Dan Dascalescu
1@DanDascalescu ...除非OP不愿意仅为此问题安装KDE库,否则更容易解决。 - törzsmókus
1使用dd命令时要小心。count参数是块大小(bs)的倍数,因此如果你输入bs=1G count=32G,它将尝试分配32,000个1GB大小的块。 - thelastshadow
这是我在设置和调整交换文件大小的回答中提供的更多信息:如何在终端中增加交换文件的大小而不删除它? 所有使用加密LUKS分区的计算机都使用交换文件而不是交换分区,因为这样可以保持交换数据的加密。 - Gabriel Staples

补充最佳答案。由于我没有足够的声望来评论,抱歉。

如果您想增加交换空间并且已经分配了交换空间,请注意以下事项。

警告:关闭使用交换空间的应用程序。

首先,务必执行以下步骤,否则会出现错误

sudo swapoff -a

然后按照上面的指示继续操作。
另外,上述过程将擦除先前的交换空间,所以如果你有2GB的交换空间并且想要额外的6GB,你将需要分配一个新的9GB的交换空间。或者将交换文件命名为与其他交换文件不同的名称。
sudo dd if=/dev/zero of=/swapfile2 bs=1024 count=6144k

错误:

~ $sudo dd if=/dev/zero of=/swapfile bs=1024 count=6144k                     
dd: failed to open '/swapfile': Text file busy

注意:这是对@Martin W的答案的建议扩展。


使用LVM,您不需要交换文件。您可以非常容易地使用kpvm来调整swap卷的大小。点击此处了解如何操作。 - Dan Dascalescu

请注意,如果您的安装使用了 LVM,则可能已经存在一个交换分区。使用 kvpm 进行检查。如果不是这种情况,请按照以下简明步骤创建一个新的 4GB 交换文件。首先关闭使用交换空间的任何应用程序(或重新启动计算机)。然后执行以下操作:
sudo swapoff -a                                    # Turn off all swap space.
sudo rm /swapfile                                  # Delete current swap file.
sudo dd if=/dev/zero of=/swapfile bs=1G count=4    # Make a new 4GB swap file.
sudo chown root:root /swapfile                     # Set owner to root, group root
sudo chmod 0600 /swapfile                          # Set permission to root
sudo mkswap /swapfile                              # Convert file to swap format
sudo swapon /swapfile                              # Enable swap space

运行 `htop` 或其他系统监视器以检查新的交换分区是否生效。如果一切正常,通过将以下行添加到 `/etc/fstab` 文件中使交换文件永久化:
/swapfile       none    swap    sw      0       0

如果我需要12GB的交换空间,我只需要将count = 12288更改为正确吗? - user_6396
1确实,4096*3=12288 - Alexis Paques
使用LVM,您不需要交换文件。LVM使得使用kpvm轻松调整swap的大小。 - Dan Dascalescu

默认情况下,它使用LVM并创建了一个用于交换的分区,而不是文件。
实际上,那并不是一个分区,而是一个LVM(逻辑卷管理)卷。您可以使用kvpm查看LVM卷。

kpvm screenshot with swap volume

因此,您问题的正确答案不是创建另一个交换目标(交换文件),而是使用kvpm调整交换卷的大小:右键单击swap卷,然后选择扩展逻辑卷
如果该选项不可用,则可能需要先减小另一个卷的大小。

在使用Ubuntu 19.10上的zfs时,它能正常工作吗? - AlikElzin-kilaka
3我的swap_1分区的扩展逻辑卷功能被禁用了,root的缩小逻辑卷功能也被禁用了。该怎么办? - Bojan P.
可以通过使用 kvpm 来减小其他卷的大小吗? - mwfearnley

这个答案基于Ubuntu 22.04 LTS

减少根目录并增加交换空间(备份重要数据!)

增加加密交换空间中复制了我的答案。

在这里,我们将根目录减少40G,并增加交换空间40G:

# Boot Ubuntu Live/Flash/"Try Ubuntu" AND open terminal
# Run subsequent commands as superuser
sudo su
    # `sudo`    => Execute a command as another user.
    # `sudo su [user]` => Run a command with substitute user, default is root.

# Encrypted device should NOT be unlocked
lsblk # => list block devices
    # └─sda6 => no `crypt`/`lvm``

# Unlock encrypted device
cryptsetup open /dev/sda6 crypt # Enter passphrase
    # `cryptsetup` => Manage dm-crypt + LUKS encrypted volumes.
    # `cryptsetup open <device> <name>` => Opens encrypted lv as <name>

# Get logical volume identifiers
lsblk
    # └─sda6                  8:6    0 464,6G  0 part
    #   └─sda6_crypt        253:0    0 464,5G  0 crypt
    #     ├─vgubuntu-root   253:1    0 463,6G  0 lvm   /
    #     └─vgubuntu-swap_1 253:2    0   980M  0 lvm   [SWAP]

# Shrink logical root volume AND filesystem
lvresize --verbose --resizefs -L -40G /dev/mapper/vgubuntu-root
    # `lvresize` <volume> => resize a logical volume
    #   --verbose  => Give more info.
    #   --resizefs => Resize filesystem AND LV with fsadm(8).
    #   -L         => Specifies the new size of the LV, 
    #                 +/- add/subtracts to/from current size, g|G is GiB.

# Check filesystem of logical root volume for errors
e2fsck -f /dev/mapper/vgubuntu-root
    # `e2fsck`<fs-path> => Check a Linux ext2/ext3/ext4 file system
    #   -f => Force checking even if the file system seems clean.

# Increase swapsize
lvresize --verbose -L +40G /dev/mapper/vgubuntu-swap_1

重启后,Ubuntu应该正常启动,交换空间的大小应该被调整。
lslbk
   # └─sda6                  8:6    0 464,6G  0 part  
   #   └─sda6_crypt        253:0    0 464,5G  0 crypt 
   #     ├─vgubuntu-root   253:1    0 423,6G  0 lvm   /
   #     └─vgubuntu-swap_1 253:2    0    41G  0 lvm   [SWAP]

如果你正在使用Mint 19.X版本,以下是一些简明的步骤:
sudo dd if=/dev/zero of=/swapfile bs=1024 count=10240k # make 10G swapfile
sudo chown root:root /swapfile
sudo chmod 0600 /swapfile
sudo mkswap /swapfile

编辑 /etc/fstab 文件。
注释掉以下行:/dev/mapper/mint--vg-swap_1 none swap sw 0 0
添加以下行:/swapfile none swap sw 0 0
然后重新启动。

在Ubuntu上使用图形界面的方法

  1. 打开Disks。然后转到您想要添加交换空间的驱动器。
  2. 点击添加分区,然后选择所需的GB数量。
  3. 点击下一步,然后在类型中选择其他,然后下一步。
  4. 选择Linux交换分区并继续。 完成后,将驱动器挂载为交换空间。通过点击挂载按钮。

查看图片