resize2fs 似乎卡在第 3 步(扫描 inode 表) - 该怎么办?

Jon*_*Fun 5 linux filesystems partitioning ext4

我有一台运行 Arch Linux(我相信是 2010 年)的机器,其 6TB RAID-5 阵列连接到 Highpoint RocketRaid 2320。由于没有驱动程序,我一直遇到 RAID 控制器驱动程序和最新 Linux 内核的问题开源,因此我正在将系统迁移到 Windows Server。

问题是 6TB 磁盘最初仅由一个 ext4 分区组成。我尽可能地缩小了分区,并在空白空间中添加了一个 NTFS 分区,这样我就可以开始移动文件了。那很顺利。问题是,现在我需要缩小ext4的分区再次,移动文件,再次缩小等通过resize2fs第二次运行正在采取的方式比第一遍长。它似乎卡在了第 3 关:

[root@nar-shaddaa rc.d]# resize2fs -p /dev/sdb3 863000000
resize2fs 1.41.14 (22-Dec-2010)
Resizing the filesystem on /dev/sdb3 to 863000000 (4k) blocks.
Begin pass 2 (max = 29815167)
Relocating blocks             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 3 (max = 36670)
Scanning inode table          XXXXXXXXXXX-----------------------------
Run Code Online (Sandbox Code Playgroud)

它一直这样坐着,100% 吸收一个内核超过 19 个小时:

[root@nar-shaddaa rc.d]# ps aux | grep resize2fs
root     16277 94.1 19.8 627096 613940 pts/1   R+   Jun15 1184:37 resize2fs -p /dev/sdb3 863000000
Run Code Online (Sandbox Code Playgroud)

我最初是resize2fs -P /dev/sdb3为了获得最小分区大小,但为了安全起见,我四舍五入到最近的百万分之一块(因此是 8.63 亿)。在启动 resize2fs 之前,e2fsck 报告文件系统为干净:

[root@nar-shaddaa rc.d]# e2fsck -yv /dev/sdb3
e2fsck 1.41.14 (22-Dec-2010)
x-files: clean, 286672/300400640 files, 867525660/1201576187 blocks
Run Code Online (Sandbox Code Playgroud)

我很担心,因为这已经持续了远远超过第一缩放不再担任(这是不到一小时),我不会出现在所有得到任何种类的更新从resize2fs但它显然是吸取CPU周期. 我是否需要等待更长时间(如果是,等待多长时间)?或者我是否取消它并使用不同的工具来调整分区大小?

Jon*_*Fun 3

我终于明白那是什么了。取消原来的调整大小(只需简单的 ctrl+C)后,我开始e2fsck -f -y /dev/sdb3纠正我提出的任何问题。我能够以原始大小安装分区,因此没有丢失数据。然后,我使用调试标志 ( resize2fs -d 14 <xxx>) 运行 resize2fs,并注意到它陷入了一个不断循环,试图重新定位一大块 inode。

我终于使用版本的 e2fsprogs 让它工作了。我将 Ubuntu 9.10 (Karmic Koala) 放在 USB 记忆棒上,启动它,安装开源 rr232x 驱动程序,以便我可以操作阵列,并运行旧版本的 e2fsprogs (resize2fs 1.41.9 (22-Aug-2009) ,准确地说)。

我最初尝试过resize2fs -p /dev/sdb3 863000000,它告诉我它需要大约 2600 万个区块。所以我获取了目标大小,将其添加到其中并执行了resize2fs -p /dev/sdb3 1000000000。10 分钟后,我收到一条消息:

/dev/sdb3 现在为 1000000000 块

现在我想最终的问题是为什么新版本的 e2fsprogs 不能/不会告诉我我要求的尺寸太小(以及为什么它首先提供这么小的尺寸)?