Мой основной вопрос состоит в том, чтобы авторитетно проверить, действительно ли размер блока, используемый при подсчете секторов:
/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 / разделов не имеют смысл
Некоторые из них указывают на патч здесь, но, похоже, никто не знает, что патч, похоже, не был принят, хотя он, кажется, был подписан, но, насколько я могу судить, этого нет в коде документации.
Было бы хорошо, если бы мы может раз и навсегда определить, что на самом деле делает внутренний код ядра, и если это поведение задокументировано или просто предполагается, что означает, что теоретически оно может случайным образом измениться в любое время.
Из Комментарий к исходному коду Linux:
Linux всегда считает секторы длиной 512 байт независимо от реальный размер блока устройства
Тем не менее, я думаю, что сканирование / sys / block /
является худшим (или, по крайней мере, более сложным) подходом из доступных для получения размеров дисков и разделов:
lsblk --bytes --list
выдает информативный, однозначный и поддающийся синтаксическому анализу результат; cat / proc / partitions
предоставляют аналогичную информацию в блоках размером 1K blockdev --getsize64
возвращает размер устройства в байтах; blockdev --getsz
возвращает размер устройства в 512-байтовых секторах ;