Linux 从文件中获取物理位置并写入内容

Linux Get physical location from file and write contents

提问人:nilesh.b 提问时间:3/13/2022 最后编辑:nilesh.b 更新时间:3/13/2022 访问量:197

问:

我想获取linux文件的物理位置,/root/f.txt并写入(覆盖)文件的一些内容

  1. 文件是 /root/f.txt
  2. lsblk 命令输出:
# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0             2:0    1    4K  0 disk
sda             8:0    0   16G  0 disk
├─sda1          8:1    0    1G  0 part /boot
└─sda2          8:2    0   15G  0 part
  ├─rhel-root 253:0    0 13.4G  0 lvm  /
  └─rhel-swap 253:1    0  1.6G  0 lvm  [SWAP]
sdb             8:16   0    1G  0 disk
sr0            11:0    1 1024M  0 rom

文件内容:

#cat /root/f.txt
This is new file ha ha ha
  1. 从“filefrag”命令中,我获得了文件的pysical位置
#filefrag -v /root/f.txt
Filesystem type is: 58465342
File size of /root/f.txt is 26 (1 block of 4096 bytes)
ext:     logical_offset:        physical_offset: length:   expected: flags:
 0:        0..       0:    1761827..   1761827:      1:             eof
/root/f.txt: 1 extent found
  1. 这里的物理块从 1761827 开始,1 块是 4096。 因此,文件的物理位置为:1761827 * 4096 = 7216443392

  2. 我只有“/dev/sda”,我正在尝试使用 dd 命令在位置 7216443392 写入:

#sudo dd seek=7216443392 if=/dev/zero of=/dev/sda count=1 obs=1
1+0 records in
512+0 records out
512 bytes (512 B) copied, 0.00699863 s, 73.2 kB/s
  1. 但是当我看到文件 /root/f.txt 的内容时,输出仍然相同
 #cat /root/f.txt
 This is new file ha ha ha

所以要么是物理位置不正确,要么是我用dd做错了什么。

Linux 命令行 文件系统 文件位置 原始磁盘

评论

0赞 stark 3/13/2022
通过读取块而不是覆盖块来测试不是更好吗?
0赞 Jiri B 5/22/2022
IMO 显示的不是物理磁盘,而是 LV 内部的位置。filefrag

答:

0赞 Sagar 3/13/2022 #1

initial将文件拉入页面缓存中。然后,使用 直接写入块设备。此时,内核没有理由相信内存中的页面与磁盘不一致,因此当您在 .catddcatdd

要查看使用 , sync(1) 写入的新数据,并在运行之前删除页面缓存dddd

sync
sudo sh -c 'echo 1 > /proc/sys/vm/drop_caches'