วิธีที่แม่นยำที่สุดที่ฉันทราบคือใช้เอาต์พุตของการเรียกระบบ 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)
สังเกตุบรรทัดที่สามฟิลด์แรก "อุปกรณ์" ที่นี่มันแสดงรายการ 801h ค่านั้นสามารถแยกออกเป็นสองไบต์ 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 ก่อน dateramp
สิ่งสำคัญคือต้องเข้าใจ / จำไว้ว่าชื่อของไฟล์อุปกรณ์เช่น / dev / sda1 เป็นเพียงฉลาก หมายเลขหลักและรองคือค่าสำคัญและสำคัญของไฟล์อุปกรณ์ หากคุณอยากรู้อยากเห็นตรวจสอบยูทิลิตี้ mknod (1) ที่ใช้ในการสร้างไฟล์อุปกรณ์ ฉันสามารถสร้างรายการใหม่ / dev ที่เรียกว่า aardvark ด้วย major 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) ต้นฉบับสำหรับแหล่งจุดติดตั้งระบบไฟล์สำหรับการเชื่อมต่อแบบ bind บางทีตัวอย่างจะช่วย:
ฉันมี / 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 / ... bind mounts จะเหมือนกับค่าที่ให้มาในการเรียกเมานต์ระบบไฟล์ (2) จำไว้ว่า / dev / aardvark และ / dev / sdb2 ในตัวอย่างของฉันเป็นอุปกรณ์เดียวกัน
ฉันรู้ว่าฉันเพิ่งพิมพ์นวนิยายขึ้นมาและครึ่งแรกไม่ได้ตอบคำถามของคุณเลย แต่ดูเหมือนว่าจะเป็นการลบทิ้ง บางทีมันอาจช่วยคนอื่นได้
โชคดี.
PS โปรดจำไว้ว่าระบบไฟล์บางระบบนั้นใช้เครือข่ายเช่น NFS หรือ CIFS หรือเสมือนจริงเช่น procfs หรือ sysfs และไม่มีอุปกรณ์บล็อกต้นทาง ฉันไม่ทราบว่าจะส่งคืนอะไรเป็นอุปกรณ์ในเอาต์พุต stat เพียงเพื่อสิ่งที่คุ้มค่า
$PWD
(ซึ่งเป็นสิ่งที่ฉันกำลังติดตั้ง) ถูกฝังอยู่ในชุดของ symlinks ผูกติด ฯลฯ จากนั้นฉันจะต้องตรวจสอบเส้นทางซ้ำสำหรับจุดที่ติดตั้งซ้ำ