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


44

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

Answers:


36

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

替代解决方案:交换文件

作为创建整个分区的替代方法,交换文件提供了即时更改其大小的功能,并且更容易完全删除。交换文件可以热插拔。即可以添加和删除,而无需卸载/关闭操作系统。

  1. 创建一个名为的512 MB文件/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 2014年

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

1
我认为这是最好的解决方案。由于您不格式化,缩小或以其他方式更改分区(表),因此没有数据丢失的风险。
R110 2014年

27

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

  • 您不想丢失根分区上的信息。
  • 您没有物理访问硬盘的权限才能使用LiveCD。这可以应用于虚拟环境或远程环境。对于虚拟磁盘,如果将VM设置为从LiveCD引导,则仍然可以从LiveCD引导。假设VM支持从运行Gparted应用程序以轻松调整大小的位置输出桌面GUI。但是由于这种可能性较小,因此我认为您不能这样做。

自创建银河以来,LVM分区或Logical Volume Manager分区支持您调整大小的两种分区,自从创建银河和我们大多数人使用的标准分区以来。目前,btrfs文件系统(仍在开发中)是唯一可以完全在线调整大小(收缩/增长)的100%的文件系统。我将解释如何对我们大多数人在ext4文件系统中使用的普通分区进行处理。

调整分区大小

要扩展分区,可以在安装了根目录的情况下进行。为此,只需执行以下操作:

sudo resize2fs /dev/sda1

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

sudo resize2fs /dev/sda1 25G

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

sudo resize2fs /dev/sda1 25400M

这样您将拥有25.4G的分区

调整分区大小

缩小分区是一个分为两个步骤的过程,其中包括:

  • 通过所需数量减少文件系统的大小。
  • 减小基础块设备的大小以匹配文件系统的大小。

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

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

在此处输入图片说明

据我所知,您唯一的选择是:

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

  • 从头开始安装所需大小的Ubuntu服务器

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

    在此处输入图片说明

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

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


我很好奇,是否还有其他支持在线收缩的文件系统?是zfs还是btrfs?
赛斯

我在底部添加了一个链接。如果文件系统要正确地在线调整大小,内核还需要支持此功能。
Luis Alvarado 2014年

我在vmware机器上有ubuntu服务器,其磁盘大小为120G。但是在使用第一个解决方案后,我得到了这个错误:文件系统已经是27262720个块了。没事做!
Dr.jacky

1
谢谢@海德先生。Workstation 10甚至11都存在多个问题。我建议使用12,对于Ubuntu,我也将更新为最新或新的LTS,因为还有一些问题。就我而言,我有VMware工作站12.0.1和Ubuntu 15.10 64位。
Luis Alvarado 2015年

3
来自resize2fs联机帮助页:The resize2fs program does not manipulate the size of partitions.
ACK_stoverflow

6

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

如果可以卸载该分区

假设您要缩小/dev/sda4安装到的200GB ext4分区/data。它当前包含音乐和电影或类似内容,因此您可以暂时将其卸载。您要创建一个4GB的交换空间。

sudo umount /dev/sda4

卸载分区。

sudo resize2fs /dev/sda4 196G

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

sudo cfdisk /dev/sda 

将为您提供基于文本的GUI,以检查您的分区表。我建议您此时print将分区表保存到文件或屏幕,并记下当前配置作为备份。然后可以选择/dev/sda4delete分区。free space将显示在其位置上。使用new在其处创建一个196 GB一个新的分区,并设置类型到ext4。然后,移至尾随的可用空间并创建类型为的4GB交换分区swap注意:我没有测试这些命令,因为我目前无法使用这些命令/

如果无法卸载分区

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.