Metode paling akurat yang saya tahu adalah menggunakan output dari panggilan sistem lstat (). Secara khusus, bidang st_dev. Ada utilitas baris perintah, stat (1) yang dapat digunakan untuk melihat informasi ini. Misalnya, keluaran "stat / etc / issue" di laptop saya:
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)
Perhatikan baris ketiga, bidang pertama, "Perangkat". Ini daftar 801j. Nilai itu dapat dipisahkan menjadi dua byte, 8 dan 1. Byte pertama dikenal sebagai angka utama, byte kedua adalah angka minor. Jadi, langkah selanjutnya adalah mencari tahu apa perangkat utama 8, minor 1 itu.
Saya menemukan konsultasi / proc / partisi menjadi yang tercepat. Dalam kasus saya, / proc / partisi memiliki konten:
major minor #blocks name
8 16 234431064 sdb
8 17 33554432 sdb1
8 18 200875608 sdb2
8 0 500107608 sda
8 1 500106584 sda1
Dari keluaran itu agak jelas bahwa mayor 8, minor 1 adalah sda1. Kami dapat mengkonfirmasi ini dengan ls -l / dev / sda1
brw-rw---- 1 root disk 8, 1 May 8 05:33 /dev/sda1
Perhatikan 8, 1 sebelum datestamp.
Sangat penting untuk memahami / mengingat bahwa nama file perangkat seperti / dev / sda1 hanya label. Angka utama dan kecil adalah nilai penting dan penting dari file perangkat. Jika Anda ingin tahu, periksa utilitas mknod (1) yang digunakan untuk membuat file perangkat. Saya dapat membuat entri baru / dev yang disebut aardvark dengan major 8, minor 18 dengan sintaks berikut:
mknod /dev/aardvark b 8 18
Lalu, saya bisa dengan mudah memasangnya:
mount /dev/aardvark /mnt
dan, jika kita melihat output dari perintah mount atau isi / proc / mounts dan kita melihat:
/dev/aardvark on /mnt type xfs (rw,relatime,attr2,inode64,noquota)
df -h menunjukkan:
/dev/aardvark 192G 154G 38G 81% /mnt
... Bagaimanapun, inti dari semua ini adalah untuk menggambarkan bahwa detail penting untuk mengidentifikasi perangkat blok adalah angka utama dan kecil - bukan label file perangkat - dan bahwa menggunakan system call lstat () adalah cara terbaik untuk menanyakan nilai-nilai itu.
Sebagai komentar terakhir, saya hanya membaca ulang pertanyaan Anda untuk memastikan saya menjawabnya dan saya menyadari Anda menanyakan label perangkat sumber apa yang akan muncul di / proc / mounts untuk bind mount. Itu akan menjadi label perangkat sumber yang sama seperti yang digunakan dalam panggilan mount asli (2) untuk sumber mountpoint filesystem untuk bind mount. Mungkin sebuah contoh akan membantu:
Saya memiliki / dev / sdb2 dan / dev / aardvark (sama seperti di atas). Keduanya 8 besar, minor 18. Catatan, saya akan memasang sistem file yang sama dua kali. Saya melakukan hal berikut:
mkdir /mnt1 /mnt2 /foo
mount /dev/aardvark /mnt1
mount /dev/sdb2 /mnt2
Perhatikan bahwa saya membuat direktori somedir di / mnt1. Tetapi karena / mnt1 dan / mnt2 memiliki sistem file yang sama, somedir juga dapat dijangkau melalui / mnt2.
mkdir /mnt1/somedir
mkdir /foo/left /foo/right
mount -o bind /mnt1/somedir /foo/left
mount -o bind /mnt2/somedir /foo/right
Sekarang, jika kita memeriksa / proc / mounts, kita melihat:
/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
Label perangkat sumber pada bind mount / foo / ... sama dengan nilai yang semula disediakan dalam panggilan mount filesystem (2). Ingat, / dev / aardvark dan / dev / sdb2 dalam contoh saya adalah perangkat yang sama.
Saya sadar saya baru saja mengetik novel dan babak pertama tidak benar-benar menjawab pertanyaan Anda sama sekali, tetapi sepertinya sia-sia menghapusnya. Mungkin itu akan membantu orang lain.
Semoga berhasil.
PS Perlu diingat bahwa beberapa sistem file berbasis jaringan - seperti NFS atau CIFS - atau virtual - seperti procfs atau sysfs dan tidak memiliki perangkat blok sumber. Saya tidak tahu apa yang akan dikembalikan sebagai perangkat dalam output stat, hanya untuk apa nilainya.
$PWD
(yang saya mount) dimakamkan di serangkaian symlink, bind mounts, dll maka saya akan perlu memeriksa secara rekursif jalur untuk titik mount.