Есть ли какой-либо способ обнаружить, если диском является SSD?

Попробуйте использовать клавиши date__gte и date__lte. Вы можете передать два объекта даты и времени, обозначающих границы того, что вы хотите сопоставить.

35
задан HEKTO 24 July 2014 в 16:56
поделиться

4 ответа

Обнаружение твердотельных накопителей не так невозможно, как утверждает dseifert. Уже есть некоторый прогресс в libata Linux ( http://linux.derkeiler.com/Mailing-Lists/Kernel/2009-04/msg03625.html ), хотя он еще не кажется готовым к использованию.

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

3
ответ дан 27 November 2019 в 07:13
поделиться

Вы можете получить удачу, запустив

smartctl -i sda

из Smartmontools . Почти у всех SSD есть SSD в поле Model.

3
ответ дан 27 November 2019 в 07:13
поделиться

SSD-устройства имитируют интерфейс жесткого диска, поэтому их можно использовать как жесткие диски. Это также означает, что не существует общего способа определить, что это такое.

Вы, вероятно, могли бы использовать некоторые характеристики диска (задержка, скорость, размер), хотя это не будет точным для всех дисков. Другая возможность может заключаться в том, чтобы посмотреть на данные SMART и посмотреть, можете ли вы определить тип диска с помощью этого (по названию модели, определенным значениям), однако, если вы не ведете базу данных всех дисков, это не будет 100% тоже точный.

0
ответ дан 27 November 2019 в 07:13
поделиться

На самом деле вы можете довольно легко определить задержку вращения - я однажды сделал это в рамках университетского проекта. Это описано в этом отчете . Вы захотите перейти на страницу 7, где вы увидите несколько хороших графиков задержки. Оно изменяется с 9,3 мс до 1,1 мс - падение на 8,2 мс. Это напрямую соответствует 60 с / 8,2 мс = 7317 об / мин .

Это было сделано с помощью простого кода C - вот часть, которая измеряет расстояние между положениями a и b в рабочем файле. Мы делали это с все большими и большими значениями b , пока мы не обошли весь цилиндр:

/* Measure the difference in access time between a and b.  The result
 * is measured in nanoseconds. */
int measure_latency(off_t a, off_t b) {
  cycles_t ta, tb;

  overflow_disk_buffer();

  lseek(work_file, a, SEEK_SET);
  read(work_file, buf, KiB/2);

  ta = get_cycles();
  lseek(work_file, b, SEEK_SET);
  read(work_file, buf, KiB/2);
  tb = get_cycles();

  int diff = (tb - ta)/cycles_per_ns;
  fprintf(stderr, "%i KiB to %i KiB: %i nsec\n", a / KiB, b / KiB, diff);
  return diff;
}
8
ответ дан 27 November 2019 в 07:13
поделиться
Другие вопросы по тегам:

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