Il metodo più accurato di cui sono a conoscenza è utilizzare l'output della chiamata di sistema lstat (). In particolare, il campo st_dev. C'è un'utilità della riga di comando, stat (1) che può essere utilizzata per visualizzare queste informazioni. Ad esempio, l'output di "stat / etc / issue" sul mio laptop:
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)
Si noti la terza riga, primo campo, "Dispositivo". Qui elenca 801h. Tale valore può essere separato in due byte, 8 e 1. Il primo byte è noto come il numero maggiore, il secondo byte è il numero minore. Quindi, il prossimo passo è capire quale dispositivo maggiore 8, minore 1.
Trovo che la consulenza / proc / partizioni sia la più veloce. Nel mio caso, / proc / partitions ha il contenuto:
major minor #blocks name
8 16 234431064 sdb
8 17 33554432 sdb1
8 18 200875608 sdb2
8 0 500107608 sda
8 1 500106584 sda1
È piuttosto chiaro da quell'output che il maggiore 8, il minore 1 è sda1. Possiamo confermarlo con ls -l / dev / sda1
brw-rw---- 1 root disk 8, 1 May 8 05:33 /dev/sda1
Notare l'8, 1 prima del datestamp.
È importante capire / ricordare che il nome di un file del dispositivo come / dev / sda1 è solo un'etichetta. I numeri maggiori e minori sono i valori significativi e importanti del file del dispositivo. Se sei curioso, controlla l'utilità mknod (1) utilizzata per creare i file del dispositivo. Potrei creare una nuova voce / dev chiamata aardvark con major 8, minor 18 con la seguente sintassi:
mknod /dev/aardvark b 8 18
Quindi, potrei facilmente montarlo:
mount /dev/aardvark /mnt
e, se guardiamo all'output del comando mount o al contenuto di / proc / mounts e vediamo:
/dev/aardvark on /mnt type xfs (rw,relatime,attr2,inode64,noquota)
df -h mostra:
/dev/aardvark 192G 154G 38G 81% /mnt
... Ad ogni modo, il punto di tutto ciò è illustrare che i dettagli importanti per l'identificazione di un dispositivo a blocchi sono i numeri maggiori e minori - non l'etichetta del file del dispositivo - e che l'uso della chiamata di sistema lstat () è il modo migliore per interrogare quei valori.
Come ultimo commento, ho appena riletto la tua domanda per assicurarmi di rispondere e mi sono reso conto che stavi chiedendo quale etichetta del dispositivo sorgente sarebbe stata mostrata in / proc / mounts per un mount bind. Sarebbe la stessa etichetta del dispositivo sorgente utilizzata nella chiamata mount originale (2) per l'origine mountpoint del filesystem per il mount bind. Forse un esempio potrebbe aiutare:
Ho / dev / sdb2 e / dev / aardvark (lo stesso di cui sopra). Sono entrambi maggiori 8, minori 18. Nota, monterò due volte lo stesso filesystem. Faccio quanto segue:
mkdir /mnt1 /mnt2 /foo
mount /dev/aardvark /mnt1
mount /dev/sdb2 /mnt2
Nota che creo la directory somedir in / mnt1. Ma poiché / mnt1 e / mnt2 hanno lo stesso filesystem montato, anche somedir sarà raggiungibile tramite / mnt2.
mkdir /mnt1/somedir
mkdir /foo/left /foo/right
mount -o bind /mnt1/somedir /foo/left
mount -o bind /mnt2/somedir /foo/right
Ora, se controlliamo / proc / mounts, vediamo:
/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'etichetta del dispositivo di origine sui mount bind / foo / ... è uguale al valore originariamente fornito nella chiamata mount (2) del filesystem. Ricorda, / dev / aardvark e / dev / sdb2 nel mio esempio sono lo stesso dispositivo.
Mi rendo conto di aver appena scritto un romanzo e la prima metà non risponde affatto alla tua domanda, ma mi è sembrato un tale spreco eliminarlo. Forse aiuterà qualcun altro.
In bocca al lupo.
PS Tieni presente che alcuni filesystem sono basati su rete - come NFS o CIFS - o sono virtuali - come procfs o sysfs e non hanno un dispositivo a blocchi sorgente. Non so cosa verrà restituito come dispositivo nell'output delle statistiche, solo per quello che vale.
$PWD
(che è quello che sto montando) è sepolto in una serie di collegamenti simbolici, attacchi di associazione, ecc., Allora avrei bisogno di esaminare ricorsivamente il percorso per i punti di montaggio.