我可以扩大根 ( /
) 分区,而fdisk
无需重新启动(删除并使用相同的第一个扇区重新创建它,但最后一个扇区更大)。
但是,我无法使内核重新读取分区表:
# partx -va /dev/vda
partx: /dev/vda: adding partition #5 failed: Device or resource busy
partx: /dev/vda: error adding partition 5
# kpartx -va /dev/vda
device-mapper: reload ioctl on vda5 failed: Invalid argument
add map vda5 : 0 41492480 linear 0:0 2048
# hdparm -z /dev/vda
/dev/vda:
re-reading partition table
BLKRRPART failed: Device or resource busy
# sfdisk -R /dev/vda
BLKRRPART: Device or resource busy
This disk is currently in use.
我知道我在做什么,分区内的 ext 文件系统支持在线扩容。
有没有办法强制内核更新其分区表?
编辑: 我知道 LVM,但它是不是这个问题的答案。
答案1
内核将使用旧的(缓存的)分区表,直到您卸载受影响磁盘上的所有分区。
由于您无法在系统运行期间卸载和安装 / 分区,因此您唯一的选择就是重新启动。
下次尝试使用 LVM,因为它允许您调整卷(甚至是根卷)的大小,而无需更改分区表。
答案2
要在线调整文件系统的大小,尤其是 /,您需要在物理层和虚拟层之间进行某种形式的抽象,例如 LVM。
要使用 LVM 实时调整大小,请使用:
pvcreate /dev/sdX
vgcreate vg1 /dev/sdX
lvcreate Root -L10G
然后下次磁盘即将满时,您将使用lvextend /dev/mapper/vg1-Root -L+10G --resizefs
并瞧您获得了更多空间。
阅读有关 LVM 的内容http://linux.die.net/man/8/lvm
编辑
要礼貌地要求内核更新缓存的分区表,您可以尝试partprobe
但我不认为它可以按照您的需要工作,如前所述,重新挂载所有文件系统,除非您启动到实时虚拟机,否则这很难。
编辑
您可以调整分区的大小,但这需要您记住/写下您看到的大小,fdisk
这对每个人来说都是一个非常高级的步骤。当您获得这些数字后,您可以从开始大小重新创建分区,然后让它填充磁盘。
如果分区是磁盘上的最后一个分区,这会更容易,如果您必须调整中间分区的大小,那么您肯定不走运
我曾为顾客做过几次,但这是一项令人毛骨悚然、伤脑筋的工作。 为了安全和数据保存,我不推荐这种方式。