查找文件所在磁盘扇区

这篇具有很好参考价值的文章主要介绍了查找文件所在磁盘扇区。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、树莓派挂载优盘失败

提示信息已经可以很明显的看出挂在失败的原因,文件系统超级块存在问题,根本原因是U盘没有正确的格式化。

curtis@raspberrypi:/sys/class $ sudo mount /dev/sdb /mnt/
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/sdb, missing codepage or helper program, or other error.

curtis@raspberrypi:/sys/class $ sudo mkfs.ext4 /dev/sdb
mke2fs 1.46.2 (28-Feb-2021)
Found a dos partition table in /dev/sdb
Proceed anyway? (y,N) y
Creating filesystem with 7680000 4k blocks and 1921360 inodes
Filesystem UUID: 58506ab8-491f-4d42-a643-1fe7576d742f
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks):
done
Writing superblocks and filesystem accounting information:
done

格式化之后尝试挂在优盘,挂载成功。

curtis@raspberrypi:/sys/class $ sudo mount /dev/sdb /mnt/
curtis@raspberrypi:/sys/class $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       118G  3.9G  109G   4% /
devtmpfs        3.6G     0  3.6G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           1.6G  1.2M  1.6G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
/dev/sda1       255M   57M  199M  23% /boot
tmpfs           781M   20K  781M   1% /run/user/1000
/dev/sdb         29G   24K   28G   1% /mnt

树莓派重启之后,U盘被自动挂载。

curtis@raspberrypi:~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       118G  3.8G  109G   4% /
devtmpfs        3.6G     0  3.6G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           1.6G  1.2M  1.6G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
/dev/sda1       255M   57M  199M  23% /boot
tmpfs           781M   20K  781M   1% /run/user/1000
/dev/sdb         29G   28K   28G   1% /media/curtis/58506ab8-491f-4d42-a643-1fe7576d742f

二、debugfs

2.1 基本用法

在 Linux 中,可以使用 debugfs 工具来查找文件所在的磁盘扇区。具体步骤如下:

debugfs:  help
Available debugfs requests:

show_debugfs_params, params
                         Show debugfs parameters
open_filesys, open       Open a filesystem
close_filesys, close     Close the filesystem
freefrag, e2freefrag     Report free space fragmentation
feature, features        Set/print superblock features
dirty_filesys, dirty     Mark the filesystem as dirty
init_filesys             Initialize a filesystem (DESTROYS DATA)
show_super_stats, stats  Show superblock statistics
ncheck                   Do inode->name translation
icheck                   Do block->inode translation
change_root_directory, chroot
                         Change root directory
change_working_directory, cd
                         Change working directory
list_directory, ls       List directory
show_inode_info, stat    Show inode information
dump_extents, extents, ex
                         Dump extents information
blocks                   Dump blocks used by an inode
filefrag                 Report fragmentation information for an inode
link, ln                 Create directory link
unlink                   Delete a directory link
mkdir                    Create a directory
rmdir                    Remove a directory
rm                       Remove a file (unlink and kill_file, if appropriate)
kill_file                Deallocate an inode and its blocks
copy_inode               Copy the inode structure
clri                     Clear an inode's contents
freei                    Clear an inode's in-use flag
seti                     Set an inode's in-use flag
testi                    Test an inode's in-use flag
freeb                    Clear a block's in-use flag
setb                     Set a block's in-use flag
testb                    Test a block's in-use flag
modify_inode, mi         Modify an inode by structure
find_free_block, ffb     Find free block(s)
find_free_inode, ffi     Find free inode(s)
print_working_directory, pwd
                         Print current working directory
expand_dir, expand       Expand directory
mknod                    Create a special file
list_deleted_inodes, lsdel
                         List deleted inodes
                         
