Документированный размер размера сектора раздела ядра 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 / разделов не имеют смысл

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

Было бы хорошо, если бы мы может раз и навсегда определить, что на самом деле делает внутренний код ядра, и если это поведение задокументировано или просто предполагается, что означает, что теоретически оно может случайным образом измениться в любое время.

2
задан 24 September 2018 в 22:17
1 ответ

Из Комментарий к исходному коду Linux:

Linux всегда считает секторы длиной 512 байт независимо от реальный размер блока устройства

Тем не менее, я думаю, что сканирование / sys / block / / является худшим (или, по крайней мере, более сложным) подходом из доступных для получения размеров дисков и разделов:

  • lsblk --bytes --list выдает информативный, однозначный и поддающийся синтаксическому анализу результат;
  • cat / proc / partitions предоставляют аналогичную информацию в блоках размером 1K
  • blockdev --getsize64 возвращает размер устройства в байтах;
  • blockdev --getsz возвращает размер устройства в 512-байтовых секторах ;
  • ... обязательно другие методы, которые я сейчас не помню ...
1
ответ дан 3 December 2019 в 12:31

Теги

Похожие вопросы