2

次のようなパーティション構造があります。

$ 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() はルート ディレクトリから呼び出され、ファイル名を解析してそのサイズを出力します。from device : /dev/sda6 のように、そのパーティションの下のファイル名を一覧表示します。/home からコンテンツを読み取る場合 - /dev/sda7 からコンテンツを読み取って表示し、ファイル名を一覧表示する必要があります。

詳細/情報が必要な場合はお知らせください

4

2 に答える 2

2

あなたはただすることができます

df <file_name>

これにより、特定のファイルのデバイスとパーティションが得られます

于 2012-11-15T19:01:21.773 に答える
1

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名を使用している可能性があります。メジャー/マイナー番号は、パーティションの信頼できる一意の識別子である必要があります。

于 2012-11-15T18:44:06.457 に答える