我有一个未在根分区(也是ext4)之后分配的分区,如何在不关闭服务器的情况下将未分配的空间添加到分配给根分区的空间中? br />
#1 楼
GUI(Ubuntu 14.04和更高版本):GParted v0.17和更高版本为此提供了一个不错的GUI。 (较旧的版本将拒绝调整已安装分区的大小)。
命令行(任何Ubuntu版本):
执行此操作需要三个步骤。
步骤1。
必须首先调整分区的大小。如果您使用的是LVM,这很容易,并且大概知道如何进行。如果您使用的是经典分区,它会稍微复杂一些,并且可能需要重新启动(尽管您不必引导其他系统或实时CD)。
我是这样做的:请使用
fdisk
首先删除分区(想法是保留磁盘上的数据),然后在相同位置小心地以更大的大小重新创建它。示例:
同样,至关重要的是,新分区必须与旧分区在同一块处开始。该ID也应匹配(对于Linux系统,该ID为83)。要准备一点点错字就丢失所有数据。为了安全起见,您还可以按
a
来恢复启动标志(根据维基百科,某些计算机上仍然需要该标志)。 请参阅注释部分,以了解如果您的交换分区受到干扰该怎么办。
现在,人们为什么推荐使用实时CD的原因已经很明显了。 ;-)
步骤2。
正如
fdisk
会提醒您,在继续操作之前,必须重新加载分区表。最安全的方法是简单地重新启动。但是您也可以使用partprobe
或kpartx
(更多信息)。步骤3。
一旦调整了分区的大小并重新加载了分区表,只需在文件系统上运行
resize2fs
即可,即使将其安装为根分区也可以执行此操作。示例:
$ sudo fdisk /dev/sda
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 9437183 4717568 83 Linux
Command (m for help): d
Selected partition 1
Command (m for help): p
Device Boot Start End Blocks Id System
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sda1 2048 10485759 5241856 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
评论
这对我来说非常有效。但是,我确实另外确保了引导标志保留为原始状态。
–奥古斯都·克林(Augustus Kling)
2012年8月10日20:56
@ jbo5112:正如fdisk所说,partprobe或kpartx可以工作而不是重新启动;另请参阅此问题。即使您重新启动,在停机时,该解决方案仍然比使用实时CD更为可取,因为对于虚拟机而言,一次简单的重新启动可以少于10秒。操作员时间也更快,这就是为什么我通常自己使用这种方法的原因。 :)
–SørenLøvborg
2013年12月3日18:07
@Raymond:如果内存压力允许(请参阅free -h),请禁用交换(swapoff / dev / sda2),更改分区表(包括删除和重新创建交换分区),然后1)重新启动或2)重新加载分区表并再次交换。 (如果内存太紧而无法暂时禁用交换,则仍然可以创建并启用新的交换分区(/ dev / sda3),然后交换sda2;但是随后必须使用新的交换设备名称更新/ etc / fstab。 )
–SørenLøvborg
15年7月8日在21:15
如果使用的是vmware,并已扩展了磁盘的大小,则必须运行sudo lshw -C disk重新扫描文件系统,以便vm识别更大的驱动器。然后按照上面的说明进行操作。
–人
16-4-26在8:23
缩小呢?
–亚伦·弗兰克(Aaron Franke)
18年7月28日在7:09
#2 楼
可以对ext4文件系统进行在线调整大小,即使它是您的根分区也是如此。使用resize2fs
命令。sudo resize2fs /dev/sda1
编辑:不允许在线收缩:
root@brunojcm-htpc:/home# resize2fs /dev/sda5 2654693
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/sda5 is mounted on /; on-line resizing required
resize2fs: On-line shrinking not supported
评论
来自man resize2fs:resize2fs程序不操纵分区的大小。如果要扩展文件系统,则必须确保可以先扩展基础分区的大小。如果使用逻辑卷管理器lvm(8),则可以使用fdisk(8)删除分区并以更大的大小重新创建分区,或者使用lvextend(8)来完成此操作。这个问题是关于调整分区大小,而不是文件系统大小。区别是微妙的,但非常重要。
– Eliah Kagan
2012年6月3日7:07
您可以使用fdisk删除根分区,然后在同一起始块处重新创建它。 fdisk会写出更改,但要等到重启后才能生效。重新引导后,您可以使用resize2fs程序发送磁盘以填充分区。
–詹姆斯·贝夸(James Becwar)
2012年6月14日15:15
我刚刚在线调整了ext4根分区的大小。因此,我可以确认这是可能的。但是,您无需传递/ dev / sda *作为resize2fs的参数,而是需要传递逻辑卷名称。
–CDR
2012年12月4日22:37
对于第一个问题,我发现resize2fs联机帮助页的第一段最有趣:resize2fs程序将调整ext2,ext3或ext4文件系统的大小。它可用于扩大或缩小设备上未安装的文件系统。如果已挂载文件系统,则可以使用它来扩展已挂载文件系统的大小,前提是内核支持在线调整大小。 (在撰写本文时,Linux 2.6内核支持使用ext3和ext4挂载的文件系统的在线调整大小。)
–'mo'
2012-12-23 14:33
当growpart为您轻松做到这一点时,请不要使用fdisk。
–STRML
17年9月16日在13:45
#3 楼
一个更简单的解决方案-使用growpart <device> <partition>
:growpart /dev/xvda 1 # Grows the partition; note the space
resize2fs /dev/xvda1 # Grows the filesystem
像往常一样,备份分区表(
sfdisk -d /dev/xvda > partition_bak.dmp
)以防万一。评论
缩小呢?
–亚伦·弗兰克(Aaron Franke)
18年7月28日在7:09
这是调整我的AWS VM的根分区和文件系统大小的完美选择。干杯。
– MetaFight
18年8月10日在0:00
growpart是cloud-utils的一部分。如果您尚未安装,则可以使用apt-get install cloud-utils进行安装
– klor
18年8月21日在19:50
@klor:来自cloud-guest-utils包
– Pierre-Damien
18-09-27在11:39
@monkut晚了聚会,但是您的磁盘可能是/ dev / nvme0n1。 p5是该磁盘上的分区5。与传统的BSD磁盘片相比,它们使用类似的编号方案。
– Per Lundberg
18年11月13日在19:59
#4 楼
是的,您可以收缩/移动/增长在线根分区,而无需任何重新引导(也不是livecd或usbkey):请查阅此答案。它写得很好并且易于遵循,尽管时间很长而且有点冒险。因此,如果您只想扩展ext4分区,则可以坚持使用常规的resize2fs
解决方案。 我所寻求的一般解决方案将适用于任何类型的专用或VPS解决方案。例如,
TLDR;此解决方案意味着将
pivot_root
更改为tmpfs
,以便您可以安全地对根分区进行实时处理。完成后,您将回到新的根分区上。这几乎允许对根文件系统进行任何操作(移动,更改文件系统,更改其物理设备...)。 br />
在此过程中不需要重新启动,这可以绕过
umount
不能限制pivot_root
分区的局限性。我亲自使用了它,并且效果很好也可以在debian系统上使用,因此它应该可以在Ubuntu上使用。我很惊讶没有看到这个深入的解决方案与处理相同问题的stackexchange网站上的许多问题有更多的联系。
注意:当然,如果您想扩展自己的产品,分区,一个简单的
resize2fs
就足够了,如在许多地方和此处的其他答案中所述。评论
我认为对于大多数人来说,一旦停止了所有访问根分区的程序和服务,您也可能会重新启动计算机。对于缩小/移动,它可能仍然比使用实时CD快,但是对于增长/扩展(到目前为止,最常见的任务以及OP的要求),有些方法不涉及临时关闭大多数系统。
–SørenLøvborg
16 Mar 8 '16 at 18:35
@SørenLøvborg:您可以在完成整个过程的同时重新启动需要连续生产的核心服务。在许多配置中,您无法放置LiveCD(VPS实例,专用服务器...),或者在某些情况下由于特定原因想要避免重新启动。原始问题的标题提到“调整大小”,这吸引了人们在网上寻找缩小的分区。 **没有其他解决方案允许在线缩小ext4。**此解决方案具有风险,复杂,但功能最强大,并且可以弥补其他缺点。
–vaab
16 Mar 9 '16 at 5:41
请不要根据外部链接发布答案。将相关部分放入您的答案中或发布链接作为对问题的评论。有关详细信息,请参见如何回答。
–梅勒比乌斯
18-10-12在11:44
#5 楼
您还可以只使用GParted-只要要调整大小的分区不是您要从中引导的分区,否则我建议live CD选项对于新手来说会更容易。GParted基本上可以完成所有操作的步骤-仅基于前面的GUI。
评论
我使用Ubuntu 12.04 Live CD启动了系统,并使用GParted调整了ext4分区的大小。对我有好处。无论如何,在执行此操作之前,我已经备份了所有重要数据。
–StandDuPp
13年5月28日在20:16
我认为,gparted需要卸载分区。但是我可能是错的。
–尼克
16年1月27日在18:02
问题显然与他们从中引导的分区有关,而引导活动CD则需要重新启动计算机。 -1
– wjandrea
17年5月21日在2:28
#6 楼
我想对@SørenLøvborg的答案进行扩展:在存在交换分区的情况下扩展分区。扩展磁盘后,首先布局磁盘:
$sudo parted /dev/sda 'unit s print' free
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 14336000s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
63s 2047s 1985s Free Space
1 2048s 10485759s 10483712s primary ext4 boot
10485760s 10487805s 2046s Free Space
2 10487806s 12580863s 2093058s extended
5 10487808s 12580863s 2093056s logical linux-swap(v1)
12580864s 14335999s 1755136s Free Space
因此,需要使用磁盘末尾的可用空间来扩展sda1,但是交换分区位于它们之间。这是您的操作方法:
首先我们需要禁用交换。检查它的使用量以及是否可以将其关闭。
$ free -h
total used free shared buff/cache available
Mem: 992M 52M 464M 3.2M 475M 784M
Swap: 1.0G 0B 1.0G
交换在这里未使用,因此我们可以将其关闭
$sudo swapoff /dev/sda5
现在我们将更改分区表:
$sudo fdisk /dev/sda
(注意:如果您碰巧第一个分区从扇区63开始而不是扇区63 2048,您需要添加选项
-c=dos
)Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sda: 6.9 GiB, 7340032000 bytes, 14336000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9e11c6df
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 10485759 10483712 5G 83 Linux
/dev/sda2 10487806 12580863 2093058 1022M 5 Extended
/dev/sda5 10487808 12580863 2093056 1022M 82 Linux swap / Solaris
Command (m for help): d
Partition number (1,2,5, default 5): 2
Partition 2 has been deleted.
Command (m for help): d
Selected partition 1
Partition 1 has been deleted.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-14335999, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-14335999, default 14335999): 12242941
Created a new partition 1 of type 'Linux' and of size 5.9 GiB.
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (12242942-14335999, default 12242944):
Last sector, +sectors or +size{K,M,G,T,P} (12242944-14335999, default 14335999):
Created a new partition 2 of type 'Linux' and of size 1022 MiB.
Command (m for help): a
Partition number (1,2, default 2): 1
The bootable flag on partition 1 is enabled now.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
注意:sda1的大小是扇区总数减去交换分区的扇区大小:14335999- 2093058 = 12242941
正如fdisk所提到的:内核仍在使用旧的分区表,因此我们需要重新加载它。
$partprobe
现在我们需要在sda1上运行resize2fs(请不要忘记这一点!)
$resize2fs /dev/sda1
resize2fs 1.42.12 (29-Aug-2014)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 10
The filesystem on /dev/sda1 is now 38833617 (4k) blocks long.
现在,事情还没有结束。您可能已经注意到sda2被分区为Linux(Ext4)类型。由于某种原因,fdisk中无法选择类型。
所以我们必须使用
cfdisk
替换它$ sudo cfdisk
选择sda2并将其类型更改为
82 Linux swap / Solaris
并确保您将其写入(键入yes进行确认)现在我们可以重新激活交换
$mkswap /dev/sda2
/dev/sda2
UUID=d58bf1cb-d27a-487d-b337-056767fd5ad6 none swap sw 0 0
,最后将其打开:
$swapon /dev/sda2
我们唯一需要做的就是在引导时自动更新fstab以自动安装交换分区
$sudo nano /etc/fstab
并将交换分区的UUID更改为上面的输出:
# swap was on /dev/sda5 during installation
UUID=d58bf1cb-d27a-487d-b337-056767fd5ad6 none swap sw 0 0
现在一切都很好,您可以重新启动而不会出现问题。
评论
至于交替交换分区类型,可以在fdisk buy中选择t然后选择5(分区5)然后选择82(类型Linux swap / Solaris)来完成。
–奥兹·埃德里(Oz Edri)
18年11月6日在14:16
分区2不应该扩展吗? (然后在fdisk中,我们应该选择e而不是p)另外,mkswap和swapon命令是否应该在/ dev / sda5而不是sda2上运行?
–奥兹·埃德里(Oz Edri)
18-11-6在14:18
对于交换分区类型:在其他说明中,我确实可以在fdisk中选择该类型,但是由于某种原因,它在我的版本中不起作用。无论如何,它将始终与cfdisk一起使用
–wouter205
18年11月6日17:00
对于交换分区:您可以使用扩展分区,但随后需要添加两个分区:扩展分区和逻辑分区(请参阅我的初始分区布局)。在我的示例中,最终得到2个主分区:sda1-ext4-根分区和sda2-交换分区。因此,mkswap和swapon命令需要在sda2上运行。我在文章开头确实犯了一个错误:交换需要在sda5上执行。评论总是受欢迎的,很难记下来。
–wouter205
18年11月6日在17:04
对交换分区进行加密后,必须首先使用cryptdisks_stop停止cryptdisk,然后更新/ etc / crypttab而不是/ etc / fstab并使用cryptdisks_start重新启动cryptdisk。
– Dmitri Chubarov
19年5月26日在9:06
#7 楼
在挂载根系统后,刚刚在活动系统上调整了ext4根分区的大小。[root@habib i686]# resize2fs /dev/vg_habib/lv_root
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/vg_habib/lv_root is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 10
Performing an on-line resize of /dev/vg_habib/lv_root to 38427648 (4k) blocks.
The filesystem on /dev/vg_habib/lv_root is now 38427648 blocks long.
[root@habib i686]#
#8 楼
我只是在不使用umount
,pivot_root
或临时删除主分区的情况下成功地做到了这一点,在Ubuntu 16.04、4.4.0内核上使用parted 3.2。为谨慎起见,我从禁用了网络的虚拟控制台上进行了所有操作,并预先拍摄了快照,以防万一,但是不需要快照,因此我可以通过SSH进行同样的操作,而无需更改运行级别。 > 确定分区大小:
parted /dev/sda1 print | egrep "Disk.*GB"
可选地切换到多用户模式而不联网(必须从控制台而不是SSH完成):
runlevel # remember the original runlevel
init 2
(请谨慎选择)制作VM快照。
调整分区大小:
parted
p
resizepart NUMBER SIZE
# answer "Yes" when asked about resizing a live partition.
q
调整文件系统大小:
resize2fs /dev/sda1
如果出现任何问题,可以在此处恢复快照。如果一切正常,请返回正常运行级别(上面获得)-正常5:
init 5
。此时最好进行完全重新启动,以确保一切都恢复正常(此后,我发生了date / ntp问题)。#9 楼
请执行以下步骤。以超级用户身份打开终端
su
运行
parted
键入
p
以查看可用的分区标识您的根分区号(例如:“ sda 3”表示数字3)并使用
rm PARTITION NUMBER
创建可用空间来删除相邻分区。现在通过键入
resizepart ROOT NUMBER
来增加根大小,并在需要时重新启动系统通过输入
parted
退出exit
并在终端输入partprobe
并按Enter键(即使在重新启动后也可以执行此操作)最后运行
resize2fs /dev/sda PARTITION NUMBER
并享受宽敞的根分区。评论
resize2fs / dev / sda分区编号不是该命令的正确签名。
–科本
20-08-29在10:17
#10 楼
如前所述:可以从根系统实时扩展。(没有困难,因为引导部分不会移动)
需要缩小实时根分区可以从外部引导设备(从实时系统cd / usb-stick引导)完成,好像有任何故障,不匹配..无论如何..您的系统挂起,都需要重新引导,最终将无法正确引导。 br />
任何一种“但是我做到了,它都能起作用”纯属运气。
评论
我讨厌听起来像泥泞中的棍子,但这会带来很大的风险吗?为什么需要发生这种情况?正常运行时间是主要限制因素吗?您不能在左侧调整分区的大小,因为这实际上是一个步骤。
在线增加ext4分区的大小很容易。困难的部分将是缩小(您的标题是“调整大小”)。对于在运行时对根分区(移动,收缩,更改文件系统,设备)进行任何操作感兴趣的人,请咨询我的答案:askubuntu.com/a/728141/21888
使用growpart