Come trovo su quale dispositivo fisico si trova una cartella?


Risposte:


148

Il df(1)comando ti dirà sul dispositivo che è presente un file o una directory:

df /work

Il primo campo ha il dispositivo su cui si trova il file o la directory.

per esempio

$ df /root
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1              1043289    194300    795977  20% /

Se il dispositivo è un volume logico, sarà necessario determinare su quale dispositivo di blocco è attivo il volume logico. Per questo, puoi usare il lvs(8)comando:

# df /usr
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/orthanc-usr
                       8256952   4578000   3259524  59% /usr
# lvs -o +devices /dev/mapper/orthanc-usr
  LV   VG      Attr   LSize Origin Snap%  Move Log Copy%  Convert Devices     
  usr  orthanc -wi-ao 8.00g                                       /dev/sda3(0)

L'ultima colonna indica che il volume logico usrnel gruppo di volumi orthanc( /dev/mapper/orthanc-usr) si trova sul dispositivo /dev/sda3. Poiché un gruppo di volumi può estendersi su più volumi fisici, è possibile che siano elencati più dispositivi.

Un altro tipo di dispositivo a blocchi logici è un dispositivo md (Multiple Devices, e un tempo si chiamava meta-disk penso), come /dev/md2. Per guardare i componenti di un dispositivo md, puoi usare mdadm --detailo guardare dentro/proc/mdstat

# df /srv
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/md2             956626436 199340344 757286092  21% /srv
# mdadm --detail /dev/md2
...details elided...
    Number   Major   Minor   RaidDevice State
       0       8        3        0      active sync   /dev/sda3
       1       8       19        1      active sync   /dev/sdb3

Puoi vedere che /dev/md2è sui dispositivi /dev/sda3e /dev/sdb3.

Esistono altri metodi per annidare i dispositivi a blocchi (fusibili, filesystem di loopback) che disporranno di metodi propri per determinare il dispositivo a blocchi sottostante e puoi anche nidificare più livelli in modo da procedere verso il basso. Dovrai prendere ogni caso così com'è.


4
+1. Interessante. Non sapevo dffosse così accomodante.
Faheem Mitha,

OK, l'ho fatto e ho ottenuto / dev / mapper / fun-root come il mio filesystem. E adesso? (Il nome del mio computer è "divertente")
ripper234

1
Allora forse stai usando LVM? lvdisplayo lvssarà tuo amico.
phunehehe,

5
Sono stato così colpito da questa risposta che l'ho usato come base per un comando, "rawdev", che restituisce i dispositivi sottostanti di un percorso o partizione, anche nei casi in cui LVM e / o MD sono nidificati. È disponibile su Github: github.com/BMDan/rawdev .
BMDan,

5

Per uno script, puoi usare:

$ df -P <pathname> | awk 'END{print $1}'

Questo è compatibile con POSIX.


Funziona la maggior parte delle volte, tuttavia se <nomepercorso> si trova in un'istantanea di btrfs, questo riporta '-'.
Vista ellittica

1

Nelle moderne distribuzioni di Ubuntu c'è un livello aggiuntivo (mappatore del dispositivo) tra il tuo file / directory e il dispositivo. /dev/mappercontiene collegamenti simbolici che puntano ai dispositivi speciali effettivi. Ad esempio, provando nella directory corrente:

$ df . | grep '^/' | cut -d' ' -f1
/dev/mapper/kubuntu--vg-root

$ ls -l /dev/mapper/kubuntu--vg-root
lrwxrwxrwx 1 root root 7 Nov 22 18:02 /dev/mapper/kubuntu--vg-root -> ../dm-1

Quindi, per ottenere il percorso completo del dispositivo a livello di codice, è possibile utilizzare:

$ realpath $(df . | grep '^/' | cut -d' ' -f1)

Qual è il mio caso:

/dev/dm-1

realpath fa parte dei coreutils GNU.


Bello, ma quando è utile l'intero percorso? dfvisualizzerà comunque il mapperpercorso.
Dan Dascalescu il

@DanDascalescu punto giusto. Può essere utile quando / se vuoi conoscere il dispositivo hardware reale che è quello che stavo cercando quando ho risposto a questa domanda.
arielf
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.