我刚刚将主机上的 .vdi 大小从 15.5G 调整为 120G。我尝试使用来宾(ubuntu 服务器)调整分区大小resize2fs
root@ubuntu:~# sudo resize2fs /dev/sda2 115G
resize2fs 1.42.13 (17-May-2015)
resize2fs: Attempt to read block from filesystem resulted in short read while trying to open /dev/sda2
Couldn't find valid filesystem superblock.
现在,据我了解的情况/dev/sda2
是腐败的。但是,我的服务器虚拟机仍然工作正常,并且在分区上运行没有任何问题。fdisk -l /dev/sda
输出:
Disk /dev/sda: 120 GiB, 128849018880 bytes, 251658240 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: 0x32955267
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 999423 997376 487M 83 Linux
/dev/sda2 1001470 33552383 32550914 15.5G 5 Extended
/dev/sda5 1001472 33552383 32550912 15.5G 8e Linux LVM
现在我的问题是:这对于服务器来说是否正常且健康?如果不正常,我该如何修复它?
答案1
resize2fs
e2fsprogs 套件中的其他工具假设read
系统调用要么返回整个请求的大小,要么遇到错误。一般来说,这是不正确的:read
允许返回 less,你应该在循环中调用它。我认为 Linux 内核保证read
在某些情况下从块设备返回所有数据,但我过去就被这个问题困扰过,因为 e2fsprogs 对内核做出了错误的假设。
事实上,e2fsprogs 不循环read
确实是一个错误。充其量这是一个限制:或许代码的编写方式是正确的一些访问块设备时的 Linux 内核版本。但这种限制没有在任何地方记录下来。访问图像文件时,该代码肯定有错误。
检查内核日志是否有错误。如果内核报告错误,那么问题不是 resize2fs 中的错误(或者至少,只不过是糟糕的错误报告)。
如果内核没有报告磁盘错误,请运行
strace -o resize2fs.strace sudo resize2fs /dev/sda2 115G
并检查read
系统调用。
读(3,“...”,要求)=读
有一个简短的阅读如果要求≠读。如果您观察到这一点,并且可以重现它,则值得制作错误报告。准确解释一下您是如何触发此操作的:确切的内核版本、内核是如何编译的、resize2fs 的确切版本、管理什么硬件驱动程序/dev/sda
、它运行在什么虚拟机软件上。我建议将错误报告给 Ubuntu 而不是上游,因为上游通常不擅长与非专家交谈。