Mount

resize2fs 無法將分區大小調整為滿容量?

  • January 23, 2022

我添加了一個 2TB 的新磁碟 ( /dev/vdb),其中包含之前 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

有任何想法嗎?我應該再做一次fsck嗎?e2fsck``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. 我曾經fdisk /dev/vdb將其唯一的分區 /dev/vdb1 從之前的 1TB 擴展到 2TB 的全部容量…請參閱如何使用 fdisk - Red Hat Customer Portal 調整分區大小
  2. 然後我做了[ resize2fs /dev/vdb1] …

我們可以看到這並沒有改變文件系統的大小。原因如下:

resize2fs從核心讀取分區的大小,類似於讀取任何其他文件的大小。 fdisk 在寫入分區表後嘗試更新核心。但是,如果磁碟正在使用中,這將失敗,例如您已經安裝了它的一個分區。

這就是為什麼resize2fs顯示“無事可做”消息的原因。它沒有看到額外的分區空間。

核心在啟動期間讀取分區表。因此,您只需重新啟動電腦即可。然後你可以執行resize2fs,它會看到額外的分區空間,並擴展文件系統以適應。


我相信fdisk在發生這種情況時會記錄一個顯著的警告,如本(否則已過時)文件中的螢幕截圖所示。

Red Hat 客戶門戶上有一份不太友好但實際上是最新的文件:

如何在不重新啟動的情況下在 RHEL6 中使用新分區?

partprobe在 RHEL 5 中常用來通知作業系統磁碟上的分區表更改。在 RHEL 6 中,它只會觸發作業系統更新磁碟上沒有任何分區正在使用(例如掛載)的分區。如果磁碟上的任何分區正在使用中,partprobe 不會觸發作業系統更新系統中的分區,因為在某些情況下它被認為是不安全的。

所以一般來說我們會建議:

  1. 在修改磁碟上的分區表之前解除安裝磁碟的所有分區,然後執行partprobe更新系統中的分區。
  2. 如果這是不可能的(例如,掛載的分區是系統分區),請在修改分區表後重新啟動系統。重新啟動後將重新讀取分區資訊。如果添加了新分區並且沒有修改任何現有分區,請考慮使用 partx 命令更新系統分區表。請注意,partx 命令不會在系統中的新分區表和現有分區表之間進行太多檢查,並假定使用者知道他們在做什麼。因此,如果現有分區被修改或分區表設置不正確,它可能會損壞磁碟上的數據。所以使用風險自負。

引用自:https://unix.stackexchange.com/questions/441789