Comment trouver sur quel périphérique physique se trouve un dossier?

110

Plus précisément: je l’ai fait sudo mkdir /work, et j'aimerais vérifier qu’il repose bien sur mon disque dur et qu’il n’est pas mappé sur un autre lecteur.

Comment vérifier où ce dossier est physiquement situé?

ripper234
la source
voir unix.stackexchange.com/q/149660/4778 findmnt -T /work
ctrl-alt-delor

Réponses:

148

La df(1)commande vous indiquera le périphérique sur lequel se trouve un fichier ou un répertoire:

df /work

Le premier champ contient le périphérique sur lequel se trouve le fichier ou le répertoire.

par exemple

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

Si le périphérique est un volume logique, vous devez déterminer le ou les périphériques de bloc sur lesquels le volume logique est activé. Pour cela, vous pouvez utiliser la lvs(8)commande:

# 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)

La dernière colonne vous indique que le volume logique usrdu groupe de volumes orthanc( /dev/mapper/orthanc-usr) se trouve sur le périphérique /dev/sda3. Dans la mesure où un groupe de volumes peut s'étendre sur plusieurs volumes physiques, il est possible que plusieurs périphériques soient répertoriés.

Un autre type de périphérique de bloc logique est un périphérique md (plusieurs périphériques, que l'on appelait autrefois méta-disque, par exemple) /dev/md2. Pour examiner les composants d’un périphérique md, vous pouvez utiliser mdadm --detailou consulter/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

Vous pouvez voir que cela se /dev/md2trouve sur les appareils /dev/sda3et /dev/sdb3.

Il existe d'autres méthodes d'imbrication de périphériques (systèmes de fichiers en boucle, en boucle) qui auront leurs propres méthodes pour déterminer le périphérique de bloc sous-jacent, et vous pouvez même imbriquer plusieurs calques pour vous obliger à descendre. Vous devrez prendre chaque cas comme il vient.

camh
la source
4
+1 Intéressant. Je ne savais pas que dfc'était très arrangeant.
Faheem Mitha
OK, je l'ai fait et j'ai obtenu / dev / mapper / fun-root en tant que mon système de fichiers. Maintenant quoi? (Le nom de mon ordinateur est 'fun')
ripper234
1
Alors peut-être que vous utilisez LVM? lvdisplayou lvssera votre ami.
Phunehehe
5
J'ai été tellement impressionné par cette réponse que je l'ai utilisée comme base d'une commande, "rawdev", qui renvoie le ou les périphériques sous-jacents d'un chemin ou d'une partition, même dans les cas où LVM et / ou MD sont imbriqués. Il est disponible sur Github: github.com/BMDan/rawdev .
BMDan
5

Pour un script, vous pouvez utiliser:

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

Ceci est compatible POSIX.

Tom Hale
la source
Fonctionne la plupart du temps, cependant, si <chemin> est dans un instantané btrfs, cela indique '-'.
Vue elliptique
1

Dans les distributions modernes d'Ubuntu, il existe une couche supplémentaire (mappeur de périphérique) entre votre fichier / répertoire et le périphérique. /dev/mappercontient des liens symboliques pointant vers les dispositifs spéciaux réels. Par exemple, essayez le répertoire actuel:

$ 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

Donc, pour obtenir le chemin complet du périphérique par programmation, vous pouvez utiliser:

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

Quel est mon cas imprime:

/dev/dm-1

realpath fait partie de GNU coreutils.

arielf
la source
Bien, mais quand le chemin complet est-il utile? dfaffichera toujours le mapperchemin.
Dan Dascalescu le
@DanDascalescu fair point. Cela peut être utile lorsque / si vous voulez connaître le périphérique matériel actuel, ce que je recherchais lorsque je posais cette question.
arielf le