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

110

Konkret: Ich habe es getan sudo mkdir /workund möchte überprüfen, ob es sich tatsächlich auf meiner Festplatte befindet und keiner anderen Festplatte zugeordnet ist.

Wie überprüfe ich, wo sich dieser Ordner befindet?

ripper234
quelle
siehe unix.stackexchange.com/q/149660/4778 findmnt -T /work
ctrl-alt-delor

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.

camh
quelle
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.

Tom Hale
quelle
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.

Arielf
quelle
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