Wie finde ich heraus, auf welchem ​​physischen Gerät sich ein Ordner befindet?


Antworten:


148

Der df(1)Befehl teilt dem Gerät mit, dass sich eine Datei oder ein Verzeichnis befindet:

df /work

Das erste Feld enthält das Gerät, auf dem sich die Datei oder das Verzeichnis befindet.

z.B

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

Wenn es sich bei dem Gerät um ein logisches Volume handelt, müssen Sie ermitteln, auf welchen Blockgeräten sich das logische Volume befindet. Hierzu können Sie den lvs(8)Befehl verwenden:

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

Die letzte Spalte zeigt an, dass sich das logische Volume usrin der Volume-Gruppe orthanc( /dev/mapper/orthanc-usr) auf dem Gerät befindet /dev/sda3. Da eine Datenträgergruppe mehrere physische Datenträger umfassen kann, werden möglicherweise mehrere Geräte aufgelistet.

Ein anderer Typ eines logischen Blockgeräts ist ein md-Gerät (Multiple Devices), das meiner Meinung nach als Meta-Disk bezeichnet wird, wie z /dev/md2. Zum Anzeigen der Komponenten eines md-Geräts können Sie verwenden mdadm --detailoder nachsehen/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

Sie können sehen, dass /dev/md2auf den Geräten /dev/sda3und /dev/sdb3.

Es gibt andere Methoden, mit denen Blockgeräte verschachtelt werden können (Sicherung, Loopback-Dateisysteme), die ihre eigenen Methoden zum Ermitteln des zugrunde liegenden Blockgeräts haben. Sie können sogar mehrere Ebenen verschachteln, sodass Sie sich nach unten arbeiten müssen. Du musst jeden Fall so nehmen, wie er kommt.


4
+1. Interessant. Ich wusste nicht, dfwar so zuvorkommend.
Faheem Mitha

OK, das habe ich getan und als Dateisystem / dev / mapper / fun-root verwendet. Was jetzt? (Der Name meines Computers ist "Spaß")
Ripper234

1
Dann verwenden Sie vielleicht LVM? lvdisplayoder lvswird dein Freund sein.
Phunehehe

5
Diese Antwort hat mich so beeindruckt, dass ich sie als Grundlage für den Befehl "rawdev" ​​verwendet habe, der die zugrunde liegenden Geräte eines Pfads oder einer Partition zurückgibt, auch wenn LVM und / oder MD verschachtelt sind. Es ist auf Github verfügbar: github.com/BMDan/rawdev .
BMDan

5

Für ein Skript können Sie Folgendes verwenden:

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

Dies ist POSIX-kompatibel.


Funktioniert jedoch die meiste Zeit, wenn sich <Pfadname> in einem BTRFS-Snapshot befindet, meldet dies '-'.
Elliptical View

1

In modernen Distributionen von Ubuntu gibt es eine zusätzliche Ebene (Device Mapper) zwischen Ihrer Datei / Ihrem Verzeichnis und dem Gerät. /dev/mapperenthält symbolische Links, die auf die eigentlichen Spezialgeräte verweisen. Versuchen Sie beispielsweise das aktuelle Verzeichnis:

$ 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

Um den vollständigen Pfad des Geräts programmgesteuert abzurufen, können Sie Folgendes verwenden:

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

Welches ist mein Fall druckt:

/dev/dm-1

realpath ist ein Teil von GNU coreutils.


Schön, aber wann ist der vollständige Pfad sinnvoll? dfDer mapperPfad wird weiterhin angezeigt .
Dan Dascalescu

@ DanDascalescu fair point. Es kann nützlich sein, wenn Sie das tatsächliche Hardwaregerät kennen möchten, nach dem ich gesucht habe, als ich diese Frage gestellt habe.
Arielf
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.