Gibt es einen Befehl, um anzuzeigen, wo eine Festplatte gemountet ist?

Gibt es einen Befehl, um anzuzeigen, wo eine Festplatte gemountet ist?

Gibt es einen einfachen Befehl, der den Geräteknoten einer Festplatte als Eingabe verwendet und mir sagt, wo (und ob) diese Festplatte eingebunden ist? Ist es möglich, den Einbindungspunkt selbst abzurufen, sodass ich ihn an einen anderen Befehl weitergeben kann?

Ich arbeite an einem Debian Squeeze-Livesystem mit einer Minimalinstallation (ich kann bei Bedarf zusätzliche Pakete installieren).

Antwort1

Unter Linux können Sie jetzt (seit Version 2.18) den findmntfolgenden Befehl verwenden:util-linux

$ findmnt -S /dev/VG_SC/home
TARGET SOURCE                 FSTYPE OPTIONS
/home  /dev/mapper/VG_SC-home ext4   rw,relatime,errors=remount-ro,data=ordered

Oder lsblk(auch aus util-linux, seit 2.19):

$ lsblk /dev/VG_SC/home
NAME       MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
VG_SC-home 254:2    0  200G  0 lvm  /home

Dies ist auch nützlich, um alle unter einem bestimmten Gerät (Festplatte oder Partition usw.) gemounteten Dateisysteme zu finden:

$ lsblk  /dev/sda2
NAME                    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda2                      8:2    0  59.5G  0 part
├─linux-debian64 (dm-1) 252:1    0    15G  0 lvm
└─linux-mint (dm-2)     252:2    0    15G  0 lvm  /

So erhalten Sie nur den Einhängepunkt:

$ findmnt -nr -o target -S /dev/storage/home
/home
$ lsblk -o MOUNTPOINT -nr /dev/storage/home
/home

Oben findmntwird ein Fehler-Exit-Status zurückgegeben, wenn das Gerät nicht gemountet ist, nicht lsblk.

Also:

if mountpoint=$(findmnt -nr -o target -S "$device"); then
  printf '"%s" is mounted on "%s"\n' "$device" "$mountpoint"
else
  printf '"%s" does not appear to be directly mounted\n' "$device"
fi

Antwort2

Unter Linux können Sie Einhängepunktinformationen direkt vom Kernel in abrufen /proc/mounts. Das mountProgramm zeichnet ähnliche Informationen in auf /etc/mtab. Die Pfade und Optionen können unterschiedlich sein, da /etc/mtabrepräsentiert, was mountan den Kernel übergeben wurde, während /proc/mountsdie Daten so angezeigt werden, wie sie im Kernel angezeigt werden. /proc/mountsist immer auf dem neuesten Stand, während dies /etc/mtabmöglicherweise nicht der Fall ist, wenn /etces zu einem Zeitpunkt schreibgeschützt war, der von den Boot-Skripten nicht erwartet wurde. Das Format ähnelt dem von/etc/fstab.

In beiden Dateien enthält das erste durch Leerzeichen getrennte Feld den Gerätepfad und das zweite Feld den Einhängepunkt.

awk -v needle="$device_path" '$1==needle {print $2}' /proc/mounts

oder wenn Sie awk nicht haben:

grep "^$device_path " /proc/mounts | cut -d ' ' -f 2

Es gibt eine Reihe von Randfällen, in denen Sie möglicherweise nicht das erhalten, was Sie erwarten. Wenn das Gerät über einen anderen Pfad in gemountet wurde, /devder dasselbe Gerät bezeichnet, werden Sie es auf diese Weise nicht bemerken. In /proc/mountssind Bind-Mounts nicht vom Original zu unterscheiden. Es kann mehr als eine Übereinstimmung geben, wenn ein Mount-Punkt einen anderen überschattet (das ist ungewöhnlich).

In /proc/selfoder /proc/$pidgibt es eine Datei pro Prozess mounts, die die globale Datei nachahmt. Die Mount-Informationen können zwischen Prozessen unterschiedlich sein, beispielsweise aufgrund vonchroot. Es gibt eine zusätzliche Datei mit dem Namen , mountinfodie ein anderes Format hat und mehr Informationen enthält, insbesondere die Haupt- und Nebennummern des Geräts. Aus demDokumentation:

36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue
(1)(2)(3)   (4)   (5)      (6)      (7)   (8) (9)   (10)         (11)

(1) mount ID:  unique identifier of the mount (may be reused after umount)
(2) parent ID:  ID of parent (or of self for the top of the mount tree)
(3) major:minor:  value of st_dev for files on filesystem
(4) root:  root of the mount within the filesystem
(5) mount point:  mount point relative to the process's root
(6) mount options:  per mount options
(7) optional fields:  zero or more fields of the form "tag[:value]"
(8) separator:  marks the end of the optional fields
(9) filesystem type:  name of filesystem of the form "type[.subtype]"
(10) mount source:  filesystem specific information or "none"
(11) super options:  per super block options

Wenn Sie also ein Gerät anhand der Nummer suchen, können Sie folgendermaßen vorgehen:

awk -v dev="$major:minor" '$3==dev {print $5}'
awk -v dev="$(stat -L -c %t:%T /dev/block/something)" '$3==dev {print $5}'

Antwort3

Der mountBefehl ohne Argumente listet alle aktuell gemounteten Dateisysteme auf; Sie können grepdies für die gewünschte Festplatte tun (oder grep /etc/mtab, das ist die Datei, mountaus der die Informationen gelesen werden):

$ grep /dev/sda /etc/mtab
/dev/sda3 /boot ext2 rw,noatime 0 0

Antwort4

Ich kenne keine saubere und einfache Methode, um festzustellen, ob ein Geräteknoten in /devgemountet ist oder nicht. Das hier ist jedoch, was ich anbieten kann. Es verarbeitet direkt gemountete Geräte ( /dev/sda1) und per UUID ( /dev/disk/by-uuid/aa4e7b08-6547-4b5a-85ad-094e9e1af74f) gemountete Geräte. Es funktioniert nicht, wenn Ihre Gerätenamen Leerzeichen enthalten.

deviceIsMounted()
{
    local DEVICE="$1"
    local MOUNT=$(
        (
            echo "$DEVICE"
            find /dev -type l -lname "*${DEVICE/*\/}" -exec readlink -f {} \; -print |
                xargs -n2 |
                awk -v device="$DEVICE" '$1 == device {print $2}'
        ) |
            xargs -n1 -i{} grep -F {} /proc/mounts
    )
    test -n "$MOUNT" && echo "$MOUNT"
}

deviceIsMounted /dev/sda1 && echo yes              # Mountpoint and status
deviceIsMounted /dev/md2 >/dev/null && echo yes    # Just status

Die Funktion schreibt den Eintrag von /proc/mountsnachstdoutwenn gefunden, wird auch der Beendigungsstatus auf 0 gesetzt. Andernfalls ist der Beendigungsstatus 1.

verwandte Informationen