write                    Copy a file from your native filesystem
dump_inode, dump         Dump an inode out to a file
cat                      Dump an inode out to stdout
lcd                      Change the current directory on your native filesystem
rdump                    Recursively dump a directory to the native filesystem
set_super_value, ssv     Set superblock value
set_inode_field, sif     Set inode field
set_block_group, set_bg  Set block group descriptor field
logdump                  Dump the contents of the journal
htree_dump, htree        Dump a hash-indexed directory
dx_hash, hash            Calculate the directory hash of a filename
dirsearch                Search a directory for a particular filename
bmap                     Calculate the logical->physical block mapping for an inode
fallocate                Allocate uninitialized blocks to an inode
punch, truncate          Punch (or truncate) blocks from an inode by deallocating them
symlink                  Create a symbolic link
imap                     Calculate the location of an inode
dump_unused              Dump unused blocks
set_current_time         Set current time to use when setting filesystem fields
supported_features       Print features supported by this version of e2fsprogs
dump_mmp                 Dump MMP information
set_mmp_value, smmp      Set MMP value
extent_open, eo          Open inode for extent manipulation
zap_block, zap           Zap block: fill with 0, pattern, flip bits etc.
block_dump, bdump, bd    Dump contents of a block
ea_list                  List extended attributes of an inode
ea_get                   Get an extended attribute of an inode
ea_set                   Set an extended attribute of an inode
ea_rm                    Remove an extended attribute of an inode
list_quota, lq           List quota
get_quota, gq            Get quota
inode_dump, idump, id    Dump the inode structure in hex
journal_open, jo         Open the journal
journal_close, jc        Close the journal
journal_write, jw        Write a transaction to the journal
journal_run, jr          Recover the journal
help                     Display info on command or topic.
list_requests, lr, ?     List available commands.
quit, q                  Leave the subsystem.

支持的文件系统类型

  • ext2/ext3/ext4 文件系统:debugfs 最初是为 ext2 文件系统设计的,后来扩展支持了 ext3 和 ext4 文件系统。它提供了与 ext 文件系统相关的功能,如查看和修改文件系统的超级块、组描述符、索引节点等。

  • JFS 文件系统:debugfs 也提供了对 JFS(Journaled File System)文件系统的支持。您可以使用 debugfs 与 JFS 文件系统进行交互,并执行调试操作,如查看和修改超级块、索引节点等。

  • XFS 文件系统:debugfs 还可以用于与 XFS(eXtended File System)文件系统进行调试。它提供了对 XFS 文件系统的访问和操作功能,如查看和修改文件系统的元数据、目录结构等。

首先,创建一个文件,并使用 df 命令查看文件所在的文件系统和挂载点,例如:

root@raspberrypi:/media/curtis/58506ab8-491f-4d42-a643-1fe7576d742f# echo "this is test string !" > /mnt/test.txt
root@raspberrypi:/media/curtis/58506ab8-491f-4d42-a643-1fe7576d742f# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       118G  3.9G  109G   4% /
devtmpfs        3.6G     0  3.6G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           1.6G  1.2M  1.6G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
/dev/sda1       255M   57M  199M  23% /boot
tmpfs           781M   20K  781M   1% /run/user/1000
/dev/sdb         29G   28K   28G   1% /media/curtis/58506ab8-491f-4d42-a643-1fe7576d742f

可以看到,文件所属的块设备为 /dev/sdb,挂载点是/media/curtis/58506ab8-491f-4d42-a643-1fe7576d742f。

使用 debugfs 命令进入文件系统的调试模式。

root@raspberrypi:/media/curtis/58506ab8-491f-4d42-a643-1fe7576d742f# debugfs /dev/sdb
debugfs 1.46.2 (28-Feb-2021)
debugfs:
2.2 逻辑扇区获取

接着,使用 show_inode_info, stat Show inode information命令查找文件的相关信息,既可以用show_inode_info,也可以用stat,参数为文件路径,如下所示:

debugfs:  show_inode_info
show_inode_info: Usage: show_inode_info <file>

debugfs:  show_inode_info ./test.txt
Inode: 12   Type: regular    Mode:  0644   Flags: 0x80000
Generation: 1226487998    Version: 0x00000000:00000001
User:     0   Group:     0   Project:     0   Size: 22
File ACL: 0
Links: 1   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x649c423b:9e1f8fb0 -- Wed Jun 28 15:22:51 2023
 atime: 0x649c447c:132b1038 -- Wed Jun 28 15:32:28 2023
 mtime: 0x649c423b:9e1f8fb0 -- Wed Jun 28 15:22:51 2023
