2014-05-05 10 views
15

Sto lavorando su un programma portatile OS che trarrebbe vantaggio dalla rilevazione se un dispositivo di archiviazione fisico è un SSD o un semplice vecchio disco di selezione.Rilevamento di dispositivi di archiviazione SSD su sistemi POSIX

Su Linux si trova:

/sys/block/sdX/queue/rotational 

che restituiscono 0 o 1 se SSD, ma non sono sicuro se questo è il modo migliore.

In Windows e UNIX non ho trovato alcun modo di rilevare, forse devo usare ioctl DEVICE_SEEK_PENALTY_DESCRIPTOR e controllare la penelty (che dovrebbe essere molto bassa su un dispositivo di memorizzazione SSD) cercano, o forse utilizzare DeviceIoControl controlla la supporti nominale velocità di rotazione (che dovrebbe anche essere molto bassa su un dispositivo di archiviazione SSD).

Qualche raccomandazione per me su come procedere con il rilevamento di dischi SSD su sistemi POSIX compatibili?

+5

Non c'è un'interfaccia standard, quindi dovrai fare qualcosa di specifico per OS su tutta la linea. Sarebbe bello se ci fosse un modo multipiattaforma per determinarlo. Per Linux, IIRC 'rotational' sarà anche' 0' per pen drive USB. – Petesh

+0

@Petesh Sarebbe difficile inserirlo nello standard POSIX, anche se non esiste un modo affidabile per rilevare i dispositivi di archiviazione SSD. –

+6

L'applicazione probabilmente trarrebbe vantaggio da un'umile opzione impostata dall'utente, forse una bella tabella di tutti i dischi e se devono essere utilizzati in "modalità SSD", "modalità spinner" o "modalità disco RAM", "NAS sconosciuto modalità dispositivo "," modalità file system speciale divertente "e così via. Non perderei tempo a sviluppare una funzione di rilevamento che, in ogni caso, avrebbe probabilmente bisogno di revisione manuale e sostituzione. –

risposta

2

correlati: https://unix.stackexchange.com/questions/65595/how-to-know-if-a-disk-is-an-ssd-or-an-hdd

IMO però. È possibile utilizzare il metodo POSIX per determinare il sistema operativo e disporre di vari metodi per rilevare l'SSD e, quando non può essere determinato, è sufficiente chiedere all'utente finale e, se non lo sa, avere un valore predefinito sicuro. Immagino sia quello che farei se non ci fosse un metodo compatibile con POSIX (ma probabilmente controllerei anche la mailing list POSIX). Spero che aiuti.

2

Risponderò al commento di Lorenzo Gatti sopra dicendo che il modo migliore per farlo è quasi sicuramente un'opzione esposta all'utente. Non c'è un modo portatile per farlo, e non sarei sorpreso se altri SO (in particolare quelli più vecchi, che sono un problema a meno che non si abbia una certa garanzia che i propri utenti stiano utilizzando un SO un po 'attuale) non hanno avuto modo di farlo.

In realtà, una casella di controllo simile a "Sto usando un'unità a stato solido", con impostazione predefinita disattivata, sarebbe probabilmente l'opzione migliore, soprattutto perché quelli che probabilmente hanno un SSD sono (per ora, almeno abbastanza esperto di tecnologia per sapere cosa hanno.