当前位置:  技术问答>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
 这时候显示已经被修改了。
  

|
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即可

|
确实有问题,__invalidate_device能够实现你的需求吗?

那就每个block device导出一个属性来调用这个函数。

不过这种同步方法终归不能够实用,如果两边一起修改文件系统的话没有同步机制,

很容易损坏文件系统,最好一个可写mount,其他都只读mount,应该就没问题了。

|
可以参考drivers/block/floppy.c,

在相应的块设备驱动的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

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ I/O 成员 clear():清除状态标志
  • php压缩html(清除换行符,清除制表符,去掉注释标记)
  • C++ I/O 成员 unsetf():清除格式标志
  • android开发教程之清除android数据缓存示例(清除本地数据缓存)
  • 不同版本MSSQL清除日志方法介绍
  • 如何清除Linux命令的历史记录(清除不该保留的命令)
  • linux僵尸(zombie)进程介绍及清除
  • 文件清除工具 Eraser
  • Linux/Centos/Ubuntu清除系统缓存释放内存命令介绍
  • 如何清除history和last命令中显示的东东?
  • wtmp清除工具 wtmpclean
  • 如何用按钮触发事件以清除session中的变量?
  • 我的IE输入form中保存了我以前输入的历史记录,我怎么清除?
  • 简单问题,怎么清除命令提示
  • Ubuntu回收站自动清除工具 Autotrash
  • 如何清除刚刚被绑定的端口???
  • rootkit清除工具 GMER
  • 请教各位:javabean被使用后需要清除吗?
  • 清除CMOS密码
  • 清除ComBox中所有项的方法是CleanItem还是别的什么?
  • 如何手动清除一个对象


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3