如何在服务器上使用命令行而不使用图形界面来调整分区大小?

我只能通过终端访问服务器,无法使用像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

请按照以下步骤操作:https://packetpushers.net/ubuntu-extend-your-default-lvm-space/ - user3437245
3个回答

如果存储设备上的任何分区被挂载,您将无法缩小/编辑分区。因此,为了卸载和编辑根文件系统,操作系统需要关闭。然后启动到一个活动系统,并按照其他答案中描述的方式编辑分区。

备选方案:交换文件

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

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

    fallocate -l 512M /swapfile  
    

    或者

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

    chmod 600 /swapfile
    
  3. 在创建了正确大小的文件后,将其格式化为交换文件:

    mkswap /swapfile
    
  4. 激活交换文件:

    swapon /swapfile
    
  5. 编辑/etc/fstab并添加交换文件的条目:

    /swapfile none swap defaults 0 0
    

更多详细信息请参见arch linux wiki


我认为这是最简单和高效的答案!然而,使用文件而不是分区会有什么影响吗? - Alaa Ali
2如果文件碎片化,性能会稍微降低。无论是连续的交换文件还是分区,都没有性能优势,两者都被以相同的方式处理。 - totti
1我认为这是最好的解决方案。由于您并没有格式化、压缩或其他方式改变分区(表),因此不会有数据丢失的风险。 - R110

首先,重要的是要知道,如果您正在使用根分区,您不能调整其大小以缩小它(这称为在线缩小)。您只能在线扩展它。这由resize2fs命令支持。我将假设以下情况:
  • 您不想丢失根分区上的信息。
  • 您无法物理访问硬盘以使用LiveCD。这可能适用于虚拟环境或远程环境。在虚拟环境中,如果您设置虚拟机从LiveCD启动,您仍然可以成功引导。这是基于虚拟机是否支持输出桌面GUI,您可以从中运行Gparted应用程序轻松调整大小。但由于这种情况较少见,我假设您无法这样做。

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

调整大小(扩展)分区

要扩展您的分区,您可以在根目录下进行操作。只需执行以下步骤即可:
sudo resize2fs /dev/sda1

只要你已经准备好要合并的空白空间,之后我建议重新启动以使更改正确生效。上述命令将调整到最大允许大小。如果你想调整到特定的大小,只需在末尾添加相应的尺寸即可。
sudo resize2fs /dev/sda1 25G

请注意,如果您想指定25.4 GB,就不能使用小数点"."。您需要降低一个计量单位。在这种情况下,从GB降到MB,所以应该是这样的:
sudo resize2fs /dev/sda1 25400M

这样你就会有一个25.4G的分区。
调整(缩小)分区的过程包括两个步骤:
1. 减小文件系统的大小,使其符合需求。 2. 减小底层块设备的大小,使其与文件系统相匹配。
在减小文件系统容量之前,您需要减小块设备的大小(可以是分区或逻辑卷)。由于 ext* 文件系统不支持此功能,您无法将其从 20 GB 缩小到 19.5 GB 来创建 500 MB 的交换空间。
即使是 Ext4 也不支持在线缩小。如果您尝试这样做,您将会得到以下提示:

enter image description here

