为什么这个环回设备创建会出现故障?

为什么这个环回设备创建会出现故障?

stackoverflow 的人认为这在这里更合适,我把它放在那里因为它是一个程序的一部分,但我可以看到他们的观点,所以它在这里:

在代码的底部你可以看到它失败了。事实上,我也会把它放在开头,因为它是我需要解决的问题:

[350591.924819] EXT4-fs (loop0): bad geometry: block count 9750806 exceeds size of device (9750168 blocks)

我不明白为什么设备会太小。两天前我用普通的 fdisk 创建了这个分区,它是用 ext4 创建和格式化的,除了要格式化的分区 (/dev/sdb2) 外没有提供任何选项。

我能想到的唯一解释是 ext4 的分区大小不知何故有误,但这似乎不太可能。我的计算有什么问题?偏移量是正确的,您可以使用文件命令看到这一点,大小也应该是正确的,因为结束 - 开始等于相同的扇区数减 1,就像它应该的那样(从扇区 1 开始并以扇区 2 结束的磁盘将是 2 - 1 = 1 并且有两个扇区)。

# sfdisk -luS /dev/sdb

Disk /dev/sdb: 9729 cylinders, 255 heads, 63 sectors/track
Units = sectors of 512 bytes, counting from 0

   Device Boot    Start       End   #sectors  Id  System
/dev/sdb2      78295040 156296384   78001345  83  Linux

# losetup -r -f --show -o $((78295040 * 512)) --sizelimit $((78001345 * 512)) /dev/sdb
/dev/loop0
# file -s /dev/loop0
/dev/loop0: Linux rev 1.0 ext4 filesystem data (needs journal recovery) (extents) (large files) (huge files)
# mount -o ro -t ext4 /dev/loop0 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so
# dmesg | tail -n 1
[350591.924819] EXT4-fs (loop0): bad geometry: block count 9750806 exceeds size of device (9750168 blocks)

答案1

乍一看,sizelimit 变量计算错误,因此目标只读循环设备超出了 /dev/sdb2 设备的大小。结果是(End - Start)* size of sector = sizelimit78001344,应在循环设备创建期间使用它来解决问题。

相关内容