linux突然断电重启,配置文件丢失/程序无法打开/文件损坏
电脑突然断电,重新开机后发现有的程序无法正常启动,原因是配置文件损坏了。感觉奇怪,为什么在硬盘里的文件会内容丢失?
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/
linux突然断电重启,配置文件丢失/程序无法打开/文件损坏的更多相关文章
- Linux下通过.desktop 文件创建桌面程序图标及文件编写方式(Desktop Entry文件概述)
Linux下通过.desktop 文件创建桌面程序图标及文件编写方式 1.Desktop Entry文件概述:在 Windows 平台上,用户可以通过点击位于桌面或菜单上的快捷方式轻松打开目标应用程序 ...
- [转]ubuntu linux下DNS重启后丢失
从网上得知 /etc/resolv.conf中的DNS配置是从/etc/resolvconf/resolv.conf.d/head中加载而来,所以每回改resolv.conf都会失效,在此文件里面已经 ...
- [转]ubuntu linux下DNS重启后丢失(不是Network-manager造成的情况)
从网上得知 /etc/resolv.conf中的DNS配置是从/etc/resolvconf/resolv.conf.d/head中加载而来,所以每回改resolv.conf都会失效,在此文件里面已经 ...
- qt程序实现打开文件夹
QString path=QDir::currentPath();//获取程序当前目录 path.replace("/","\\");//将地址中的" ...
- xdg-open filename 以相应的程序 打开文件
[root@ok network-scripts]# xdg-open ifcfg-eth0
- Linux突然断电后文件丢失的问题
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://yuyongid.blog.51cto.com/10626891/168504 ...
- STM32 HAL库关于串口中断烧录程序后可以正常运行,断电重启后无法进入中断的问题分析以及解决方法
1.情景描述: 最近在做一个项目,X86的上位机通过串口控制MCU,使用串口中断接收上位机数据时,MCU在上电的情况下烧录程序,可以正常接收上位机的数据,在断电重启后,一直进入不了中断回调函数,上电的 ...
- Ubuntu上安装和使用SSH,Xming+PuTTY在Windows下远程Linux主机使用图形界面的程序
自:http://blog.csdn.net/neofung/article/details/6574002 Ubuntu上安装和使用SSH 网上有很多介绍在Ubuntu下开启SSH服务的文章,但大 ...
- Linux就这个范儿 第16章 谁都可以从头再来--从头开始编译一套Linux系统 nsswitch.conf配置文件
Linux就这个范儿 第16章 谁都可以从头再来--从头开始编译一套Linux系统 nsswitch.conf配置文件 朋友们,今天我对你们说,在此时此刻,我们虽然遭受种种困难和挫折,我仍然有一个梦 ...
随机推荐
- mysql如何查询日期的列表?
转自:http://blog.csdn.net/liufei198613/article/details/72643345 select @num:=@num+1,date_format(adddat ...
- R的grep和grepl
grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE, fixed = FALSE, useBytes = FALSE, ...
- 从零打造在线网盘系统之SSH框架整合
欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...
- jquery点击事件失效原因和解决办法
在使用jQuery绑定点击事件的时候,有时候会遇到点击无效,这种情况大多出现在动态添加元素的时候 例如:给demo里添加li元素给li绑定点击事件 $("#demo").appen ...
- vue.js实现初了解(一)
1. vue 2.0是用Flow做静态类型检查, 3.0对TypeScript的支持更好了: 2. vue.js是基于Rollup(更轻量,适合js库的构建)构建的,它的构建相关配置都在scripts ...
- 新增form表单,post提交.2
- ubuntu16.04下安装opencv3的viz模块
OPENCV3.0默认是不安装VIZ模块的,那么如何安装呢? 如果已经安装了Opencv,现在要增加VIZ模块,应该再安装一次就可以吧,我没试过,我是卸载了原来的,重新安装的 简单来说,就是要多安装一 ...
- Oracle管理监控之Oracle数据库存储空间监控
1.监控表空间使用率 基表:dba_data_files.dba_free_space 脚本: select a.tablespace_name, round((a.maxbytes / 1024 / ...
- Scala数组和集合
一.scala数组 数组定义1: var arr = new Array[String](3) String:存储的元素类型 3:存储3个元素 添加元素: arr(1) = "hello&q ...
- 【Loadrunner】性能测试报告实战
一.一份好的性能测试报告需要遵循什么规则? 好的报告只需要遵循3点即可:清晰的结构.简要的语言以及数据的对比. 二.如何用Loadrunner自动到处HTML以及word版的报告? 1.导出html格 ...