Farkında olduğum en doğru yöntem, lstat () sistem çağrısının çıktısını kullanmaktır. Spesifik olarak, st_dev alanı. Bu bilgiyi görmek için kullanılabilecek bir komut satırı yardımcı programı stat (1) vardır. Örneğin, dizüstü bilgisayarımda "stat / etc / issue" çıktısı:
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)
Üçüncü satıra, ilk alana, "Aygıt" a dikkat edin. İşte 801h listeler. Bu değer iki bayt, 8 ve 1 olarak ayrılabilir. İlk bayt, ana sayı olarak bilinir, ikinci bayt, küçük sayıdır. Bu nedenle, bir sonraki adım, ana cihaz 8, minör 1'in ne olduğunu bulmak.
Danışmanlık / proc / bölümleri en hızlı buluyorum. Benim durumumda, / proc / partitions içeriği:
major minor #blocks name
8 16 234431064 sdb
8 17 33554432 sdb1
8 18 200875608 sdb2
8 0 500107608 sda
8 1 500106584 sda1
Binbaşı 8, minör 1'in sda1 olduğu bu çıktıdan açıkça anlaşılıyor. Bunu bir ls -l / dev / sda1 ile onaylayabiliriz.
brw-rw---- 1 root disk 8, 1 May 8 05:33 /dev/sda1
Tarih damgasından önce 8, 1 dikkat edin.
/ Dev / sda1 gibi bir aygıt dosyasının adının yalnızca bir etiket olduğunu anlamak / hatırlamak önemlidir. Büyük ve küçük sayılar, cihaz dosyasının önemli, önemli değerleridir. Merak ederseniz, aygıt dosyaları oluşturmak için kullanılan mknod (1) yardımcı programını inceleyin. Aşağıdaki sözdizimi ile majör 8, minör 18 ile aardvark adlı yeni / dev bir giriş oluşturabilirim:
mknod /dev/aardvark b 8 18
Sonra kolayca monte edebilirim:
mount /dev/aardvark /mnt
ve eğer mount komutunun çıktısına veya / proc / mounts içeriğine bakarsak ve şunu görürüz:
/dev/aardvark on /mnt type xfs (rw,relatime,attr2,inode64,noquota)
df -h şunları gösterir:
/dev/aardvark 192G 154G 38G 81% /mnt
... Her neyse, tüm bunların amacı, bir blok cihazı tanımlamak için önemli ayrıntıların, cihaz dosyası etiketi değil, büyük ve küçük sayılar olduğunu ve lstat () sistem çağrısını kullanmanın en iyi yol olduğunu göstermek. bu değerleri sorgula.
Son bir yorum olarak, yanıtladığımdan emin olmak için sorunuzu yeniden okudum ve bir bağlama montajı için / proc / mounts'ta hangi kaynak aygıt etiketinin gösterileceğini sorduğunuzu fark ettim. Bu, bağlama bağlama için dosya sistemi bağlama noktası kaynağını (2) orijinal bağda kullanılanla aynı kaynak aygıt etiketi olacaktır. Belki bir örnek yardımcı olacaktır:
/ Dev / sdb2 ve / dev / aardvark'ım (yukarıdakiyle aynı). Her ikisi de büyük 8, küçük 18'dir. Not, aynı dosya sistemini iki kez monte edeceğim. Aşağıdakileri yapıyorum:
mkdir /mnt1 /mnt2 /foo
mount /dev/aardvark /mnt1
mount /dev/sdb2 /mnt2
Dizini / mnt1 içinde bazı dizinler oluşturduğuma dikkat edin. Fakat / mnt1 ve / mnt2 aynı dosya sistemine monte edildiğinden, bazılarına / mnt2 üzerinden de erişilebilir olacaktır.
mkdir /mnt1/somedir
mkdir /foo/left /foo/right
mount -o bind /mnt1/somedir /foo/left
mount -o bind /mnt2/somedir /foo/right
Şimdi, eğer / proc / mounts'u kontrol edersek, şunu görürüz:
/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 üzerindeki kaynak cihaz etiketi, ilk olarak dosya sistemi mount (2) çağrısında verilen değerle aynıdır. Unutmayın, / dev / aardvark ve / dev / sdb2 örneğimde aynı cihaz.
Yeni bir roman yazdığımı ve ilk yarının sorunuzu gerçekten cevaplamadığını fark ettim, ancak silmek için çok fazla bir israf gibi görünüyordu. Belki başka birine yardım eder.
İyi şanslar.
PS Bazı dosya sistemlerinin ağ tabanlı - NFS veya CIFS gibi - veya sanal benzeri procfs veya sysfs olduğunu ve bir kaynak blok cihazının olmadığını unutmayın. Stat çıkışında cihaz olarak neyin iade edileceğini bilmiyorum.
$PWD
(Ben montaj ediyorum ne olduğunu) sembolik, bağlama bağlar, vb bir dizi gömüldü sonra yinelemeli bağlama noktaları için yolunu incelemek gerekir.