首页 >>  正文

格式化输入输出

来源:baiyundou.net   日期:2024-08-28

作者:小迪课代表


起因

最近 Unraid 有一块缓存盘出现故障无法挂载,下意识以为是硬盘坏了。很多数据都要丢了,很难受。

但仔细一想,这企业盘也不至于坏这么快吧。于是查看系统日志,发现貌似是因为 XFS 文件系统的日志错误造成的,系统尝试修复,但没有成功。那就好了嘛,反正无路可走了,那就手动再修复一下试试。

xfs_repair 命令

XFS 文件系统有一个修复命令 xfs_repair,该命令后面跟上磁盘所在的位置即可修复。正常修复不成功时,要加一些参数再次尝试。

-n 参数类似 —dry-run,模拟运行,并不会真正修复,通过模拟可以看出来哪些节点出了问题。

-n 加 -v 也就是 -nv 参数同样是模拟运行但会给出修复的步骤及每个步骤需要的时间等详细信息。

-v 参数进行修复并显示详细信息

若修复出现日志类错误,使用 -L 参数通过强制将日志清零来修复。

修复

在正常的 Linux 系统上修复时需要先卸载硬盘,也就是要停止阵列。在命令行输入 xfs_repair 命令加上相关参数,再加上硬盘路径来使用,如:xfs_repair -n /dev/WDC_WD120EDAZ_xxxxxxxxxxx

Unraid 系统提供了一个简单的界面(姑且算是吧)来实现这个命令的操作。

首先需要停止阵列来卸载硬盘,然后勾选启动阵列按钮下面的维护模式,再次启动阵列。此时处于维护模式中,硬盘并未被挂载(mnt 路径下为空),但可对硬盘进行操作。

点击需要修复的硬盘名称前面的磁盘号(形如 Disk1、Disk2、Cache),往下第二栏看到检查文件系统状态(Check Filesystem Status),点击检查(Check)按钮这个动作即对应于在命令行输入 xfs_repair 指令并回车,按钮后面的输入框可以输入对应参数。执行信息会输出在按钮的上方。

修复完成后,再次使用 -n 参数检查是否正常。之后停止阵列(退出维护模式),再次启动阵列(维护模式会自动取消勾选),此时该盘已经正常挂载。

常用操作顺序:xfs_repair -n -> xfs_repair -nv -> xfs_repair -v -> xfs_repair -L -> xfs_repair -n

文件识别

修复过程中节点不匹配的文件会存放到 lost+found 共享文件夹内(若没有会自动创建),文件以节点值命名且没有后缀名,默认只能依靠文件大小来识别。

在文件浏览器(如 FileBrowser、Kodbox)内查看这些文件,可以通过文件图标类型来分辨出常见的通用文件类型,如视频(mkv、mp4)、图片(jpg、png)、音频(mp3、flac)、文本格式(txt)等。一般此类文件不会过多,此法可加快文件识别速度,然后决定文件去留。

总结

  • xfs_repair 并不是能修复所有错误,本文修复的前提仅是文件系统日志错误这一情况。

  • 文件系统日志错误一般是由于上次关机不正常或程序异常导致的。

  • 使用 -L 参数修复有风险(虽然风险很小),所以更安全的做法是在修复前先使用 dd 命令将磁盘克隆到另一块空盘。

参考

https://wiki.unraid.net/Check_Disk_Filesystems#xfs_repair

查看文章精彩评论,请前往什么值得买进行阅读互动

","gnid":"97cdc6ed25f66460e","img_data":[{"flag":2,"img":[{"desc":"","height":"212","title":"","url":"https://p0.ssl.img.360kuai.com/t0164cdb185b7565f34.jpg","width":"600"},{"desc":"","height":"509","title":"","url":"https://p0.ssl.img.360kuai.com/t013391463f697156c3.jpg","width":"486"},{"desc":"","height":"305","title":"","url":"https://p0.ssl.img.360kuai.com/t01b73f43c5d20a7322.jpg","width":"600"}]}],"original":0,"pat":"art_src_1,fts0,sts0","powerby":"hbase","pub_time":1684422556000,"pure":"","rawurl":"http://zm.news.so.com/0edb3f67cf3763b19a400cb6b2c85672","redirect":0,"rptid":"88e10fb4f2916acb","rss_ext":[],"s":"t","src":"什么值得买","tag":[{"clk":"kdigital_1:硬盘","k":"硬盘","u":""}],"title":"硬盘疑似损坏?先别急着格式化!

厉匡蚂4925输入输出格式控制是在哪个头文件中定义的 -
贲荷匡19442161753 ______ 1、在c++中,cstdio和stdio.h这两个标准输入输出头文件里面都有printf函数.2、printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息.printf()函数的调用格式为: printf("", ).3、格式输出,它是c语言中产生格式化输出的函数(在 stdio.h 中定义).用于向终端(显示器、控制台等)输出字符.格式控制由要输出的文字和数据格式说明组成.要输出的的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义.

厉匡蚂4925C语言关于浮点类型的格式化输入输出,该如何使用修饰符? -
贲荷匡19442161753 ______ 1. 没有long double这种表达.也不存在%llf这种表达格式;2. scanf的时候不止double需要 %lf,float也需要%lf才能正常输入;3. double的输出最好用%lf,精度更高.

厉匡蚂4925如何在输入输出域输出文字 -
贲荷匡19442161753 ______ C语言中主要通过两个库函数,scanf,printf实现文字的输入输出. 一:格式输出函数printf() 1、调用形式一般为:printf("格式化控制字符串",输出表列); 2、格式化控制字符串用于指定输出格式,它有三种形式: 1、格式说明符:规定了...

厉匡蚂4925java格式化输入 -
贲荷匡19442161753 ______ 输出有System.out.printf("%d",1); 输入好象没有 不过java完全可以通过其它方法实现同样的功能

厉匡蚂4925在c++中,什么时候需要加头文件iomanip,什么时候需要格式化输入输出 -
贲荷匡19442161753 ______ I/O控制的时候用iomanip 功能: dec 置基数为10 相当于"%d" hex 置基数为16 相当于"%X" oct 置基数为8 相当于"%o" setfill(c) 设填充字符为c setprecision(n) 设显示小数精度为n位 setw(n) 设域宽为n个字符 setiosflags(ios::fixed) ...

厉匡蚂4925格式化输入,输出函数中,格式字符中的格式说明的标志 -
贲荷匡19442161753 ______ 以 %开头为标志,后面跟特定字符,说明特定含义.

厉匡蚂4925python格式化输出,为什么要用 -
贲荷匡19442161753 ______ python一共有两种格式化输出语法, 一种是类似于C语言printf的方式,称为 Formatting Expression >>> '%s %d-%d' % ('hello', 7, 1) 'hello 7-1' 另一种是类似于C#的方式,称为String Formatting Method Calls >>> '{0} {1}:{2}'.format('hello', '1', '7') 'hello 1:7' 第一种方式可以指定浮点数的精度,例如 >>> '%.3f' % 1.234567869 '1.235'

厉匡蚂4925怎么算“输出格式化函数”? -
贲荷匡19442161753 ______ 输出格式化函数是指可以按照指定格式输出到指定地方的函数,在c语言中,最典型的就是 printf(...) 函数;例如:int d = 14; printf("d = %d", d); 另外 scanf() 是输入格式化函数.

厉匡蚂4925matlab格式化输出什么意思 -
贲荷匡19442161753 ______ 就是按一定格式输出,比如fprintf函数的使用方法是 fprintf("这是一个整数%d",30) 就会输出“这是一个整数30 ” 建议找本书看看吧 或者matlab的帮助也可以

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024