电脑突然断电,重新开机后发现有的程序无法正常启动,原因是配置文件损坏了。感觉奇怪,为什么在硬盘里的文件会内容丢失?

1.可能:写数据的过程被中断,只完成了一部分。可能会出现乱码(因为只写了几个字节,不完整)、文件错误等。

2.更大的可能:操作系统写文件操作有个缓存,并不会直接写入硬盘。

内存可能有个缓存,磁盘也可能有个缓存,在数据会先保存在缓存中一段时间,累积到一定大小或者时间限度再一起写入磁盘中。

如果在这段时间内断电,那么缓存中的文件就丢失了,极端情况是写入了一部分数据,导致文件损坏。(可以通过“sync”命令强制同步,写入磁盘。)

应对这种情况,文件系统一般有几种处理方式:

a)不管错误,没有任何形式的日志记录。如果怀疑有错,通过磁盘检测功能恢复。

这样一旦断电,很有可能出现文件丢失或者数据不全(文件错误)的情况;但是这种情况下的写性能是最好的。

b)只提供元数据日志,而没有完整数据日志。在设计上保证文件系统结构上可恢复,但不保证用户数据可恢复。

保证了不会出现文件损坏的问题,但是不保证数据内容的正确和完整。

c)提供完整数据和元数据日志记录。能在用户数据层面上保证数据的绝对正确。

也就是数据要么是写之前的,要么是写之后的数据,而不会出现混乱的情况。

新建一个文件的步骤是:

1.inode bitmap 找到没有使用的inode 号码,写入文件属性;

2.根据block bitmap 找到没有使用中的block 号码,并将实际的资料写入block 中,且更新inode 的block 指向数据块;

3.将刚刚写入的inode 与block 资料同步更新inode bitmap 与block bitmap,并更新superblock 的内容。

日志型档案系统会在日志中记录进行到了哪一步,万一资料的纪录过程当中发生了问题,只要去检查日志记录区块, 就可以知道哪个档案发生了问题。同时可以保证整个操作要么完成,要么退回到开始操作之前。

过程示例如:http://www.cnblogs.com/youngerchina/archive/2012/01/15/5624631.html。

文件系统

引用至https://blog.csdn.net/u014743697/article/details/54089297

通过将硬盘划分为分区,数据会被分隔以及重组。当事故发生的时候,只有存储在被损坏分区上的数据会被破坏,很大可能上其它分区的数据能得以保留。这个原因可以追溯到 Linux 操作系统还没有日志文件系统、任何电力故障都有可能导致灾难发生的时候。
使用分区也考虑到了安全和健壮性原因,因此操作系统部分损坏并不意味着整个计算机就有风险或者会受到破坏。这也是当前采用分区的一个最重要因素。举个例子,用户创建了一些会填满磁盘的脚本、程序或者 web 应用,如果该磁盘只有一个大的分区,如果磁盘满了那么整个系统就不能工作。如果用户把数据保存在不同的分区,那么就只有那个分区会受到影响,而系统分区或者其它数据分区仍能正常运行。
但是,拥有一个日志文件系统只能在掉电或者和存储设备意外断开连接时提供数据安全性,并不能在文件系统出现坏块或者发生逻辑错误时保护数据。对于这种情况,用户可以采用廉价磁盘冗余阵列的方案。
为什么要切换文件系统?
ext4 文件系统由 ext3 文件系统改进而来,而后者又是从 ext2 文件系统改进而来。虽然 ext4 文件系统已经非常稳定,是过去几年中绝大部分发行版的默认选择,但它是基于陈旧的代码开发而来。另外, Linux 操作系统用户也需要很多 ext4 文件系统本身不提供的新功能。虽然通过某些软件能满足这种需求,但性能会受到影响,在文件系统层次做到这些能获得更好的性能。

文件系统主要用于控制所有程序在不使用数据时如何存储数据、如何访问数据以及有什么其它信息(元数据)和数据本身相关等。

从centos7开始,默认的文件系统从ext4变成了xfs。xfs支持的文件数量和文件大小高于ext4。

centos查看文件系统类型:

df -T  命令可以查看目录的文件系统类型。

参考:

http://blog.csdn.net/a421701136/article/details/51802070

https://www.zhihu.com/question/55711728

挂载点,分区和系统目录参考:

http://www.cnblogs.com/apprentice89/archive/2012/12/17/2821332.html

http://blog.csdn.net/imfinger/article/details/6071259/

最新文章

  1. rnandroid环境搭建
  2. SQL Server 修改表结构后无法保存的老问题
  3. vim 加行号 和取消行号
  4. intellij IDEA 出现“Usage of API documented as @since 1.6+”的解决办法
  5. ubuntu10.04.4下安装JDK
  6. oracle 执行 delete user$ 误删所有用户信息后的数据恢复流程
  7. python suds 一坑
  8. Java里正则表达式
  9. 请用fontAwesome代替网页icon小图标
  10. InstallShield limited edition 生成单个 setup.exe 安装文件
  11. 【深夜急报,Win10下的Linux子系统之Bash】
  12. 关于Stack Overflow上ASP.NET最大连接数限制提问的一个思考
  13. html to pdf
  14. touchmove Bug 工作遇到
  15. (转载)C# 枚举 FlagsAttribute用法
  16. H5网页后在返回到微信公众平台自定义菜单
  17. sharding:谁都能读懂的分库、分表、分区
  18. mac系统默认python3.6
  19. Fortran的数组与指针
  20. Spring Boot从Controller层进行单元测试

热门文章

  1. tortoiseSVN如何发现和解决冲突?
  2. MariaDB登陆
  3. OA之框架的搭建
  4. Redis讲解
  5. 【Loadrunner】LR破解版录制手机脚本
  6. python 面向对象 __dict__
  7. xmr monero miner
  8. python学习笔记(二十八)日志模块
  9. Django model中数据批量导入bulk_create()
  10. Nginx 403 forbidden原因及故障模拟重现(转载)