Partendo da un percorso assoluto, voglio ottenere le seguenti informazioni:Come ottenere dettagliate informazioni dispositivo/partizione dal percorso del file su Linux (come UUID, hard disk, ecc seriale)
- Il punto di montaggio del filesystem su cui è archiviato il file (per calcolare il percorso relativo al punto di montaggio)
- UUID ed etichetta del file system
- Il tipo (o il nome del fornitore) e il numero di serie del disco rigido unità che contiene la partizione
Sono consapevole che 2 e 3 potrebbero non essere definiti in molti casi (ad es. per loopback, ramfs, dispositivi encirptati), che è completamente soddisfacente. So anche come ottenere tali informazioni utilizzando una shell e strumenti di sistema come df
e il file system /sys
o /proc
. Vedere this question come riferimento.
Tuttavia, sto cercando il metodo meno ingombrante per farlo a livello di codice con Python 3.5. Ciò significa:
- Preferisco chiamate di sistema, invece di contenuti parsing di
/proc
o/sys
- evitare di chiamare sottoprocessi e l'analisi la loro produzione (la definizione di ingombrante) (che può essere soggetto a modifiche o dipendono dalla configurazione del kernel?)
Finora, io sto usando os.stat()
sulla strada per ottenere il numero maggiore e minore del dispositivo a blocchi da stat_result.st_dev
. Ma qual è il modo corretto di procedere?
C'è per esempio
/proc/mounts
/proc/partitions
/sys/dev/block/<major>:<minor>
Note: Per quanto riguarda i dispositivi a blocchi montato un pareti divisorie, /proc/mounts
e /proc/partitions
sembrano essere la fonte di informazioni canoniche (che è OK). Per UUID, etichette, periodici ecc Attualmente uso udevadm
e analizzare l'output:
def get_udev_properties(dev_name):
cmd = ["udevadm", "info", "--query=property", "--name", dev_name]
result = subprocess.run(cmd, stdout=subprocess.PIPE)
return parse_properties(result.stdout)
Nota ulteriore: Astraendo dal mio problema acutal, si potrebbe chiedere più generale:
- Qual è l'identificazione o la rappresentazione canonica di un dispositivo a blocchi rispetto alle chiamate di sistema linux e ai filesystem del kernel?
- Qual è il modo corretto per ottenere tale rappresentazione per numero maggiore e minore?
- Qual è il modo corretto per ottenere informazioni dettagliate su un dispositivo a blocchi?
Le versioni correnti di '/ bin/mount' funzionano leggendo'/proc/self/mountinfo'. [La struttura del file è spiegata qui] (https://www.kernel.org/doc/Documentation/filesystems/proc.txt). [Risposte alle domande su come fare lo stesso usando C] (http://stackoverflow.com/questions/9280759/linux-function-to-get-mount-points) indicano che non esiste un'alternativa migliore. – Phillip
@Phillip Se l'analisi dei file da '/ proc' è il modo canonico, questa è una risposta valida. Trovo abbastanza difficile trovare riferimenti normativi/migliori pratiche riguardanti i dati che vorrei acquisire. –
'os.stat' sta bene, non c'è niente di sbagliato in questo. –