Si je comprends votre question, vous voulez savoir quel périphérique a été utilisé pour un montage donné. Pour cela, vous pouvez utiliser la df
commande:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/fedora_greeneggs-root 50G 21G 27G 44% /
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.8G 14M 3.8G 1% /dev/shm
tmpfs 3.8G 984K 3.8G 1% /run
tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup
tmpfs 3.8G 3.4M 3.8G 1% /tmp
/dev/sda1 477M 99M 349M 23% /boot
/dev/mapper/fedora_greeneggs-home 402G 184G 198G 49% /home
Pour trouver le périphérique sur lequel se trouve un fichier / répertoire particulier, donnez-le comme argument df
. En utilisant votre exemple:
$ df -h /mnt
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 477M 99M 349M 23% /
Vous pouvez également utiliser la mount
commande:
$ mount | grep '^/dev'
/dev/mapper/fedora_greeneggs-root on / type ext4 (rw,relatime,seclabel,data=ordered)
/dev/sda1 on /boot type ext4 (rw,relatime,seclabel,data=ordered)
/dev/mapper/fedora_greeneggs-home on /home type ext4 (rw,relatime,seclabel,data=ordered)
Le répertoire monté pour chaque périphérique est le troisième argument de la sortie ci-dessus. Donc, pour l'appareil /dev/sda1
serait /boot
. Les autres périphériques utilisent LVM (Logical Volume Management) et il faudrait demander plus avant pour savoir quel périphérique est actuellement utilisé par LVM.
$PWD
(ce que je suis en train de monter) est enterré dans une série de liens symboliques, de montages de liaisons, etc., il me faudrait alors examiner de manière récursive le chemin des points de montage./proc/mounts
la "chose" qui est montée, du moins dans mon esprit, ce n’est pas le périphérique qui est le répertoire / fichier.readlink -f /mnt
montre-t-on?readlink -f /mnt
donne/mnt
Sur Linux , nous avons
findmnt
d'util-linux
exactement fait pour cetteL'avantage des autres solutions est que cela fonctionne toujours si les chemins sont obscurcis par des liens symboliques ou des montages de liaisons en double.
la source
La méthode la plus précise que je connaisse consiste à utiliser le résultat de l'appel système lstat (). Plus précisément, le champ st_dev. Il existe un utilitaire de ligne de commande, stat (1), qui permet de visualiser ces informations. Par exemple, la sortie de "stat / etc / issue" sur mon ordinateur portable:
Notez la troisième ligne, premier champ, "Device". Ici, il énumère 801h. Cette valeur peut être séparée en deux octets, 8 et 1. Le premier octet est appelé numéro majeur, le deuxième octet est le numéro mineur. La prochaine étape consiste donc à déterminer le périphérique majeur 8, mineur 1.
Je trouve que consulter / proc / partitions est le plus rapide. Dans mon cas, / proc / partitions a le contenu:
Il ressort assez clairement de cette sortie que la majeur 8, mineure 1 est sda1. Nous pouvons le confirmer avec un ls -l / dev / sda1
Notez le 8, 1 avant l’horodatage.
Il est important de comprendre / de se rappeler que le nom d’un fichier de périphérique tel que / dev / sda1 n’est qu’une étiquette. Les nombres majeur et mineur sont les valeurs significatives et importantes du fichier de périphérique. Si vous êtes curieux, consultez l'utilitaire mknod (1) utilisé pour créer les fichiers de périphérique. Je pourrais créer une nouvelle entrée / dev appelée aardvark avec majeur 8, mineure 18 avec la syntaxe suivante:
Ensuite, je pourrais facilement le monter:
et, si nous regardons le résultat de la commande mount ou le contenu de / proc / mounts et que nous voyons:
df -h montre:
... Quoi qu'il en soit, le but de tout cela est d'illustrer que les détails importants pour identifier un périphérique en mode bloc sont les nombres majeurs et mineurs - et non l'étiquette du fichier de périphérique - et que l'appel système lstat () est le meilleur moyen de interroger ces valeurs.
En guise de dernier commentaire, je viens de relire votre question pour m'assurer de bien y répondre et j'ai compris que vous demandiez quelle étiquette de périphérique source s'afficherait dans / proc / mounts pour un montage bind. Ce serait la même étiquette de périphérique source que celle utilisée dans l'appel originel de mount (2) pour la source du point de montage du système de fichiers pour le montage de liaison. Peut-être qu'un exemple aiderait:
J'ai / dev / sdb2 et / dev / aardvark (comme ci-dessus). Remarquez que je vais monter deux fois le même système de fichiers. Je fais ce qui suit:
Notez que je crée le répertoire somedir dans / mnt1. Mais étant donné que / mnt1 et / mnt2 ont le même système de fichiers monté, un répertoire sera également accessible via / mnt2.
Maintenant, si nous vérifions / proc / mounts, nous voyons:
L'étiquette du périphérique source sur les montages / foo / ... bind est identique à la valeur fournie à l'origine dans l'appel de système de fichiers mount (2). N'oubliez pas que / dev / aardvark et / dev / sdb2 dans mon exemple sont le même périphérique.
Je me rends compte que je viens de taper un roman et que la première partie ne répond pas du tout à votre question, mais le supprimer semblait une perte de temps. Peut-être que ça va aider quelqu'un d'autre.
Bonne chance.
PS Ne pas oublier que certains systèmes de fichiers sont basés sur le réseau - comme NFS ou CIFS - ou sont virtuels - comme procfs ou sysfs et n’ont pas de périphérique bloc source. Je ne sais pas ce qui sera retourné en tant que périphérique dans la sortie de statistiques, juste pour ce que cela vaut.
la source
Étant donné les points de montage typiques suivants:
stat --format %m <path>
imprimera uniquement le point de montage de manière arrondie (bien que vous deviez vérifier le code de sortie pour détecter sans erreur une erreur de permission; les approches de table de montage gagnent ici):Les liens symboliques prennent un peu de soin comme d'habitude:
Et bien sûr, n'oubliez pas d'utiliser des guillemets lors de la création de scripts. Considérez un chemin de point de montage avec des espaces et autres:
Tu es grand comment ?
L'achèvement des onglets de ma distribution ne comprend même pas cela correctement. Nous allons donc utiliser un caractère générique comme exemple de point de montage avec des retours chariot, des sauts de ligne et des espaces:
la source