Почему это создание петлевого устройства работает неправильно?
Люди, работающие над стековым потоком, подумали, что это более уместно, я поместил это там, как часть программы, но я могу видеть их POV, вот оно:
В нижней части кода вы можете увидеть, что он не работает. На самом деле, я тоже поставлю это здесь в начале, потому что это проблема, которую мне нужно решить:
[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)
1 ответ
На первый взгляд переменная sizelimit рассчитана неверно, поэтому целевое петлевое устройство только для чтения превышает размер устройства /dev/sdb2. Результат (End - Start)* size of sector = sizelimit
78001344, и его следует использовать при создании устройства петли для решения проблемы.