crtime: 0x649c423b:9e1f8fb0 -- Wed Jun 28 15:22:51 2023
Size of extra inode fields: 32
Inode checksum: 0x259775cf
EXTENTS:
(0):34816
2.3 inode_info 字段信息说明
  1. Inode 相关信息:
    • Inode 号码:Inode: 12
    • 类型:Type: regular
    • 文件权限:Mode: 0644
    • 标志:Flags: 0x80000
    • 生成号:Generation: 1226487998
    • 版本号:Version: 0x00000000:00000001
    • 用户 ID:User: 0
    • 组 ID:Group: 0
    • 项目 ID:Project: 0
    • 文件大小:Size: 22
    • 文件 ACL:File ACL: 0
    • 硬链接数:Links: 1
    • 分配的块数:Blockcount: 8
    • 分片信息:Fragment: Address: 0 Number: 0 Size: 0
  2. 时间戳信息:
    • 创建时间:crtime: 0x649c423b:9e1f8fb0 – Wed Jun 28 15:22:51 2023
    • 修改时间:mtime: 0x649c423b:9e1f8fb0 – Wed Jun 28 15:22:51 2023
    • 访问时间:atime: 0x649c447c:132b1038 – Wed Jun 28 15:32:28 2023
    • 变化时间:ctime: 0x649c423b:9e1f8fb0 – Wed Jun 28 15:22:51 2023
  3. 额外 Inode 字段信息:
    • 额外 Inode 字段大小:Size of extra inode fields: 32
    • Inode 校验和:Inode checksum: 0x259775cf
  4. EXTENTS:逻辑块的信息:
    • 逻辑块号:(0):34816
      LBA地址是相对于文件系统来讲,而不是实际磁盘。

Logical block addressing (LBA) is a common scheme used for specifying the location of blocks of data stored on computer storage devices, generally secondary storage systems such as hard disk drives. LBA is a particularly simple linear addressing scheme; blocks are located by an integer index, with the first block being LBA 0, the second LBA 1, and so on.

2.4 文件系统块大小获取

可以看到,文件的 inode 号是 12,EXTENTS代表的是文件所在的逻辑扇区号,有可能是连续,也有可能不连续。

Filesystem volume name:   <none>
Last mounted on:          /media/curtis/58506ab8-491f-4d42-a643-1fe7576d742f
Filesystem UUID:          58506ab8-491f-4d42-a643-1fe7576d742f
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags:         unsigned_directory_hash
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              1921360
Block count:              7680000
Reserved block count:     384000
Overhead clusters:        164642
Free blocks:              7515351
Free inodes:              1921348
First block:              0
Block size:               4096	<----- 块大小
Fragment size:            4096
Group descriptor size:    64
Reserved GDT blocks:      1024
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8176
Inode blocks per group:   511
Flex block group size:    16
Filesystem created:       Wed Jun 28 15:17:43 2023
Last mount time:          Wed Jun 28 15:31:31 2023
Last write time:          Wed Jun 28 15:31:31 2023
Mount count:              3
Maximum mount count:      -1
Last checked:             Wed Jun 28 15:17:43 2023
Check interval:           0 (<none>)
Lifetime writes:          474 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     32
Desired extra isize:      32
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      0244c6ea-db9b-4c0a-87ea-eb125174e179
Journal backup:           inode blocks
2.5 数据读取

尝试直接从磁盘中读取文件数据,看看从inode中获取的信息是不是正确,因为EXTENTS表述的是逻辑扇区号,所以需要获取文件系统的块大小,如上所示,文件系统的块大小为4k。

root@raspberrypi:/home/curtis# dd if=/dev/sdb of=./test.img skip=34816 bs=4k count=2 iflag=direct
2+0 records in
2+0 records out
8192 bytes (8.2 kB, 8.0 KiB) copied, 0.00219406 s, 3.7 MB/s
root@raspberrypi:/home/curtis# hexdump ./test.img
0000000 6874 7369 6920 2073 6574 7473 7320 7274
0000010 6e69 2067 0a21 0000 0000 0000 0000 0000
0000020 0000 0000 0000 0000 0000 0000 0000 0000
*
0002000

从读出来的信息来看,正确从磁盘读到了test.txt的数据。文章来源地址https://www.toymoban.com/news/detail-507537.html

到了这里,关于查找文件所在磁盘扇区的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库所在服务器磁盘满了怎么办?

    大家好,我是G探险者。 给大家拜个晚年哈,节后上班第一天,打开电脑,发现数据库服务器连不上了。 幸亏,节后第一天上班的人不太多,领导还没来,我一番鼓捣解决了这个问题。 所以做个总结,记录一下。 使用mysql提供的客户端工具在命令行连接mysql数据库时,报错如

    2024年02月22日
    浏览(37)
  • 在矩阵中查找最大值的元素 以及其所在的行号、列号(C语言)

    描述: 在一个5×6矩阵b中查找最大值的元素以及其所在的行号和列号。 输入: 输入5行,每行输入6个整数,整数之间用空格隔开。 输出: 在第一行中按格式“max=××”输出一个整数××,即矩阵b的最大值;在第二行中按格式“row=××”输出一个整数××,即最大值所在的行号;

    2024年02月12日
    浏览(35)
  • 查找树莓派ip地址的几种方法

    从上面的图中可以看到树莓派是通过网线和win10电脑相连的,以此来共享win10电脑网络,但是需要在电脑端设置后才能将网络共享出来, 设置方法参考以下链接: 通过一根网线共享网络给另一个电脑或者群辉上网 注意,第六步不用做,最后以太网 也要先禁用再重启一次。

    2024年01月16日
    浏览(33)
  • 查找局域网树莓派raspberry的mac地址和ip

    依赖python库: 运行代码: 以上代码的运行有个工具的依赖 Npcap来源github Npcap来自官网 Bonjour来自github(这个通常Windows会自带,如果没有就下载安装一下) 通常,上面这个代码可能无法正常显示raspberry的主机名,那就要结合ping -4 raspberrypi.local指令了,代码如下: 看看运行结

    2024年01月20日
    浏览(27)
  • docker磁盘空间爆满 通过overlay2 目录名查找对应容器

    看到占用磁盘空间最大的目录是docker存储根目录下的overlay2目录 再查看docker存储根目录下的overlay2目录下哪个目录占用空间最大 找出最大的这个overlay2目录的目录名是:ef129273a3f100feec4970bee90b0b83d9f1b170f6a76668eba9bdcfbf5f4ac8 下面需要使用这个目录名字符串去反向查找这个目录属于哪

    2024年02月16日
    浏览(53)
  • SpringBoot获取jar文件所在目录

    例如我把jar文件放在/opt/test/目录下,并且把当前工作目录定位在/opt/test/目录下,获取到的结果确实是:/opt/test/ 但是! 但是! 但是!当我把工作目录切换(cd /home/)到其它地方:例如:/home/ 这时候再次通过上面的方式获取到的结果就不是理想的结果了,而是:/home/ 之后我

    2024年02月09日
    浏览(29)
  • 22.Linux修改文件所有者和修改文件所在组

    在 Linux 中,可以使用 chown 命令来修改文件的所有者和组,使用 chgrp 命令来修改文件所在组。下面是这两个命令的使用流程及示例: 修改文件所有者 使用 chown 命令,语法如下: 其中, 选项:用于指定一些额外的参数。常用选项包括 -R (递归地修改所有子目录和文件的所有

    2024年02月10日
    浏览(69)
  • Linux 下获取进程所在文件的路径

    以top进程为例: top进程的pid为31386 ,可以通过查看 /proc/pid/exe: 在Linux系统中,每个进程都有一个/proc/pid/exe文件,它是一个符号链接文件,指向当前进程的可执行文件。 更具体地说,/proc/pid/exe文件是一个符号链接文件,它的内容是一个指向当前进程可执行文件的绝对路径的

    2024年02月09日
    浏览(35)
  • Nginx配置文件 所在路径 到底在哪?

    (大坑,误)不同安装方式,nginx配置文件路径也不一样。 在安装目录下的conf目录下,比如我的安装目录是/etc/nginx,那么他的配置文件就在 /etc/nginx/conf 目录下。 若安装目录是/usr/local/nginx,则配置文件即为/usr/local/nginx/conf目录。(即/usr/local/nginx/conf/nginx.conf为配置文件) 在

    2024年02月08日
    浏览(47)
  • NodeJS获取当前目录、运行文件所在目录、运行文件的上级目录

    参考链接: NodeJS获取当前目录和运行文件所在目录 node如何获取当前文件的上级目录路径?

    2024年02月16日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包