当前位置: 技术问答>linux和unix
如何清除 block device 到buffer cache
来源: 互联网 发布时间:2016-12-01
本文导语: 正在开发一个特殊系统,已经mount起来的硬盘上的FAT32分区会被底层增加删除文件,而linux系统不知道。这样的话,目前只有先umount,再mount才能让系统知道文件系统已经发生变化。 目前发现修改过后通过 dd...
正在开发一个特殊系统,已经mount起来的硬盘上的FAT32分区会被底层增加删除文件,而linux系统不知道。这样的话,目前只有先umount,再mount才能让系统知道文件系统已经发生变化。
目前发现修改过后通过 dd命令获取分区内容,得到到镜像文件里面还没有修改。这样似乎可以判断 系统应该有block io cache.
文件系统被悄悄修改过后,执行这些命令
ls /security
看不到增加的文件
dd if=/dev/sda5 of=sda5_img
mount -o loop sda5_img /mnt
检查/mnt发现还没有被修改, 看不到增加的文件
umount /security
mount /dev/sda5 /security
这时候显示已经被修改了。
目前发现修改过后通过 dd命令获取分区内容,得到到镜像文件里面还没有修改。这样似乎可以判断 系统应该有block io cache.
文件系统被悄悄修改过后,执行这些命令
ls /security
看不到增加的文件
dd if=/dev/sda5 of=sda5_img
mount -o loop sda5_img /mnt
检查/mnt发现还没有被修改, 看不到增加的文件
umount /security
mount /dev/sda5 /security
这时候显示已经被修改了。
|
drop_caches
-----------
Writing to this will cause the kernel to drop clean caches, dentries and
inodes from memory, causing that memory to become free.
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches
As this is a non-destructive operation and dirty objects are not freeable, the
user should run `sync' first.
写的一方写完以后需要sync,
读的一方读之前用echo 3 > /proc/sys/vm/drop_caches清一下cache即可
-----------
Writing to this will cause the kernel to drop clean caches, dentries and
inodes from memory, causing that memory to become free.
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches
As this is a non-destructive operation and dirty objects are not freeable, the
user should run `sync' first.
写的一方写完以后需要sync,
读的一方读之前用echo 3 > /proc/sys/vm/drop_caches清一下cache即可
|
确实有问题,__invalidate_device能够实现你的需求吗?
那就每个block device导出一个属性来调用这个函数。
不过这种同步方法终归不能够实用,如果两边一起修改文件系统的话没有同步机制,
很容易损坏文件系统,最好一个可写mount,其他都只读mount,应该就没问题了。
那就每个block device导出一个属性来调用这个函数。
不过这种同步方法终归不能够实用,如果两边一起修改文件系统的话没有同步机制,
很容易损坏文件系统,最好一个可写mount,其他都只读mount,应该就没问题了。
|
可以参考drivers/block/floppy.c,
在相应的块设备驱动的block_device_operations结构中实现media_changed回调函数,永远返回1。
实现FDFLUSH ioctl,调用check_disk_change来回写。
loop driver没有实现这个功能,要改写驱动,比较麻烦了。
在相应的块设备驱动的block_device_operations结构中实现media_changed回调函数,永远返回1。
实现FDFLUSH ioctl,调用check_disk_change来回写。
loop driver没有实现这个功能,要改写驱动,比较麻烦了。
|
After you finish writing data, please execute sync command.
for example:
$sync
for example:
$sync
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。