提问人:nilesh.b 提问时间:3/13/2022 最后编辑:nilesh.b 更新时间:3/13/2022 访问量:197
Linux 从文件中获取物理位置并写入内容
Linux Get physical location from file and write contents
问:
我想获取linux文件的物理位置,/root/f.txt并写入(覆盖)文件的一些内容
- 文件是 /root/f.txt
- 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
- 从“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
这里的物理块从 1761827 开始,1 块是 4096。 因此,文件的物理位置为:1761827 * 4096 = 7216443392
我只有“/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
- 但是当我看到文件 /root/f.txt 的内容时,输出仍然相同
#cat /root/f.txt
This is new file ha ha ha
所以要么是物理位置不正确,要么是我用dd做错了什么。
答:
0赞
Sagar
3/13/2022
#1
initial将文件拉入页面缓存中。然后,使用 直接写入块设备。此时,内核没有理由相信内存中的页面与磁盘不一致,因此当您在 .cat
dd
cat
dd
要查看使用 , sync(1) 写入的新数据,并在运行之前删除页面缓存:dd
dd
sync
sudo sh -c 'echo 1 > /proc/sys/vm/drop_caches'
评论
filefrag