2

В настоящее время пытаюсь найти способ БУЛЬТЕТА найти размер сектора устройства на базе FLASH (тестирование с USB-накопителем), не получая убедительного ответа где-либо еще

использование stat дает мне размер = 4096 байт

struct stat info;
const char* device = "/dev/sdc";
if (stat(device, &info))
{
    std::cout << "stat() error" << strerror(errno) << "\r\n";
    exit(1);
}

std::cout << "Prefered block size for '" << device << "' is " << info.st_blksize << " byte" << std::endl;

но fdisk говорит 512 байт

Disk /dev/sdc: 3.8 GiB, 4047503360 bytes, 7905280 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos

Есть ли другой способ, которым я могу доверять?

2 ответа2

1

stat() сообщает о предпочтительном размере блока файловой системы, а не основного устройства.

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

0

Большинство современных дисков используют Advanced Format.

Диски расширенного формата преобразуют каждый физический сектор размером 4096 байт в восемь логических секторов размером 512 байт. Для микропрограммного обеспечения, операционной системы и всех дисковых утилит диск, по-видимому, имеет 512-байтовые сектора, даже если размер базового физического сектора составляет 4096 байт.

Fdisk в последних версиях Linux теперь сообщает о размере логического сектора, а не физического, что является причиной несоответствия, которое вы заметили.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .