如何获取文件的设备/分区名称?

我有如下的分区结构:

$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda6 51606140 16939248 34142692 34% / /dev/sda5 495844 72969 397275 16% /boot /dev/sda7 113022648 57515608 49765728 50% /home /dev/sda8 113022648 57515608 49765728 4% /mnt 

而使用readdir()parsing目录内容 – 如何找出哪个文件驻留在什么设备?

readdir()从根目录调用并parsing文件名并打印其大小。 如从设备:/ dev / sda6并列出该分区下的文件名。 当它从/ home读取内容时,它应该显示来自/ dev / sda7的读取内容和列表文件名

请让我知道,如果你需要更多的细节/信息

struct stat中有一个st_dev成员,它应该唯一标识一个分区。

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 

统计实用程序没有额外的魔法。 这里是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 /分区:

 $ cat /proc/partitions major minor #blocks name 8 0 976762584 sda 8 1 3998720 sda1 8 2 972762112 sda2 

当然/ dev / sda可能实际上并不存在,设备可能会使用一个很长的udev名称,如/ dev / disk / by-uuid / c4181217-a753-4cf3-b61d-190ee3981a3f。 主要/次要数字应该是分区的可靠唯一标识符。

你可以做

 df <file_name> 

这将给你的设备和分区的particuar文件