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:
File: ‘/etc/issue’
Size: 65 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 1610916043 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
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:
major minor #blocks name
8 16 234431064 sdb
8 17 33554432 sdb1
8 18 200875608 sdb2
8 0 500107608 sda
8 1 500106584 sda1
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
brw-rw---- 1 root disk 8, 1 May 8 05:33 /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:
mknod /dev/aardvark b 8 18
Ensuite, je pourrais facilement le monter:
mount /dev/aardvark /mnt
et, si nous regardons le résultat de la commande mount ou le contenu de / proc / mounts et que nous voyons:
/dev/aardvark on /mnt type xfs (rw,relatime,attr2,inode64,noquota)
df -h montre:
/dev/aardvark 192G 154G 38G 81% /mnt
... 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:
mkdir /mnt1 /mnt2 /foo
mount /dev/aardvark /mnt1
mount /dev/sdb2 /mnt2
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.
mkdir /mnt1/somedir
mkdir /foo/left /foo/right
mount -o bind /mnt1/somedir /foo/left
mount -o bind /mnt2/somedir /foo/right
Maintenant, si nous vérifions / proc / mounts, nous voyons:
/dev/aardvark /mnt1 xfs rw,relatime,attr2,inode64,noquota 0 0
/dev/sdb2 /mnt2 xfs rw,relatime,attr2,inode64,noquota 0 0
/dev/aardvark /foo/left xfs rw,relatime,attr2,inode64,noquota 0 0
/dev/sdb2 /foo/right xfs rw,relatime,attr2,inode64,noquota 0 0
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.
$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.