如何在不使用服务器上的 GUI 的情况下使用命令行调整分区大小?

ham*_*fzm 67 command-line partitioning swap

我只能通过终端访问服务器,不能使用 GParted 等图形工具!
我想从根的一部分(大约 768mb)创建一个新分区以进行交换。

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         20G  1.3G   18G   7% /
udev             10M     0   10M   0% /dev
tmpfs           199M  4.9M  194M   3% /run
tmpfs           100M   12K  100M   1% /run/user
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
Run Code Online (Sandbox Code Playgroud)

tot*_*tti 46

如果安装了存储设备上的任何分区,则无法缩小/编辑分区。因此,为了卸载和编辑根文件系统,需要关闭操作系统。然后启动到实时系统并按照其他答案中的描述编辑分区。

替代解决方案:交换文件

作为创建整个分区的替代方案,交换文件提供了动态改变其大小的能力,并且更容易完全删除。交换文件可以热插拔。即可以在不卸载/关闭操作系统的情况下添加和删除。

  1. 创建一个 512 MB 的文件,名为/swapfile. 这将是我们的交换文件。

    fallocate -l 512M /swapfile  
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    dd if=/dev/zero of=/swapfile bs=1M count=512
    
    Run Code Online (Sandbox Code Playgroud)
  2. 设置正确的权限(因为全局可读的交换文件是一个巨大的本地漏洞):

    chmod 600 /swapfile
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建正确大小的文件后,将其格式化为交换:

    mkswap /swapfile
    
    Run Code Online (Sandbox Code Playgroud)
  4. 激活交换文件:

    swapon /swapfile
    
    Run Code Online (Sandbox Code Playgroud)
  5. 编辑/etc/fstab并为交换文件添加一个条目:

    /swapfile none swap defaults 0 0
    
    Run Code Online (Sandbox Code Playgroud)

更多详情请见arch linux wiki

  • 如果文件碎片化,则性能略低。连续交换文件或分区都没有性能优势,两者的处理方式相同。 (2认同)

Lui*_*ado 39

首先很重要的是要知道,如果您正在使用它,则无法调整大小以缩小根分区(这称为在线缩小)。您只能在线种植它。该resize2fs命令支持这一点。我将假设以下内容:

  • 您不想丢失根分区上的信息。
  • 您无法物理访问硬盘来使用 LiveCD。这可以适用于虚拟环境或远程环境。在虚拟机的情况下,如果您将 VM 设置为从 LiveCD 启动,您仍然可以设法从 LiveCD 启动。这是假设 VM 支持从运行 Gparted 应用程序以轻松调整大小的位置输出桌面 GUI。但由于这不太可能,我认为你不能。

有两种类型的分区可以调整大小,LVM 分区或逻辑卷管理器分区,它们支持自星系创建以来的在线调整大小(缩小/增长)和我们大多数人使用的标准分区。目前唯一一个几乎 100% 支持完全在线调整大小(收缩/增长)的是 btrfs 文件系统(仍在开发中)。我将解释如何做我们大多数人在 ext4 文件系统中使用的普通分区。

调整(扩大)分区的大小

要增加您的分区,您可以在安装根目录的情况下进行。要做到这一点,只需执行以下操作:

sudo resize2fs /dev/sda1
Run Code Online (Sandbox Code Playgroud)

如果您已经准备好合并的空白空间。之后我建议重新启动以使更改正确生效。上面的命令将调整到允许的最大值。如果您希望调整到特定大小,只需在最后添加大小:

sudo resize2fs /dev/sda1 25G
Run Code Online (Sandbox Code Playgroud)

请注意,如果要指定 25.4 GB,则不能使用“.”。你需要减少一个计量单位。在这种情况下,从 GB 到 MB,所以它看起来像这样:

sudo resize2fs /dev/sda1 25400M
Run Code Online (Sandbox Code Playgroud)

这样你就会有一个25.4G的分区

调整(缩小)分区大小

缩小分区是一个两步过程,包括:

  • 根据需要减少文件系统的大小。
  • 减少底层块设备的大小以匹配文件系统的大小。

在减少文件系统的容量之前,您需要减少块设备的大小(可以是分区或逻辑卷)。由于这不适用于任何 ext* 文件系统,因此您将无法将其从 20 GB 缩小到 19.5 GB 以创建 500 MB 交换文件系统。

甚至 Ext4 也不支持在线收缩。如果您尝试这样做,您将获得以下信息:

在此处输入图片说明

据我所知,你唯一的赌注是:

  • 在同一台服务器上安装另一个 Ubuntu 版本(在另一个分区上),然后可以用来缩小原始 Ubuntu 服务器的根分区。

  • 使用您实际想要的大小从头开始安装 Ubuntu 服务器

  • 使用 Ubuntu Server Live Image 调整分区大小。对于这种情况,您需要进入此屏幕:

    在此处输入图片说明

    然后选择调整大小选项,如上图所示。从那里您将选择新的尺寸,因为从这里您可以卸载该单元并根据需要缩小它。

作为额外的帮助,gparted 文件系统支持http://gparted.org/features.php,它提供了一个非常详细的支持列表,并包括它们是否具有完整的在线调整大小。Btrfs 就是其中之一。

  • 来自 resize2fs 联机帮助页:`resize2fs 程序不操作分区的大小。` (5认同)

nol*_*eti 8

答案取决于您是否可以卸载要缩小的分区。在您的情况下,您可能无法卸载分区。在 Linux (UNIX/MAC OS) 中,挂载分区是指使用文件系统并将其映射到挂载点(在您的情况下/)。卸载意味着您停止使用文件系统,并删除到挂载点的映射。您无法卸载包含正在运行的操作系统的文件系统。

如果分区可以卸载

假设您想在/dev/sda4挂载到/data. 它当前包含音乐和电影或类似内容,因此您可以暂时卸载它。您想创建一个 4GB 的交换。

sudo umount /dev/sda4
Run Code Online (Sandbox Code Playgroud)

卸载分区。

sudo resize2fs /dev/sda4 196G
Run Code Online (Sandbox Code Playgroud)

假设有足够的空间,将 ext4 文件系统的大小调整为 196 GB。现在,您必须缩小分区。我目前相信您需要使用cfdisk删除现有分区,并在其位置重新创建一个较小的分区。然后,您还可以为交换创建一个新分区。

sudo cfdisk /dev/sda 
Run Code Online (Sandbox Code Playgroud)

会给你一个基于文本的 gui 来检查你的分区表。我会建议你print在那个时候把分区表放到一个文件或屏幕上,并记下当前的配置作为备份。然后您可以选择/dev/sda4delete分区。在它的位置,free space将显示。用于new在其位置创建一个 196 GB 的新分区,并将类型设置为 ext4。然后,移至尾随可用空间并创建类型为 的 4GB 交换分区swap注意:我没有测试这些命令,因为我现在不能玩我/的。

如果分区无法卸载

您不能缩小已安装的 ext3/4 分区(请参阅 的联机帮助页resize2fs)。当您从 运行您的操作系统时/,您无法卸载/。这意味着您必须启动另一个操作系统(例如从 USB 密钥)来进行更改。

在您的情况下,它是一个远程服务器(最有可能在 KVM 上),因此您可能无法从 USB/实时操作系统映像启动。可能还有其他方法可以通过管理 GUI 从您的 vServer 提供程序更改分区。我相信这是你目前最好的选择。

  • 如果分区无法卸载并且我想要增大而不是缩小怎么办? (2认同)