linux磁盘命令-xfs_repair,fsck.ext4,mknod,xfs_admin,tune2fs

2018-05-28 19:32:47

磁盘校验修复,一般很少用到,只有在磁盘真的出现问题的时候才会用到。

xfs文件系统校验与修复,xfs_repair 可以检查/修复文件系统,不过,因为修复文件系统是个很庞大的任务!因此,修 复时该文件系统不能被挂载

[root@study ~]# xfs_repair [-fnd] 设备名称
选项与参数:
-f :后面的设备其实是个文件而不是实体设备
-n :单纯检查并不修改文件系统的任何数据 (检查而已)
-d :通常用在单人维护模式下面,针对根目录 (/) 进行检查与修复的动作!很危险!不要随便使用
[root@192 ~]# xfs_repair /dev/sdb1
Phase 1 - find and verify superblock...
Phase 2 - using internal log
        - zero log...
        - scan filesystem freespace and inode maps...
        - found root inode chunk
Phase 3 - for each AG...
        - scan and clear agi unlinked lists...
        - process known inodes and perform inode discovery...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - process newly discovered inodes...
Phase 4 - check for duplicate blocks...
        - setting up duplicate extent list...
        - check for inodes claiming duplicate blocks...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
Phase 5 - rebuild AG headers and trees...
        - reset superblock...
Phase 6 - check inode connectivity...
        - resetting contents of realtime bitmap and summary inodes
        - traversing filesystem ...
        - traversal finished ...
        - moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
done


校验修复ext4文件系统

[root@study ~]# fsck.ext4 [-pf] [-b superblock] 设备名称
选项与参数:
-p :当文件系统在修复时,若有需要回复 y 的动作时,自动回复 y 来继续进行修复动作。
-f :强制检查!一般来说,如果 fsck 没有发现任何 unclean 的旗标,不会主动进入
细部检查的,如果您想要强制 fsck 进入细部检查,就得加上 -f 旗标啰!
-D :针对文件系统下的目录进行最优化配置。
-b :后面接 superblock 的位置!一般来说这个选项用不到。但是如果你的 superblock 因故损毁时,
通过这个参数即可利用文件系统内备份的 superblock 来尝试救援。一般来说,superblock 备份在:
1K block 放在 8193, 2K block 放在 16384, 4K block 放在 32768
[root@192 ~]# mkfs.ext4 /dev/sdb1
[root@192 ~]# fsck.ext4 /dev/sdb1
e2fsck 1.42.9 (28-Dec-2013)
/dev/sdb1: clean, 11/262144 files, 53326/1048576 blocks


在 Linux 下面所有的设备都以文件来代表吧!但是那个文件如何代表该设备呢? 很简单!就是通过文件的 major 与 minor 数值来替代。

[root@192 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   20G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0   17G  0 part /
sdb      8:16   0   20G  0 disk 
├─sdb1   8:17   0    4G  0 part 
└─sdb2   8:18   0    4G  0 part 
sr0     11:0    1 1024M  0 rom

上面的第二列就是主次设备号。我们的 Linux 核心认识的设备数据就是通过这两个数值来决定的!举例来说,常见的磁盘文件名 /dev/sda 与 /dev/loop0 设备代码如下所示

 磁盘文件名major  minor
 /dev/sda 8 0-15
 /dev/sdb 8 16-31
 /dev/loop0 7 0
 /dev/loop1 7 1

基本上,Linux 核心 2.6 版以后,硬件文件名已经都可以被系统自动的实时产生了,我们根本 不需要手动创建设备文件。 不过某些情况下面我们可能还是得要手动处理设备文件的,例如 在某些服务被关到特定目录下时(chroot) , 就需要这样做了。此时这个 mknod 就得要知道 如何操作才行

创建设备文件mknod

[root@study ~]# mknod 设备文件名 [bcp] [Major] [Minor]
选项与参数:
设备种类:
b :设置设备名称成为一个周边储存设备文件,例如磁盘等;
c :设置设备名称成为一个周边输入设备文件,例如鼠标/键盘等;
p :设置设备名称成为一个 FIFO 文件;
Major :主要设备代码;
Minor :次要设备代码;
mknod /dev/sdc b 8 32    #创建磁盘设备文件
mknod /tmp/fifo_tmp p    #创建fifo文件
mkfifo /tmp/fifo_tmp


xfs_admin 处理xfs文件系统的uuid和label名

[root@study ~]# xfs_admin [-lu] [-L label] [-U uuid] 设备文件名
选项与参数:
-l :列出这个设备的 label name
-u :列出这个设备的 UUID
-L :设置这个设备的 Label name
-U :设置这个设备的 UUID 喔!
#设置label名
xfs_admin -L freecls /dev/sdb1

uuidgen
#4e0e2598-fa0c-4baf-b0d8-703d75fd394c

#设置uuid
xfs_admin -U 4e0e2598-fa0c-4baf-b0d8-703d75fd394c /dev/sdb1

既然 mount 后面使用设备文件名 (/dev/sdb1) 也可以挂载成功,那你为什么要用很讨厌的很长一串的 UUID 来作为你的挂载时写入的设备名称啊?原因是这样的:因为你没有办法指定这个磁盘在所有的 Linux 系统中,文件名一定都会是 /dev/sdb1,因为磁盘的起名是根据设备被系统检测到的顺序的,而且U盘在插入每个不同的系统,起的名字都会不一样。

tune2fs处理ext4的label name和uuid

[root@study ~]# tune2fs [-l] [-L Label] [-U uuid] 设备文件名
选项与参数:
-l :类似 dumpe2fs -h 的功能~将 superblock 内的数据读出来~
-L :修改 LABEL name
-U :修改 UUID 啰!


备注:
1.本系列命令都在centos7里测试,其他发行版如ubuntu、debian、fedora、opensuse等可能略微不同
2.觉得本文有帮助的小伙伴可以关注笔者
3.原文地址http://www.freecls.com/a/2712/3d    

©著作权归作者所有
收藏
推荐阅读
简介
天降大任于斯人也,必先苦其心志。