使用加密 LVM 调整 Ubuntu 20.04 上交换分区的大小

jdp*_*ipe 10 lvm swap ecryptfs 20.04

我有一个非常标准的 Ubuntu 20.04 设置,带有 LVM 和加密硬盘。然而,标准设置似乎提供了一个非常小的 900 MB 交换空间(或者是我选择的?),现在它经常导致我出现内存不足的问题,尽管我有 16 GB RAM。我的 500 GB SSD 上有足够的可用空间,但无法找到有关如何增加交换大小的明确说明。我想保留加密交换作为分区,而不是用文件替换它。

我查看了几个选项,但没有看到任何看起来像我希望的那么简单的东西:

  • 此方法需要从单独的 USB/CD 启动——可以避免吗?(它不会需要某种密码——如何首先提取它?)
  • 此方法建议使用 KDE 分区管理器,但没有涵盖减小主分区的大小,而且看起来并不简单。
  • 此方法建议删除现有空间并在/. 我不清楚采用该方法是否可以提供加密交换,如果可能的话,我更愿意坚持使用 Ubuntu 安装程序提供的相同 LVM 架构。
  • 最后,我对此不确定因为fdisk -l没有向我显示 a /dev/sda,而是/dev/nvme0n1,所以我不确定这些说明是否适用于我的情况。

gou*_*oup 8

\n

此方法需要从单独的 USB/CD 启动

\n
\n

要缩小根卷,必须将其卸载,卸载根卷后,您基本上无法使用系统。

\n
\n

此方法建议使用 KDE 分区管理器,但不包括减小主分区的大小

\n
\n

KDE 分区管理器可能很危险LVM 分区被破坏普通分区被破坏

\n
\n

此方法建议删除现有空间并在 / 中创建交换文件

\n
\n

看来没有必要。

\n
\n

TL;DR(备份重要数据!)-减少root并增加swap

\n

这个答案基于 Ubuntu 22.04 LTS

\n

复制了我的答案增加加密交换的大小

\n

这里我们减少 root -40G 并增加 swap +40G:

\n
# Boot Ubuntu Live/Flash/"Try Ubuntu" AND open terminal\n# Run subsequent commands as superuser\nsudo su\n    # `sudo`    => Execute a command as another user.\n    # `sudo su [user]` => Run a command with substitute user, default is root.\n\n# Encrypted device should NOT be unlocked\nlsblk # => list block devices\n    # \xe2\x94\x94\xe2\x94\x80sda6 => no `crypt`/`lvm``\n
Run Code Online (Sandbox Code Playgroud)\n
# Unlock encrypted device\ncryptsetup open /dev/sda6 crypt # Enter passphrase\n    # `cryptsetup` => Manage dm-crypt + LUKS encrypted volumes.\n    # `cryptsetup open <device> <name>` => Opens encrypted lv as <name>\n\n# Get logical volume identifiers\nlsblk\n    # \xe2\x94\x94\xe2\x94\x80sda6                  8:6    0 464,6G  0 part\n    #   \xe2\x94\x94\xe2\x94\x80sda6_crypt        253:0    0 464,5G  0 crypt\n    #     \xe2\x94\x9c\xe2\x94\x80vgubuntu-root   253:1    0 463,6G  0 lvm   /\n    #     \xe2\x94\x94\xe2\x94\x80vgubuntu-swap_1 253:2    0   980M  0 lvm   [SWAP]\n\n# Shrink logical root volume AND filesystem\nlvresize --verbose --resizefs -L -40G /dev/mapper/vgubuntu-root\n    # `lvresize` <volume> => resize a logical volume\n    #   --verbose  => Give more info.\n    #   --resizefs => Resize filesystem AND LV with fsadm(8).\n    #   -L         => Specifies the new size of the LV, \n    #                 +/- add/subtracts to/from current size, g|G is GiB.\n\n# Check filesystem of logical root volume for errors\ne2fsck -f /dev/mapper/vgubuntu-root\n    # `e2fsck`<fs-path> => Check a Linux ext2/ext3/ext4 file system\n    #   -f => Force checking even if the file system seems clean.\n\n# Increase swapsize\nlvresize --verbose -L +40G /dev/mapper/vgubuntu-swap_1\n
Run Code Online (Sandbox Code Playgroud)\n

