8.8 fsck:检查并修复Linux文件系统

  fsck命令用于检查并修复文件系统中的错误,即针对有问题的系统或磁盘进行修复,类似的命令还有e2fsck命令。有关fsck的使用需要特别注意的是:

    1)文件系统必须是卸载状态,否则可能会出现故障。
    2)不要对正常的分区使用fsck,在不加参数的情况下,fsck会根据/etc/fstab进行文件系统检查,这相当于fsck -As参数的功能。
 
1)在fsck命令及后面的选项和文件系统里,每个元素之间都至少要有一个空格。
2)filesys可以是一个设备名(例如:/dev/sdal、/dev/sdb2)、一个挂载点(例如:/、/usr、/home)或一个文件系统的磁盘标签,也可以是UUID指定符(例如:UUID=8868abf6-88c5-4a83-98b8-bfc24057f7bd或LABEL=root)。

fsck 命令的参数选项及说明

-a    自动修复文件系统,不询问任何问题
-s    按顺序检查多个文件系统
-t    指定要检查的分区的文件系统类型
-A    依服/etc/fstab配置文件的内容,检查文件内所列的全部文件系统
-N    不执行指令,仅列出实际执行会进行的动作 
 
    必须卸载文件系统后才能对其进行检查,否则可能会出现错误。平时没有必要使用这个命令检查磁盘,只有当系统开机显示磁盘错误时,才需要执行。 
    系统开机通过fsck自检。 
 
Linux在开机过程中系统会自动调用fsck命令对需要自检的磁盘进行自检(如图8-3所示)。
 
 
    系统开机之所以会通过fsck自检,就是因为系统开机过程中会优先读取/etc/fstab文件,当最后一列设置为1或2时,这个磁盘在开机时就会调用fsck进行自检,fstab的文件(man fstab看帮助)信息如下:
[root@cs6 ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun May 5 23:10:33 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_cs6-lv_root / ext4 defaults 1 1
UUID=b7b58ad5-f612-4132-9e1f-5d55af6a9a58 /boot ext4 defaults 1 2
/dev/mapper/vg_cs6-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/sdb1 /mnt ext4 defaults 0 0 
 
    提示:管理员增加硬盘规划分区,一般最后一列都设置为0,即开机过程中不对磁盘检查,如果真有问题,可以在启动系统后人为进行检查。
  
Linux 断电后重启故障修复案例。 
    当Linux系统遭遇突然断电等非正常关机操作时,很容易导致文件系统数据损坏,造成系统不能重新启动,此时,屏幕出现的提示可能是如下内容:
 
    此时根据系统提示输入root用户的密码,注意而不是直接按Control-D继续,会再重启。
当输入正确的密码之后,正常会出现下面的提示:
    (Repair filesystem)1 
此时就可以输入fsck或者fsck -A对磁盘进行修复检查,执行后可能出现一堆询问,按yes即可。 
(Repair filesystem) 1   # fsck -A #<==可能会等种一段时间或 fsck
(Repair filesystem) 2   # <=修复完毕会返回到这个提示符,此时就可以试着重启系统,看故障是否修复了。 
 
1)除了按照开机的提示进行修复外,也可以利用系统盘进入教援模式或单用户模式对系统故障进行修复。
2)千万不要在开机正常工作的情况下执行fsck来检查磁盘,因为这样有可能会导致正常的磁盘发生故障。
3)/etc/fstab中的最后一列数字为1或2时,当系统开机时就会读取fsck对这些系统磁盘进行自检。
4)不要在已经挂载的文件系统上执行fsck等磁盘修复命令,因为这样可能会导致故障。 

8.9 dd:转换或复制文件

    dd命令具有复制文件、转换文件和格式化文本的功能。 

dd命令的参数选项及说明

if=<输入文件>    从指定文件中读取,全称为input file
of=<输出文件> 写入到指定文件,全称为output file
bs=<字节数> 一次读写的字节数,全称为block size
count=<块数> 指定复制block块的个数
ibs=<字节数> 一次读的字节,默认是512
obs=<字节数> 一次写的字节,默认是512
conv=<格式> 格式转换
ucase把字母由小写转换为大写
lcase把字母由大写转换为小写

将/dev/sda1分区复制(备份)到文件中

