Мой основной вопрос - авторитетно проверить, учитывается ли размер блока, используемый в подсчетах секторов:
/sys/block/<disk>/<partition>/size
на самом деле 512 Б, или, если это может варьироваться.
Я думал, что на это будет довольно легко найти ответ, но, например, здесь:
https://lore.kernel.org/lkml/201012011729.18661.lists@egidy.de/T/#u
был задан вопрос:
There are /sys/block/<device>/size and
/sys/block/<device>/<device><partition>/size.
But these values are reported in sectors, not in bytes. As discs with 4K
sectors are on the horizon now, I don't want to make wrong assumptions on the
sector size.
So what is the correct sector size for /sys/block/<device>/size?
И в документации был предложен патч, чтобы, по-видимому, раз и навсегда ответить на этот вопрос в документации: https://lore.kernel.org/lkml/1451154995-4686-1-git-send-email-peter@lekensteyn.nl/T/
Поскольку значение не менялось более 13 лет, я хотел бы формализовать эти атрибуты так, чтобы пользователи могли полагаться на них [1] [2]. Определение сектора было вдохновлено документацией block / stat.txt.
С патчем:
diff --git a/Documentation/ABI/testing/sysfs-block b/Documentation/ABI/testing/sysfs-block
+What: /sys/block/<disk>/<partition>/size
+Date: October 2002
+Contact: linux-block@vger.kernel.org
+Kernel Version: 2.5.43
+Description:
+ Size of the partition in standard UNIX 512-byte sectors
+ (not a device-specific block size).
Все это кажется простым, но когда я просматриваю существующий документ: https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-block
Нет в наличии этого патча. Из чего следует, что на самом деле этот, казалось бы, простой вопрос не может быть простым?
Может ли кто-нибудь указать мне на настоящий авторитетный ответ на этот вопрос, в идеале с использованием документации ядра или кода с комментариями?
В настоящее время я полагаюсь на результат работы инструмента, но если это не всегда 512B, этот вывод может быть неправильным, что в некоторых случаях может привести к тому, что код, над которым я работаю, также будет неправильным.
Я удивлен, что было так сложно найти по-настоящему авторитетный ответ,
https://unix.stackexchange.com/questions/52215/determine-the-size-of-a-block-device
Единицы размера в / proc / partitions не имеют смысла
Некоторые из них указывают на патч здесь, но никто, похоже, не знает, что патч, похоже, не был принят, хотя он, похоже, был подписан, но, насколько я могу видеть, его нет в коде документации.
Было бы хорошо, если бы мы могли раз и навсегда определить, что на самом деле делает внутренний код ядра, и если это поведение задокументировано или просто предполагается, что означает, что теоретически оно может случайным образом измениться в любое время.
Из Комментарий к исходному коду Linux:
Linux всегда считает секторы длиной 512 байт независимо от реального размера блока устройства.
Тем не менее, я думаю, сканирование /sys/block/<disk>/
это наихудший (или, по крайней мере, более сложный) подход из доступных для получения размеров дисков и разделов:
lsblk --bytes --list
производить информативный, однозначный и разборчивый вывод;cat /proc/partitions
дать аналогичную информацию в Блоки размером 1Кblockdev --getsize64 <dev>
возвращает размер устройства в байтах;blockdev --getsz <dev>
возвращает размер устройства в 512-байтовые сектора;