更新

更新

我添加了一个/dev/vdb2TB 的新磁盘 ( ),其中包含之前 1TB 磁盘中的现有数据。

我曾经fdisk /dev/vdb扩展它唯一的分区/dev/vdb1从之前的 1TB 扩展到 2TB 的全部容量。 (也就是说,我删除了vdb1,然后重新创建它来填满磁盘。参见如何使用 fdisk 调整分区大小 - Red Hat Customer Portal)。

然后我做了:

[root - /]$ fsck -n /dev/vdb1
fsck from util-linux 2.23.2
e2fsck 1.42.9 (28-Dec-2013)
/dev/vdb1: clean, 46859496/65536000 files, 249032462/262143744 blocks

[root - /]$ e2fsck -f /dev/vdb1
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vdb1: 46859496/65536000 files (0.4% non-contiguous), 249032462/262143744 blocks

[root - ~]$ resize2fs /dev/vdb1
resize2fs 1.42.9 (28-Dec-2013)
The filesystem is already 262143744 blocks long.  Nothing to do!

看起来fdisk -l像这样:

Disk /dev/vdb: 2147.5 GB, 2147483648000 bytes, 4194304000 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
Disk label type: dos
Disk identifier: 0x4eb4fbf8

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048  4194303999  2097150976   83  Linux

但是当我安装它时:

mount /dev/vdb1 /mnt

这是我从中得到的df -h

/dev/vdb1       985G  935G     0 100% /mnt

这仍然是之前分区的大小。

我在这里做错了什么?

更新

我跑了partprobe,它告诉我重新启动:

Error: Error informing the kernel about modifications to partition /dev/vdb1 -- Device or resource busy.  This means Linux won't know about any changes you made to /dev/vdb1 until you reboot -- so you shouldn't mount it or use it in any way before rebooting.
Error: Failed to add partition 1 (Device or resource busy)

所以我重新启动,然后再次运行:

mount /dev/vdb1 /mnt

但添加的文件系统仍然是:

/dev/vdb1       985G  935G     0 100% /mnt

有任何想法吗?我应该再次执行所有fscke2fsck、 和吗?resize2fs

这实在是太奇怪了。重启后,我partprobe再次运行,仍然是这个错误:

Error: Error informing the kernel about modifications to partition /dev/vdb1 -- Device or resource busy.  This means Linux won't know about any changes you made to /dev/vdb1 until you reboot -- so you shouldn't mount it or use it in any way before rebooting.
Error: Failed to add partition 1 (Device or resource busy)

为什么设备或资源繁忙?即使我重新启动后?

答案1

  1. 我曾经fdisk /dev/vdb将其唯一的分区 /dev/vdb1 从之前的 1TB 扩展到 2TB 的完整容量...参见如何使用 fdisk 调整分区大小 - Red Hat Customer Portal
  2. 然后我就做了[ resize2fs /dev/vdb1]...

我们可以看到这并没有改变文件系统的大小。原因如下:

resize2fs从内核中读取分区的大小,类似于读取任何其他文件fdisk 尝试在写入分区表后更新内核。但是,如果磁盘正在使用中,例如您已安装了其分区之一,则此操作将会失败。

这就是为什么resize2fs显示“无事可做”消息的原因。它没有看到额外的分区空间。

内核在启动时读取分区表。所以你只需重新启动计算机即可。然后你可以运行resize2fs,它会看到额外的分区空间,并扩展文件系统以适应。


我相信fdisk发生这种情况时会记录一个显着的警告,如屏幕截图所示这个(否则已经过时的)文档

红帽客户门户上有一个不太友好但实际上是最新的文档:

如何在RHEL6中使用新分区而无需重新启动?

partprobe在 RHEL 5 中常用来通知操作系统磁盘上分区表的更改。在RHEL 6中,它只会触发操作系统更新磁盘上没有任何分区正在使用(例如已安装)的分区。如果磁盘上的任何分区正在使用,partprobe 不会触发操作系统更新系统中的分区,因为在某些情况下它被认为是不安全的。

所以一般来说我们建议:

  1. 修改磁盘上的分区表之前先卸载磁盘的所有分区,然后运行partprobe更新系统中的分区。
  2. 如果不可能(例如挂载的分区是系统分区),请在修改分区表后重新启动系统。重启后会重新读取分区信息。如果添加了新分区并且未修改任何现有分区,请考虑使用partx命令更新系统分区表。请注意,partx 命令不会在系统中的新分区表和现有分区表之间进行太多检查,并假设用户知道他们在做什么。因此,如果现有分区被修改或分区表设置不正确,它可能会损坏磁盘上的数据。因此使用时需自担风险。

答案2

尽管与问题没有直接关系,但resize2fs如果分区位于扩展分区内,则可能无法按预期工作。

请参阅此处了解更多信息:Ubuntu ext4 分区未按预期使用 Growthpart 或 resize2fs 进行扩展或调整大小

相关内容