[root@cs6 ~]# dd if=/dev/sdb1 of=dev_sdb1.img  #<==使用if从/dev/sdb1中读取数据,使用of指定输出到当前日录的dev_sdb1.img。
835317+0 records in
835317+0 records out
427682304 bytes (428 MB) copied, 13.3079 s, 32.1 MB/s [root@cs6 ~]# ll -h dev_sdb1.img
-rw-r--r--. 1 root root 408M May 11 15:20 dev_sdb1.img

删除/dev/sdb1分区数据

下面的实验很危险,请使用虚拟机操作,并提前做好快照。
从/dev/zero设备读取数据,写入或覆盖/dev/sdb1的数据:
[root@cs6 ~]# dd if=/dev/zero of=/dev/sdb1         #<==/dev/zero是一个特殊的设备,相当于什么都没有。
dd: writing to `/dev/sdb1': No space left on device #<==提示写满了。
835318+0 records in
835317+0 records out
427682304 bytes (428 MB) copied, 1.77188 s, 241 MB/s #/dev/zero是0字符设备,可产生连续不断的特殊数据流,生成的文件为特殊格式的数据文件(二进制)。 [root@cs6 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_cs6-lv_root
26G 1.3G 24G 5% /
tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 477M 28M 424M 7% /boot
/dev/sdb1 16Z 16Z 389M 100% /mnt/data1
[root@cs6 ~]# ls /mnt/data1 可以看到,上面的/mnt/data1分区被清空了,此时系统已经遭到破坏。这种情况千万不要重启系统,/mnt/data1分区受损是无法启动系统的,应该继续下面的恢复操作。
用范例8-19的备份恢复范例8-20删除的分区数据。
[root@cs6 ~]# dd if=dev_sdb1.img of=/dev/sdb1
835317+0 records in
835317+0 records out
427682304 bytes (428 MB) copied, 1.6525 s, 259 MB/s
[root@cs6 ~]# ls /mnt/data1
1.html 2.html 3.html 4.html 5.html lost+found
    要特别注意if、of参数,如果位置写反了,就会出大问题。
 

生成任意大小的测试文件

[root@cs6 ~]# dd if=/dev/zero of=test.data bs=1M count=2    #<= 从/dev/zero读取数据写入到test,dita,生成文件test,data的大小为bs*count=1M*2=2M;
2+0 records in
2+0 records out
2097152 bytes (2.1 MB) copied, 0.11628 s, 18.0 MB/s
[root@cs6 ~]# ll -h test.data
-rw-r--r--. 1 root root 2.0M May 11 15:27 test.data

制作Linux系统的ISO镜像

    在Windows系统里制作光盘的ISO镜像,还需要安装其他软件。但在Linux系统中只需要dd命令就足够了。
    在做实验时,如果需要将CentOS的完整系统镜像上传到Linux系统中,一般使用winSCP或Xshell等工具,但这是通过网络传输的方式,上传速度受限于网络带宽。此时可以使用dd命令,将从光驱读取的镜像复制到系统中,相当于光驱与磁盘对拷。
 
将光盘放入光驱之后,需要确保光驱可以正常读取,然后执行如下命令即可实现将光盘复制到Linux硬盘的操作:
[root@cs6 ~]# ls /dev/cdrom
/dev/cdrom
[root@cs6 ~]# dd if=/dev/cdrom of=centos6_10.iso
831488+0 records in
831488+0 records out
425721856 bytes (426 MB) copied, 49.5612 s, 8.6 MB/s
#<==传输速度取决于光驱与磁盘之间的读写速度,可以看到这种方式的传输速度远远大于网络传输速度。
[root@cs6 ~]# ll -h centos6_10.iso
-rw-r--r--. 1 root root 406M May 11 15:32 centos6_10.iso

使用dd复制文件并进行格式转换的例子。

[root@cs6 ~]# cat test.txt
I love linux www.wenyule.top
[root@cs6 ~]# dd if=test.txt conv=ucase of=test.test_u
0+1 records in
0+1 records out
29 bytes (29 B) copied, 0.00036375 s, 79.7 kB/s
[root@cs6 ~]# cat test.test_u
I LOVE LINUX WWW.WENYULE.TOP

8.8-9 fsck、dd的更多相关文章

  1. Linux文件系统管理 常见命令df、du、fsck、dumpe2fs

    概述 Linux文件系统管理 常见命令df.du.fsck.dumpe2fs. 文件系统查看命令:df 通过 df 命令可以査看已经挂载的文件系统的信息包括设备文件名.文件系统总大小.已经使用的大小. ...

  2. 【Linux命令】文件目录管理命令7个(touch、mkdir、cp、mv、rm、dd、file)

    目录 touch创建空白文档或设置文件时间 mkdir创建空白目录 cp复制文件或目录 mv剪切文件或重命名文件 rm删除文件或目录 dd按照指定大小和个数的数据库来复制文件或转换文件 file查看文 ...

  3. dump、cpio、tar、dd四种备份工具比较

    原文  http://blog.csdn.net/ether_lai/article/details/12656219 dump dump可执行文件系统增量备份的存储操作 ,dump 可将目录或整个文 ...

  4. 文件系统常用命令df、du、fsck、dumpe2fs

    df 查看文件系统 [root@localhost ~]# df 文件系统 1K-块 已用 可用 已用% 挂载点 /dev/sda5 16558080 1337676 15220404 9% / de ...

  5. Linux数据备份与恢复 dump、restore、dd命令

    dump命令:备份分区.文件或目录 在Linux系统中 dump 命令是没有安装的,所以先安装一下 dump 命令,安装命令如下: [root@localhost -]# yum -y install ...

  6. chpasswd、dd命令、find实战、添加系统服务、buffer、cached

    1.如果两个文件的每一行想一一对应 paste 1.txt 2.txt # 文件3.txt中存放着用户跟密码,想要添加用户并设置密码: # 用户必须存在,文件格式必须是--用户名:密码 chpassw ...

  7. 项目列表dl、dt、dd使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Linux学习--第九天--du、df、fsck、dumpe2fs、mount、NTFS-3G、fdisk、partprobe、/etc/fstab、free、mkswap、swapon

    分区类型 主分区:最多只能分四个 扩展分区:只能有一个,如果有了扩展分区,主分区只能有三个.扩展分区不能格式化和存储数据,再划分为逻辑分区才能进行相应操作. 逻辑分区:IDE硬盘,linux最多支持5 ...

  9. Linux学习--第十天--bash脚本、用户自定义变量、环境变量、位置参数变量、预定义变量、标准输入输出、wc、history、dd、PS1

    shell简介 分为两种c shell 和b shell b shell:sh.ksh.Bash.psh.zsh: (Bash和sh兼容,linux基本shell是Bash) c shell:csh. ...

随机推荐

  1. css详解background八大属性及其含义

    background(背景) 以前笔者在css盒模型以及如何计算盒子的宽度一文中提到过盒模型可以看成由 元素外边距(margin).元素边框(border).元素内边距(padding)和元素内容(c ...

  2. 消息中间件rabbitMQ

    1 为什么使用消息队列啊? 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这 ...

  3. 在Visual Studio 中使用git——给Visual Studio安装 git插件(二)

    在Visual Studio 中使用git--什么是Git(一) 第二部分: 给Visual Studio安装 git插件 如果要使用 git 进行版本管理,其实使用 git 命令行工具就完全足够了, ...

  4. @valid和自定义异常

    @valid和自定义异常 问题的产生: 当有很多参数需要校验时,比如name,age,email等很多参数都需要判空,或者有长度限制时,如果后端写很多if-else就有很多代码,不美观,不优雅.前端每 ...

  5. 计算机系统原理:cache容量计算

    Cache容量计算例题: 假定主存地址位数为32位,按字节编址,主存和cache之间采用4-路组相联映射方式,主存块大小为4个字,每字32位,采用直写(Write Throght)方式和LRU替换策略 ...

  6. SLAM导航及控制部分,源码公布

    欢迎Fork,觉得不错就点个小星星吧 ROS源码 https://github.com/ShieldQiQi/TX2_StereoSLAM STM32驱动板源码 https://github.com/ ...

  7. ESXI的使用

    一台物理裸机服务器装上了ESXI就有了灵魂 vmware esxi的安装 多网段站群服务器 参考教程 安装ESXi VMware ESXI 6.5安装教程 物理机下安装 VMware ESXi 6.7 ...

  8. 初中级php程序员面试时常见问题整理

    初中级php程序员面试问题收集 感悟 有时候草率给出一个答案,比思而无果更糟糕 php基础 php的数据类型 php数据类型的转换 php魔术方法 php 的trait的概念及特点 php 虚拟类和接 ...

  9. Python实现简单HTTP服务器

    Python实现简单HTTP服务器(一) 一.返回固定内容 复制代码 coding:utf-8 import socket from multiprocessing import Process de ...

  10. Android Hook框架adbi的分析(2)--- inline Hook的实现

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/74452308 一. Android Hook框架adbi源码中inline Hoo ...