如何获得文件的设备/分区的名字吗?(How to get a device/partition na

2019-08-02 19:47发布

我的分区结构,如:

$ 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解析目录中的内容() - 如何找出哪些文件驻留在什么设备上?

READDIR()从根目录调用并解析的文件名和打印其大小。 像从设备是:/ dev / SDA6并列出分区下的文件名。 当读取/家内容 - 它应该显示从/ dev / sda7和列表文件名阅读内容

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

Answer 1:

有一个在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 /坐骑和STAT的所有设备(第一列)。 的/ proc的内容/安装就像安装(1)的输出,除了它直接从内核来。 一些发行版的符号链接的/ etc / mtab中和/ proc /坐骑。

或者你可以解析的/ proc /分区:

$ cat /proc/partitions
major minor  #blocks  name

   8        0  976762584 sda
   8        1    3998720 sda1
   8        2  972762112 sda2

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



Answer 2:

你可以做

df <file_name>

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



文章来源: How to get a device/partition name of a file ?