タイトル付きのこのU&L質問に答えている間:ファイルシステム内のファイルの開始ブロックと終了ブロックを表示するには、どのコマンドを使用しますか?、私はそれがそのinodeを使用してファイルのLBAを決定することが可能であるかどうかを理解しようとしました。
私の答えhdparm
は、LBAを見つけるための1つの方法として使用できると判断しました。
$ sudo hdparm --fibmap afile
afile:
filesystem blocksize 4096, begins at LBA 0; assuming 512 byte sectors.
byte_offset begin_LBA end_LBA sectors
0 282439184 282439191 8
しかし、LBAも取得するためにファイルのiノードを使用する方法があるかどうか、私は興味を持っていました。使用せずにhdparm
。
私はそこのツールの中に隠れて代替の方法かもしれないと思うfilefrag
、stat
、debugfs
、およびtune2fs
それをからかって私を逃亡されます。
誰かが代替案を考えることができますか?
これまでの私の研究のいくつかは、これに答えようとする勇敢な人々に役立つかもしれません。
filefrag
ツールfilefrag
を使用して、具体的にはその-e
スイッチからの結果を使用して、おそらく私が慣れていないいくつかの計算を行ってそこに到達できると思います。
出力例
$ filefrag -e afile
Filesystem type is: ef53
File size of afile is 20 (1 block of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 0: 35304898.. 35304898: 1: eof
afile: 1 extent found
iノード
可能性があると私が思う別の潜在的な方法は、ファイルのiノード情報を直接使用するか、またはWeb間で十分に文書化されていないいくつかの複雑な計算を通して使用することです。
例
まず、ファイルのiノードを見つけます。stat
コマンドまたはを使用してこれを行うことができますls -i
。
stat
$ stat afile
File: ‘afile’
Size: 20 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 6560281 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ saml) Gid: ( 1000/ saml)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2013-12-27 18:40:12.788333778 -0500
Modify: 2013-12-27 18:40:23.103333073 -0500
Change: 2013-12-27 18:44:03.697317989 -0500
Birth: -
ls -i
$ ls -i
6560281 afile
iノード情報を入手したら、ツールを使用して、このファイルが存在するファイルシステムを開くことができますdebugfs
。
注:ファイルが存在するファイルシステムを特定するには、コマンドを使用できますdf <filename>
。
私たちが実行した場合、今debugfs
のコマンドを実行するとstat <inode #>
、私たちは、このファイルのデータが含まれているエクステントのリストを取得することができます。
$ sudo debugfs -R "stat <6560281>" /dev/mapper/fedora_greeneggs-home
debugfs 1.42.7 (21-Jan-2013)
Inode: 6560281 Type: regular Mode: 0664 Flags: 0x80000
Generation: 1999478298 Version: 0x00000000:00000001
User: 1000 Group: 1000 Size: 20
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 8
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x52be10c3:a640e994 -- Fri Dec 27 18:44:03 2013
atime: 0x52be0fdc:bbf41348 -- Fri Dec 27 18:40:12 2013
mtime: 0x52be0fe7:18a2f344 -- Fri Dec 27 18:40:23 2013
crtime: 0x52be0dd8:64394b00 -- Fri Dec 27 18:31:36 2013
Size of extra inode fields: 28
Extended attributes stored in inode body:
selinux = "unconfined_u:object_r:user_home_t:s0\000" (37)
EXTENTS:
(0):35304898
これで上記のエクステント情報が得られました。ここで迷子になり、続行方法がわかりません。
filefrag -b512 -v ..
「physical_offset:211787168 .. 211795719」と表示されている場合、これらはLBAに相当しますか?これはhdparm --fibmap
、211787168..211795719 と同じファイルで動作するようです。私がドロップして-b512 -v
、defを使用する場合。1024、そしてマルチしようとします。8によって26473396⋅8..264744648,8になると、211787168..211795712になります。これは近いですが少しずれています。2番目の値は(26474465⋅8)-1 = 211795719になるはずですが、理由はわかりません。