重新启动后,Ubuntu应该正常启动,swap应该调整大小:

\n
lslbk\n    # \xe2\x94\x94\xe2\x94\x80sda6                  8:6    0 464,6G  0 part  \n    #   \xe2\x94\x94\xe2\x94\x80sda6_crypt        253:0    0 464,5G  0 crypt \n    #     \xe2\x94\x9c\xe2\x94\x80vgubuntu-root   253:1    0 423,6G  0 lvm   /\n    #     \xe2\x94\x94\xe2\x94\x80vgubuntu-swap_1 253:2    0    41G  0 lvm   [SWAP]\n
Run Code Online (Sandbox Code Playgroud)\n

如果系统监视器仍然只有初始的1G则需要重写逻辑交换设备:

\n
swapon --show\n    # NAME      TYPE      SIZE USED PRIO\n    # /dev/dm-2 partition 976M   0B   -2\n\nswapoff -v /dev/dm-2\n    # swapoff /dev/dm-2\n\nmkswap /dev/dm-2\n    # mkswap: /dev/dm-2: warning: wiping old swap signature.\n    # Setting up swapspace version 1, size = 41 GiB (43973079040 bytes)\n    # no label, UUID=...\n
Run Code Online (Sandbox Code Playgroud)\n


xof*_*fer 2

我在 Kubuntu 20.04 上也遇到了同样的问题。(我实际上怀疑我的系统在没有交换的情况下会更加稳定。)

以下是一些可帮助您入门的信息:

  1. Kubuntu 安装程序(根据您的帖子和链接文章,我认为 Ubuntu 安装程序非常相似)在其中一个磁盘分区上创建一个加密的 LVM 卷。该卷中有 2 个卷——有效分区。对我来说,加密卷是/dev/nvme0n1p3,但名称取决于您的系统。这 2 个分区是:
  • /dev/vgkubuntu/root
  • /dev/vgkubuntu/swap_1
  1. 您无法调整已安装分区的大小。在这种情况下,一旦您启动计算机、解密磁盘并登录,就无法安全卸载根磁盘。因此需要使用实时 USB 或其他机器。
  2. 在这种情况下,使用交换分区而不是交换文件并没有真正的好处——两者都将位于加密分区内。交换文件可能更方便,因为您可以在正常登录后轻松调整它的大小。然而,设置工作还需要一些工作。

您的 2 个选择是:

  1. 调整交换分区的大小
  2. 创建一个交换文件并(可选)回收交换分区(通过删除它并扩展根分区)

无论哪种情况,您都必须使用实时 USB 或将物理磁盘移动到另一台计算机,因为您无法调整已安装分区的大小,并且在不先解密的情况下无法看到加密卷中的分区。

我使用了刚刚用来安装 Kubuntu 20.04 的 live USB,并且因为我很懒而选择调整现有分区的大小。

  1. 启动实时USB——将其放入机器中,启动它,混合所有按键,让您选择启动设备等。
  2. 等待 Kubuntu 加载 -- 选择 Try Kubuntu
  3. 打开终端模拟器,sudo su成为root
  4. 运行lsblk以查找加密的设备名称。它可能是列表中的最后一个,而且几乎肯定是最大的一个。
  5. 解密它:cryptsetup open /dev/<device> <some new device name>例如cryptsetup open /dev/nvme0n1p3 cr-ext——系统将提示您输入密码。该密码与正常启动期间用于解密磁盘的密码相同。
  6. 现在您可以运行 KDE 分区管理器。您应该vgkubuntu在设备列表中看到 - 单击以突出显示。您应该在分区列表中看到根分区和交换分区。
  7. 调整大小/移动根分区以将其缩小到您想要扩大交换分区的程度。(我选择+32 GB,因为我可能会在某个时候拥有那么多 RAM,额外的 900MB 或其他任何东西都是很好的填充,因为你永远不知道添加 RAM 时最终会产生多少字节,并且你需要交换 > 物理睡觉,我很懒。)它不会让我准确输入我想要的 MB(当前大小 - (32*1024))b/c,我不知道,块大小或其他东西,所以我输入了一些接近的东西然后点击向上箭头直到它阻止我。
  8. 增加交换分区以填充空间。
  9. 单击“应用”。成功后,您可以重新启动,移除 USB 驱动器并正常启动。