it-swarm.com.de

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

Konkret: Ich habe Sudo mkdir /work und möchte überprüfen, ob es tatsächlich auf meiner Festplatte sitzt und keinem anderen Laufwerk zugeordnet ist.

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

120
ripper234

Der Befehl df(1) 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 Befehl lvs(8) 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 usr in der Volume-Gruppe orthanc (/dev/mapper/orthanc-usr) Auf dem Gerät /dev/sda3 Befindet. Da eine Datenträgergruppe mehrere physische Datenträger umfassen kann, sind möglicherweise mehrere Geräte aufgelistet.

Ein anderer Typ eines logischen Blockgeräts ist ein md-Gerät (Multiple Devices, das früher als Meta-Disk bezeichnet wurde), wie z. B. /dev/md2. Um sich die Komponenten eines MD-Geräts anzusehen, können Sie mdadm --detail Oder /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 sich /dev/md2 Auf den Geräten /dev/sda3 Und /dev/sdb3 Befindet.

Es gibt andere Methoden, mit denen Blockgeräte verschachtelt werden können (Fuse, Loopback-Dateisysteme), die über eigene Methoden zum Bestimmen des zugrunde liegenden Blockgeräts verfügen, und Sie können sogar mehrere Ebenen verschachteln, sodass Sie sich nach unten arbeiten müssen. Sie müssen jeden Fall so nehmen, wie er kommt.

154
camh

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

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

Dies ist POSIX-kompatibel.

5
Tom Hale

In modernen Ubuntu-Distributionen gibt es eine zusätzliche Ebene (Device Mapper) zwischen Ihrer Datei/Ihrem Verzeichnis und dem Gerät. /dev/mapper enthält symbolische Links, die auf die tatsächlichen 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 Teil von GNU coreutils.

2
arielf