Я использовал / proc / diskstats, чтобы получить число прочитанных и записанных секторов.
Я хочу преобразовать это число в байты, поэтому я ищу размер сектора.
я использовал Как найти размер сектора дискеты \ CD в Linux? получить размер сектора дисков sda, sda1 и sda2, но он не работает со следующими ошибками:
Сбой ioctl в файле / dev / sda с ошибкой Недопустимый аргумент
Сбой ioctl в файле / dev / sda1 с ошибкой Неправильный ioctl для устройства
и то же самое для sda2.
Буду признателен за вашу помощь.
Спасибо
struct hd_driveid id;
string fileName = "/dev/";
fileName += diskName;
int fd;
fd = open(fileName.c_str(), O_RDONLY|O_NONBLOCK);
if (fd < 0) {
LogError("Cannot open file " << fileName);
}
else
{
if (ioctl(fd, HDIO_GET_IDENTITY, &id) < 0) {
LogError("failed ioctl on with error " << strerror(errno));
} else {
currBytesPerSector = id.sector_bytes;
}
close(fd);
}
это ioctl
не всегда работает для определенных типов блочных устройств, но, что более важно, это значение не фактический размер сектора, как указано в /proc/diskstats
,
код diskstats возвращает количество прочитанных секторов, где размеры секторов соответствуют значению, возвращенному из BLKSSZGET
:
int sector_size = 0;
int err = ioctl(fd, BLKSSZGET, §or_size);
if (err > 0) {
currBytesPerSector = sector_size;
}
Других решений пока нет …