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

Документированный размер размера сектора раздела ядра Linux в байтах

Мой основной вопрос - авторитетно проверить, учитывается ли размер блока, используемый в подсчетах секторов:

/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-байтовые сектора;
  • ... конечно, другие методы, которые я сейчас не помню ...