Question

J'ai utilisé /proc/diskstats pour obtenir le nombre de secteurs lus et écrits.Je veux convertir ce nombre en octets donc je recherche la taille du secteur.j'ai utilisé Comment trouver la taille du secteur d’une disquette/CD sous Linux ? pour obtenir la taille du secteur des disques sda, sda1 et sda2 mais cela échoue avec les erreurs suivantes :Échec IOCTL sur Fichier / Dev / SDA avec l'erreur Argument non valide a échoué IOCTL sur Fichier / Dev / SDA1 avec une erreur IOCTL inappropriée pour le périphérique et la même chose pour SDA2.J'apprécierai votre aide.Merci

          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);
          }
Était-ce utile?

La solution

Ce ioctl ne fonctionne pas toujours pour certains types de périphériques de bloc, mais, plus important encore, cette valeur est pas la taille réelle du secteur telle que rapportée dans /proc/diskstats.

le code diskstats renvoie le nombre de secteurs lus, où les secteurs sont dimensionnés à partir de la valeur renvoyée par BLKSSZGET:

    int sector_size = 0;
    int err = ioctl(fd, BLKSSZGET, &sector_size);
    if (err > 0) {
        currBytesPerSector = sector_size;
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top