如何安全地永久关闭交换并回收空间?(在 Debian Jessie 上)

Lin*_*eak 70 linux filesystems partition debian swap

我在我的 SSD 驱动器上安装了带有默认分区的 Debian Jessie。我当前的磁盘分区如下所示:

我当前的磁盘分区如下所示

由于我有 16GB 的 RAM,我假设我不需要swap。但是由于我有其他磁盘驱动器,因此我可能会在其他驱动器之一上创建交换文件

你能告诉我我应该采取什么步骤来正确和永久地删除交换分区以使其不占用磁盘空间吗?我希望删除交换分区,因为我目前只有 128GB SSD。

这是我每次尝试并重新启动的内容;这些步骤中的每一个都不是永久性的,或者没有做任何事情

  1. 使用该swapoff实用程序:

    swapoff --all
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用GParted实用程序:

    右键单击交换分区并单击交换。

  3. 在以下文件中注释掉交换分区的UUID

    /etc/fstab
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在以下文件中注释掉交换分区的UUID

    /etc/initramfs-tools/conf.d/resume
    
    Run Code Online (Sandbox Code Playgroud)
  5. 最后运行这些命令(按此顺序和相反顺序):

    update-grub
    
    update-initramfs -u
    
    Run Code Online (Sandbox Code Playgroud)

Lin*_*eak 64

  1. 如果您已打开GParted,请将其关闭。它的掉期功能似乎不是永久性的。

  2. 打开终端,变成root( su); 如果您已sudo启用,您也可以这样做sudo -i;查看man sudo所有选项):

     sudo -i
    
    Run Code Online (Sandbox Code Playgroud)
  3. 关闭特定的交换分区和/或所有的交换S:

     swapoff --all
    
    Run Code Online (Sandbox Code Playgroud)
  4. 确保 100% 确定特定交换分区已关闭:

     cat /proc/swaps
    
    Run Code Online (Sandbox Code Playgroud)
  5. 打开您熟悉此文件的文本编辑器,例如,nano如果不确定:

     nano /etc/fstab
    
    Run Code Online (Sandbox Code Playgroud)
  6. 注释掉/删除交换分区的UUID,例如:

     # UUID=1d3c29bb-d730-4ad0-a659-45b25f60c37d    none    swap    sw    0    0
    
    Run Code Online (Sandbox Code Playgroud)
  7. 打开您熟悉此文件的文本编辑器,例如,nano如果不确定:

     nano /etc/initramfs-tools/conf.d/resume
    
    Run Code Online (Sandbox Code Playgroud)
  8. 注释掉/删除先前标识的交换分区的UUID,例如:

     # RESUME=UUID=1d3c29bb-d730-4ad0-a659-45b25f60c37d
    
    Run Code Online (Sandbox Code Playgroud)
  9. 不要关闭终端,因为你以后会需要它。

注意:接下来的步骤取决于您是依赖CLI还是GUI


图形用户界面

  1. 从菜单中打开GParted,或者从我们打开的终端中更方便地打开:

     gparted
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果你没有安装它,你可以这样做;然后再次运行前面的命令:

     apt-get install gparted
    
    Run Code Online (Sandbox Code Playgroud)
  3. 从右上角的菜单中选择您的驱动器。

  4. 由于GParted在启动时重新激活交换分区,您必须右键单击特定的交换分区并单击 Swapoff -> 这将立即应用。

  5. 删除与右击分区- >删除。您必须立即应用更改。

  6. 右键单击 -> 调整大小/移动来调整主/其他分区的大小。您必须立即应用更改。

  7. 回到终端,让我们重新创建启动映像

     update-initramfs -u -k all
    
    Run Code Online (Sandbox Code Playgroud)
  8. 更新GRUB

     update-grub
    
    Run Code Online (Sandbox Code Playgroud)
  9. 如果您想测试机器是否启动,您现在可以重新启动。

加密注意:如果你的swap分区是加密的,那么你还需要注释掉里面的相关行/etc/crypttab,否则CryptSetup会让你在启动时等待90秒。感谢弗兰克的补充。


命令行

如果我的解决方案有效,我会检查VM,然后我会分享它。同时,请参阅此答案


max*_*zig 56

以 root 身份执行:

# swapoff -a
Run Code Online (Sandbox Code Playgroud)

并且要使更改永久化,请编辑/etc/fstab并删除或注释掉交换条目。

  • 只需将 `swapoff -a` 放在 `/etc/rc.local` 中。启动时交换 *on* 几毫秒是没有问题的。使用 16GB RAM 时不会长时间写入任何内容。只需*将交换空间留在那里*(磁盘空间很便宜)并且*不要更改*`/etc/fstab`。 (2认同)

And*_*rie 21

注释/删除 中的相关条目/etc/fstab以防止它在下次启动时重新启用,然后重新启动或运行swapoff -a以禁用当前运行系统的交换分区的使用。

现在删除交换分区,将系统分区扩展到未使用的空间并扩展实际的文件系统。我不知道您的图形分区管理器是否可以完成所有这些,但如果不能,这里是使用fdiskand执行此操作的一种与发行版无关的方式resize2fs

# fdisk /dev/sdX

# Display current partition table, copy/paste this output somewhere to be able to go back in case you screw up

Command (m for help): p
Device       Boot  Start    End Sectors Size Id Type
/dev/sda1        2048  22527   20480  10M ef EFI (FAT-12/16/32)
/dev/sda2       22528 186367  163840  80M 83 Linux
/dev/sda3      186368 204799   18432   9M 82 Linux swap / Solaris

# Delete the swap partition

Command (m for help): d
Partition number (1-3, default 3): 3
Partition 3 has been deleted.

# Delete the system partition

Command (m for help): d
Partition number (1,2, default 2): 2
Partition 2 has been deleted.

# Create a new system partition starting the same as the old one but ending a bit farther, at the end of the (now deleted) swap partition

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (2-4, default 2): 
# Enter the same start sector as the old part.
First sector (22528-204799, default 22528): 22528
# Enter the end sector of the old swap partition
Last sector, +sectors or +size{K,M,G,T,P} (22528-204799, default 204799): 204799

Created a new partition 2 of type 'Linux' and of size 89 MiB.

# Save the changes
Command (m for help): w
The partition table has been altered.
Run Code Online (Sandbox Code Playgroud)

最后,我们扩展当前文件系统以使用新的可用空间(直到现在实际的文件系统不知道我们为其底层分区添加了更多空间)。默认情况下,resize2fs除非给出固定大小,否则使用整个分区,因此我们不必指定除分区块设备以外的任何内容。可以在挂载分区的情况下在线完成文件系统的增长(而不是缩小):

# resize2fs /dev/sda2
Run Code Online (Sandbox Code Playgroud)

现在您已成功禁用交换并回收未使用的空间,甚至无需重新启动。

请注意,Debian 的过程略有不同,需要编辑更多文件。查看此答案以获取更多信息。