struct statにst_devメンバーがあり、1つのパーティションを一意に識別する必要があります。
bashの例:
stat ~/.vimrc
File: `/home2//leonard/.vimrc' -> `local-priv/vimrc'
Size: 16 Blocks: 0 IO Block: 4096 symbolic link
Device: 802h/2050d Inode: 6818899 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 1024/ leonard) Gid: ( 1024/ leonard)
Access: 2012-06-22 16:36:45.341371003 +0300
Modify: 2012-06-22 16:36:45.341371003 +0300
Change: 2012-06-22 16:36:45.341371003 +0300
statユーティリティは追加の魔法を行いません。strace-vvvの出力は次のとおりです。
lstat64("/home2//leonard/.vimrc", {st_dev=makedev(8, 2), st_ino=6818899, st_mode=S_IFLNK|0777, st_nlink=1, st_uid=1024, st_gid=1024, st_blksize=4096, st_blocks=0, st_size=16, st_atime=2012/06/22-16:36:45, st_mtime=2012/06/22-16:36:45, st_ctime=2012/06/22-16:36:45}) = 0
0x0802はメジャー8(sd)パーティション2であるため、/ dev / sda2
これを実際のパーティションにマップするために、/ proc / mountsを繰り返し、すべてのデバイスを統計することができます(最初の列)。/ proc / mountsの内容は、カーネルから直接取得されることを除けば、mount(1)の出力と同じです。一部のディストリビューションは、/ etc/mtabを/proc/mountsにシンボリックリンクします。
または、/ proc/partitionsを解析できます。
$ cat /proc/partitions
major minor #blocks name
8 0 976762584 sda
8 1 3998720 sda1
8 2 972762112 sda2
もちろん、/ dev / sdaは実際には存在しない可能性があり、デバイスは/ dev / disk / by-uuid/c4181217-a753-4cf3-b61d-190ee3981a3fのような長いudev名を使用している可能性があります。メジャー/マイナー番号は、パーティションの信頼できる一意の識別子である必要があります。