尝试打开 /dev/sda2 时短读

尝试打开 /dev/sda2 时短读

我刚刚将主机上的 .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

resize2fse2fsprogs 套件中的其他工具假设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 而不是上游,因为上游通常不擅长与非专家交谈。

相关内容