Найбільш точний мені відомий метод - це використовувати вихід системного виклику lstat (). Зокрема, поле st_dev. Існує утиліта командного рядка stat (1), за допомогою якої можна переглянути цю інформацію. Наприклад, вихід "stat / etc / issue" на моєму ноутбуці:
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)
Помітьте третій рядок, перше поле, "Пристрій". Тут перелічено 801 год. Це значення можна розділити на два байти, 8 і 1. Перший байт відомий як основне число, другий байт - другорядне число. Отже, наступний крок - з’ясувати, який пристрій є основним 8, другорядним - 1.
Я вважаю, що консалтинг / proc / розділи є найшвидшим. У моєму випадку / proc / розділи містить вміст:
major minor #blocks name
8 16 234431064 sdb
8 17 33554432 sdb1
8 18 200875608 sdb2
8 0 500107608 sda
8 1 500106584 sda1
З цього результату досить зрозуміло, що основний 8, мінор 1 - sda1. Ми можемо підтвердити це за допомогою ls -l / dev / sda1
brw-rw---- 1 root disk 8, 1 May 8 05:33 /dev/sda1
Помітьте 8, 1 перед позначкою дати.
Важливо розуміти / пам’ятати, що ім’я такого пристрою, як / dev / sda1, є лише міткою. Основні та незначні числа - це значущі, важливі значення файлу пристрою. Якщо вам цікаво, перегляньте утиліту mknod (1), яка використовується для створення файлів пристроїв. Я можу створити новий / dev запис під назвою aardvark з основним 8, другорядним 18 із таким синтаксисом:
mknod /dev/aardvark b 8 18
Тоді я міг би легко встановити його:
mount /dev/aardvark /mnt
і, якщо ми подивимось на результат команди mount або вміст / proc / mounts і побачимо:
/dev/aardvark on /mnt type xfs (rw,relatime,attr2,inode64,noquota)
df -h показує:
/dev/aardvark 192G 154G 38G 81% /mnt
... У будь-якому разі, суть у всьому цьому полягає в тому, щоб проілюструвати, що важливими деталями для ідентифікації блокового пристрою є основні та незначні номери - не ярлик файлу пристрою - і що найкращим способом використання системного виклику lstat () є запитувати ці значення.
Як останній коментар, я просто перечитав ваше запитання, щоб переконатися, що я відповів на нього, і зрозумів, що ви запитуєте, яка мітка пристрою-джерела відображатиметься в / proc / mounts для прив’язки. Це була би та сама мітка пристрою джерела, що була використана в початковому виклику кріплення (2) для джерела точки кріплення файлової системи для прив'язки. Можливо, приклад допоможе:
У мене є / dev / sdb2 та / dev / aardvark (те саме, що вище). Вони обидва основні 8, другорядні 18. Зверніть увагу, я буду монтувати одну і ту ж файлову систему двічі. Я роблю наступне:
mkdir /mnt1 /mnt2 /foo
mount /dev/aardvark /mnt1
mount /dev/sdb2 /mnt2
Зауважте, що я роблю каталог somedir в / mnt1. Але оскільки / mnt1 та / mnt2 мають однакову файлову систему, встановлений, somedir також буде доступний через / mnt2.
mkdir /mnt1/somedir
mkdir /foo/left /foo/right
mount -o bind /mnt1/somedir /foo/left
mount -o bind /mnt2/somedir /foo/right
Тепер, якщо ми перевіряємо / proc / mounts, ми бачимо:
/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
Мітка пристрою-джерела на кріпленнях / foo / ... є такою ж, як і значення, спочатку надане у виклику кріплення (2) файлової системи. Пам'ятайте, / dev / aardvark та / dev / sdb2 у моєму прикладі - це той самий пристрій.
Я усвідомлюю, що щойно я набрав роман, і перша половина насправді взагалі не відповідає на ваше запитання, але видалити його видалося такою марною. Можливо, це допоможе комусь іншому.
Щасти.
PS Майте на увазі, що деякі файлові системи базуються на мережах - наприклад, NFS або CIFS - або є віртуальними, як PROFS або sysfs і не мають пристрою джерельного блоку. Я не знаю, що буде повернуто як пристрій у статистичному виході, тільки для того, що воно коштує.
$PWD
(це те, що я монтую) похований у серії символьних посилань, прив’язування кріплень тощо, тоді мені потрібно буде рекурсивно вивчити шлях на точки монтажу.