据我所知,你唯一的选择是:
1. 在同一台服务器上安装另一个Ubuntu版本(在另一个分区上),然后使用该版本来缩小原始Ubuntu Server的根分区。 2. 从头开始安装所需大小的Ubuntu服务器。 3. 使用Ubuntu Server Live Image来调整分区大小。对于这种情况,你需要进入以下屏幕: ![enter image description here](https://istack.dev59.com/5XhC9.webp) 然后选择上面图片中显示的“Resize”选项。从那里,你可以选择新的大小,因为你可以卸载该单元并缩小它。
此外,这里还有gparted文件系统支持的详细列表http://gparted.org/features.php,其中包括是否支持完全在线调整大小。其中之一是Btrfs。

我很好奇,有没有其他支持在线缩小的文件系统?比如ZFS或Btrfs? - Seth
我已在底部添加了一个链接。如果文件系统要正确地在线调整大小,内核也需要支持此功能。 - Luis Alvarado
我在 VMware 虚拟机上有一个 Ubuntu 服务器,其磁盘大小为 120G。但是在使用第一个解决方案后,我遇到了以下错误:文件系统已经有 27262720 个块的长度。无需进行任何操作! - Dr.jacky
嗨@Mr.Hyde,你能告诉我你在Ubuntu上使用的VMware版本和设置吗?这样我就可以尝试复制这个问题了。 - Luis Alvarado
@LuisAlvarado VMware Workstation v.10.0.4-build 2249910 --- Ubuntu 12.04.5 LTS Linux 3.13.0-32-generic x86_64 --- 内存:5GB,处理器:4,硬盘:之前:120GB,扩展后:200GB --- 扩展后,VMware 弹出一个窗口提示重新分区。 - Dr.jacky
1谢谢@Mr.Hyde。Workstation 10和11都有一些问题。我建议使用12版本,并且对于Ubuntu系统,也建议更新到最新版本或者新的LTS版本,因为也存在一些问题。在我的情况下,我使用的是VMware Workstation 12.0.1和Ubuntu 15.10 64位版本。 - Luis Alvarado
6从resize2fs的man页面中可以看到:“resize2fs程序不会改变分区的大小。” - ACK_stoverflow
1@ack_stoverflow,在man手册中这是不正确的。我多次使用resize2fs来调整分区大小。我认为他们真的需要更新一下man手册。答案中提到了文件系统的限制,但是调整大小仍然是可行的。 - Luis Alvarado
@LuisAlvarado 的 man 页是正确的,我刚刚遇到了这个错误,如果分区已满,需要使用 parted。 - lsborg
我不得不在我的Ubuntu 22.04虚拟机上使用growpart /dev/sda 2resize2fs来扩展磁盘。 - northben

答案取决于您是否能够卸载分区并将其缩小。在您的情况下,您可能无法卸载分区。在Linux(UNIX/Mac OS)中,“挂载”分区是指使用文件系统并将其映射到挂载点(在您的情况下为“/”)。“卸载”意味着您停止使用文件系统,并删除与挂载点的映射。您无法卸载包含正在运行的操作系统的文件系统。
如果可以卸载分区
假设您要缩小一个200GB的ext4分区,该分区挂载在/dev/sda4上,挂载点为/data。它当前包含音乐、电影或类似的内容,因此您可以暂时卸载它。您想创建一个4GB的交换空间。
sudo umount /dev/sda4

卸载分区。
sudo resize2fs /dev/sda4 196G

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

将为您提供一个基于文本的图形用户界面来检查您的分区表。我建议您在那时将分区表打印到文件或屏幕上,并记录当前配置作为备份。然后,您可以选择删除分区/dev/sda4。在其位置上,将显示空闲空间。使用new创建一个新的分区,大小为196 GB,并将类型设置为ext4。然后,移动到尾部的空闲空间,并创建4GB的交换分区,类型为swap注意:由于我目前无法操作我的/,所以我没有测试这些命令。

如果无法卸载分区

您无法缩小已挂载的ext3/4分区(请参阅resize2fs的手册页)。由于您正在运行操作系统的/,因此无法卸载/。这意味着您必须启动另一个操作系统(例如从USB键)来进行更改。

在你的情况下,这是一个远程服务器(很可能是基于KVM的),所以你可能无法从USB或者一个实时操作系统镜像启动。通过管理员图形用户界面,你的vServer提供商可能有其他方法来更改分区。我相信这是目前你最好的选择。

如果您可以卸载磁盘,那么使用parted工具来缩小分区是完全可行的。这些只是gparted工具所使用的封装命令。同时也要缩小文件系统。 - mckenzm
2如果分区无法卸载,而我想要扩大而不是缩小怎么办? - Aaron Franke