Назад | Перейти на главную страницу

Почему происходит сбой при создании этого устройства обратной петли?

Люди, занимающиеся stackoverflow, думали, что это более уместно здесь, я поместил его туда, поскольку это часть программы, но я могу видеть их точку зрения, так что вот она:

Внизу кода вы можете увидеть, что он не работает. На самом деле, я тоже поставлю это здесь в самом начале, потому что это проблема, которую мне нужно решить:

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

Не понимаю, почему аппарат якобы маловат. Я сделал этот раздел два дня назад с помощью обычного fdisk, он был создан и отформатирован с помощью ext4, не предоставляя никаких других параметров, кроме раздела (/ dev / sdb2) для форматирования.

Единственное объяснение, которое я могу придумать, это то, что ext4 каким-то образом имеет неправильный размер раздела, но это кажется очень маловероятным. Что не так с моей математикой? Смещение правильное, вы можете видеть это с помощью команды file, и размер также должен быть правильным, потому что End - Start соответствует тому же количеству секторов минус 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)

На первый взгляд переменная sizelimit вычисляется неправильно, поэтому целевое устройство цикла только для чтения превышает размер устройства / dev / sdb2. Результат (End - Start)* size of sector = sizelimit - 78001344, и его следует использовать во время создания кольцевого устройства для решения проблемы.