write操作底层调用

open标志位

O_DIRECT绕过page_cache

O_APPEND目前nfs4不支持原子追加写入,本地文件系统通过inode锁可以实现原子写入。

java的write只是系统调用成功,写入page_cache,不代表写入到硬件存储上。

操作系统提供fsync,fdatasyn两个方法,满足用户同步数据到持久化设备,fdatasync尽可能不同步文件元数据以减少磁盘IO来提高性能。

RandomAccessFile打开文件的4中模式中rws会在open文件时传入O_SYNC标志位,rwd传入O_DSYNC已区分调用fsync还是fdatasync。

FileDescription类的sync方法在UNIX系统上底层调用是fsync,保证数据保存到持久化存储设备后返回。但是如果系统使用了硬盘本身的缓存,一般系统定时调用硬盘flush接口,即时fsync调用成功突然断电也有可能丢失数据。

对于写操作,有write back和write through两种机制,前者将数据写至缓存就会返回,而后者则会将数据写到磁盘介质上再返回。

如果想要保证调用fsync或fdatasync后数据一定能写到磁盘上,可以开启linux的write barrier,它可以控制在IO操作之前和之后刷新缓存来达到一定能写入磁盘的目的。Ext4 文件系统默认启用 barrier机制,只有当 barrier 之前的数据全部写入磁盘,才能写 barrier 之后的数据。类似java的happen-before原则

重要数据机房使用UPS断电保护很重要。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值