Phương pháp chính xác nhất mà tôi biết là sử dụng đầu ra của lệnh gọi hệ thống lstat (). Cụ thể, trường st_dev. Có một tiện ích dòng lệnh, stat (1) có thể được sử dụng để xem thông tin này. Ví dụ: đầu ra của "stat / etc / vấn đề" trên máy tính xách tay của tôi:
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)
Lưu ý dòng thứ ba, trường đầu tiên, "Thiết bị". Ở đây nó liệt kê 801h. Giá trị đó có thể được tách thành hai byte, 8 và 1. byte đầu tiên được gọi là số chính, byte thứ hai là số phụ. Vì vậy, bước tiếp theo là tìm ra thiết bị chính 8, phụ 1 là gì.
Tôi thấy tư vấn / Proc / phân vùng là nhanh nhất. Trong trường hợp của tôi, / Proc / phân vùng có nội dung:
major minor #blocks name
8 16 234431064 sdb
8 17 33554432 sdb1
8 18 200875608 sdb2
8 0 500107608 sda
8 1 500106584 sda1
Rõ ràng từ đầu ra chính 8, phụ 1 là sda1. Chúng tôi có thể xác nhận điều này với một ls -l / dev / sda1
brw-rw---- 1 root disk 8, 1 May 8 05:33 /dev/sda1
Lưu ý 8, 1 trước dấu thời gian.
Điều quan trọng là phải hiểu / nhớ rằng tên của tệp thiết bị như / dev / sda1 chỉ là nhãn. Các số chính và số phụ là các giá trị quan trọng, quan trọng của tệp thiết bị. Nếu bạn thấy tò mò, hãy kiểm tra tiện ích mknod (1) được sử dụng để tạo tập tin thiết bị. Tôi có thể tạo một mục mới / dev được gọi là aardvark với chính 8, phụ 18 với cú pháp sau:
mknod /dev/aardvark b 8 18
Sau đó, tôi có thể dễ dàng gắn kết nó:
mount /dev/aardvark /mnt
và, nếu chúng ta nhìn vào đầu ra của lệnh mount hoặc nội dung của / Proc / mounts và chúng ta thấy:
/dev/aardvark on /mnt type xfs (rw,relatime,attr2,inode64,noquota)
df -h cho thấy:
/dev/aardvark 192G 154G 38G 81% /mnt
... Dù sao đi nữa, quan điểm của tất cả những điều này là để minh họa rằng các chi tiết quan trọng để xác định một thiết bị khối là số chính và số phụ - không phải nhãn tệp thiết bị - và sử dụng lệnh gọi hệ thống lstat () là cách tốt nhất để truy vấn các giá trị đó.
Như một bình luận cuối cùng, tôi chỉ đọc lại câu hỏi của bạn để đảm bảo rằng tôi đã trả lời nó và tôi nhận ra rằng bạn đang hỏi nhãn thiết bị nguồn nào sẽ hiển thị trong / Proc / mounts cho một mount mount. Đó sẽ là nhãn thiết bị nguồn giống như đã được sử dụng trong lệnh gọi gốc (2) cho nguồn gắn kết hệ thống tập tin cho gắn kết liên kết. Có lẽ một ví dụ sẽ giúp:
Tôi có / dev / sdb2 và / dev / aardvark (giống như trên). Cả hai đều là chính 8, nhỏ 18. Lưu ý, tôi sẽ gắn cùng một hệ thống tập tin hai lần. Tôi làm như sau:
mkdir /mnt1 /mnt2 /foo
mount /dev/aardvark /mnt1
mount /dev/sdb2 /mnt2
Lưu ý rằng tôi tạo thư mục somedir trong / mnt1. Nhưng vì / mnt1 và / mnt2 có cùng hệ thống tập tin được gắn kết, somedir cũng sẽ có thể truy cập thông qua / mnt2.
mkdir /mnt1/somedir
mkdir /foo/left /foo/right
mount -o bind /mnt1/somedir /foo/left
mount -o bind /mnt2/somedir /foo/right
Bây giờ, nếu chúng ta kiểm tra / Proc / mounts, chúng ta sẽ thấy:
/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
Nhãn thiết bị nguồn trên các liên kết gắn kết / foo / ... giống như giá trị ban đầu được cung cấp trong lệnh gọi hệ thống tập tin (2). Hãy nhớ rằng, / dev / aardvark và / dev / sdb2 trong ví dụ của tôi là cùng một thiết bị.
Tôi nhận ra rằng tôi vừa gõ một cuốn tiểu thuyết và nửa đầu không thực sự trả lời câu hỏi của bạn, nhưng dường như thật lãng phí khi xóa nó. Có lẽ nó sẽ giúp người khác.
Chúc may mắn.
PS Hãy nhớ rằng một số hệ thống tệp dựa trên mạng - như NFS hoặc CIFS - hoặc là ảo - như Procfs hoặc sysfs và không có thiết bị chặn nguồn. Tôi không biết những gì sẽ được trả lại là thiết bị trong đầu ra stat, chỉ với những gì nó có giá trị.
$PWD
(đó là những gì tôi đang gắn kết) bị chôn vùi trong một loạt các liên kết tượng trưng, gắn kết liên kết, v.v. thì tôi sẽ cần kiểm tra đệ quy đường dẫn cho các điểm gắn kết.