目录
磁盘管理
一、存储介绍
二、存储概览
三、磁盘分区
四、交换分区
五、开机挂载
六、磁盘矩阵RAID
七、文件链接
八、LVM逻辑卷
九、文件系统
磁盘管理
一、存储介绍
1.
①NAS(Network Attached Storage) (阅读了解)
网络附加存储——是一个网络上的文件系统
NFS
②SAN(Storage Area Network)
存储区域网络——是一个网络上的磁盘
③DAS(Direct-attached Storage)
直连存储
④分布式存储 hdfs 、ceph 、GFS、Switf....
⑤云存储
2.
①、理解生产环境存储扩容讲解
根据各种存储方案的不同讲解不同的存储扩容方式
②、生产环境数据备份的意义
(1)自然灾害,如水灾、火灾、雷击、地震等不可抗力造成计算 机系统和存储数据的破坏或丢失;
(2)计算机设备故障,其中包括存储介质的老化、失效;
(3)系统管理员及维护人员的误操作;
(4)病毒感染造成的数据破坏和网络上的“黑客”攻击;
二、存储概览
机械硬盘HDD:又称之为磁盘
盘片:磁盘上面有一摞盘片
磁道:盘片上一圈一圈的是磁道
扇区:磁道被划分之后是扇区,以前默认是512B(字节),现在基本上是4k
柱面:半径相同的盘片组成一个柱子一样的体,叫做柱面。
硬盘的转速:1400r/min 7200r/min 10000r/min 15000r/min
固态硬盘SSD:没有盘片,里面都是芯片和电子,目前的在dell r730的服务器上有应用
SSD的优势:
SSD是摒弃传统磁介质,采用电子存储介质进行数据存储和读取的一种技术,突破了传统机械硬盘的性能瓶颈,拥有极高的存储性能,被认为是存储技术发展的未来新星。固态硬盘的全集成电路化、无任何机械运动部件的革命性设计,从根本上解决了在移动办公环境下,对于数据读 写稳定性的需求。全集成电路化设计可以让固态硬盘做成任何形状。
第一,SSD不需要机械结构,完全的半导体化,不存在数据查找时间、延迟时间和磁盘寻道时间,数据存取速度快。
第二,SSD全部采用闪存芯片,经久耐用,防震抗摔,即使发生与硬物碰撞,数据丢失的可能性也能够降到最小。
第三,得益于无机械部件及FLASH闪存芯片,SSD没有任何噪音,功耗低。
第四,质量轻,比常规1.8英寸硬盘重量轻20-30克,使得便携设备搭载多块SSD成为可能。同时因其完全半导体化, 无结构限制,可根据实际情况设计成各种不同接口、形状的特殊电子硬盘。
2.从插拔方式
热插拔
非热插拔
3.硬盘设备命名
物理硬盘: /dev/sd[a-z]
KVM虚拟化: /dev/vd[a-z] (半虚拟化驱动)
/dev/sd[a-z] (全虚拟化驱动)
4.从存储连接方式
本地存储 例如DellR730本地磁盘
外部存储 U盘,移动硬盘等
网络存储 以太网络(iscsi, glusterFS,ceph)
5.从分区方式区分
MBR分区表 :
MBR是主引导记录(Master Boot Record)的英文缩写
GPT分区表 :
GPT是GUID磁碟分割表(GUID Partition Table)的缩写,含义“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准。
区别:
1、MBR分区表最多只能识别2TB左右的空间,大于2TB的容量将无法识别从而导致硬盘空间浪费;GPT分区表则能够识别2TB以上的硬盘空间。
2、MBR分区表最多只能支持4个主分区或三个主分区+1个扩展分区(逻辑分区不限制);GPT分区表在Windows系统下可以支持128个主分区。
3、在MBR中,分区表的大小是固定的;在GPT分区表头中可自定义分区数量的最大值,也就是说GPT分区表的大小不是固定的。
三、磁盘分区
fdisk:
fdisk一般用来分MBR分区[DOS分区表]
# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
你的修改都只暂存在内存中,可以应用到磁盘,谨慎使用保存命令Device does not contain a recognized partition table //未发现任何分区表
Building a new DOS disklabel with disk identifier 0xc4072440. [默认创建DOS MBR分区表]Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition //删除一个分区
g create a new empty GPT partition table //创建一个新的空GPT分区表
G create an IRIX (SGI) partition table
l list known partition types //列出已知的分区类型
m print this menu //打印帮助信息
n add a new partition //新建分区表
o create a new empty DOS partition table //创建一个新的空MBR分区表
p print the partition table //打印已有分分区表
q quit without saving changes //不保存退出
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit //保存分区信息并退出
x extra functionality (experts only)Command (m for help): n //创建新的分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): //选择分区类型,使用默认类型p
Using default response p
Partition number (1-4, default 1): //分区编号,使用默认编号1
First sector (2048-41943039, default 2048): //分区起始位置,使用默认起始位置
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +5G //分区结束位置,使用大小自动转换为分区结束
Partition 1 of type Linux and of size 5 GiB is set Command (m for help): p //打印分区
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xc4072440 Device Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 83 Linux Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):
Using default response p
Partition number (2-4, default 2):
First sector (10487808-41943039, default 10487808):
Using default value 10487808
Last sector, +sectors or +size{K,M,G} (10487808-41943039, default 41943039):
Using default value 41943039
Partition 2 of type Linux and of size 15 GiB is set Command (m for help): w //保存分区信息
The partition table has been altered!Calling ioctl() to re-read partition table.
Syncing disks. # lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 5G 0 part
└─sdb2 8:18 0 15G 0 part ----------------------------
============================
方案二:
三个主分区,两个逻辑分区
4G 4G三个主分区,一个扩展分区[分区两个逻辑分区]
//分配三个主分区
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +4G
Partition 1 of type Linux and of size 4 GiB is setCommand (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):
Using default response p
Partition number (2-4, default 2):
First sector (8390656-41943039, default 8390656):
Using default value 8390656
Last sector, +sectors or +size{K,M,G} (8390656-41943039, default 41943039): +4G
Partition 2 of type Linux and of size 4 GiB is setCommand (m for help): n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p):
Using default response p
Partition number (3,4, default 3):
First sector (16779264-41943039, default 16779264):
Using default value 16779264
Last sector, +sectors or +size{K,M,G} (16779264-41943039, default 41943039): +4G
Partition 3 of type Linux and of size 4 GiB is set//创建扩展分区,扩展分区要使用全部空间,防止空间浪费
Command (m for help): n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e):
Using default response e
Selected partition 4
First sector (25167872-41943039, default 25167872):
Using default value 25167872
Last sector, +sectors or +size{K,M,G} (25167872-41943039, default 41943039):
Using default value 41943039
Partition 4 of type Extended and of size 8 GiB is set//从扩展分区分出两个逻辑分区
Command (m for help): n
All primary partitions are in use
Adding logical partition 5
First sector (25169920-41943039, default 25169920):
Using default value 25169920
Last sector, +sectors or +size{K,M,G} (25169920-41943039, default 41943039): +4G
Partition 5 of type Linux and of size 4 GiB is set Command (m for help): n
All primary partitions are in use
Adding logical partition 6
First sector (33560576-41943039, default 33560576):
Using default value 33560576
Last sector, +sectors or +size{K,M,G} (33560576-41943039, default 41943039): //注意最后一块空间在分配的时候,结束位置直接使用默认值,因为分区表已经占用了部分空间
Using default value 41943039
Partition 6 of type Linux and of size 4 GiB is setCommand (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xc4072440 Device Boot Start End Blocks Id System
/dev/sdb1 2048 8390655 4194304 83 Linux
/dev/sdb2 8390656 16779263 4194304 83 Linux
/dev/sdb3 16779264 25167871 4194304 83 Linux
/dev/sdb4 25167872 41943039 8387584 5 Extended
/dev/sdb5 25169920 33558527 4194304 83 Linux
/dev/sdb6 33560576 41943039 4191232 83 LinuxCommand (m for help): w
The partition table has been altered!Calling ioctl() to re-read partition table.
Syncing disks. # lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 4G 0 part
├─sdb2 8:18 0 4G 0 part
├─sdb3 8:19 0 4G 0 part
├─sdb4 8:20 0 1K 0 part
├─sdb5 8:21 0 4G 0 part
└─sdb6 8:22 0 4G 0 part
gdisk:
安装gdisk
# yum -y install gdisk
# gdisk /dev/sdb
Command (? for help): n //创建新的分区
Partition number (1-128, default 1): //分区编号
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}: //起始位置
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +1G //结束位置
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): //分区类型
Changed type of partition to 'Linux filesystem'Command (? for help): n
Partition number (2-128, default 2):
First sector (34-41943006, default = 2099200) or {+-}size{KMGTP}:
Last sector (2099200-41943006, default = 41943006) or {+-}size{KMGTP}: +1G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'Command (? for help): n
Partition number (3-128, default 3):
First sector (34-41943006, default = 4196352) or {+-}size{KMGTP}:
Last sector (4196352-41943006, default = 41943006) or {+-}size{KMGTP}: +1G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'Command (? for help): n
Partition number (4-128, default 4):
First sector (34-41943006, default = 6293504) or {+-}size{KMGTP}:
Last sector (6293504-41943006, default = 41943006) or {+-}size{KMGTP}: +1G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'Command (? for help): n
Partition number (5-128, default 5):
First sector (34-41943006, default = 8390656) or {+-}size{KMGTP}:
Last sector (8390656-41943006, default = 41943006) or {+-}size{KMGTP}: +1G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'Command (? for help): n
Partition number (6-128, default 6):
First sector (34-41943006, default = 10487808) or {+-}size{KMGTP}:
Last sector (10487808-41943006, default = 41943006) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'Command (? for help): w //保存退出
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!Do you want to proceed? (Y/N): Y //确认写入到磁盘
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 1G 0 part
├─sdb2 8:18 0 1G 0 part
├─sdb3 8:19 0 1G 0 part
├─sdb4 8:20 0 1G 0 part
├─sdb5 8:21 0 1G 0 part
└─sdb6 8:22 0 15G 0 part
四、交换分区
作用: swap
'提升' 内存的容量,防止OOM(Out Of Memory)内存溢出
用的是硬盘空间 当作内存来用 当物理内存不够用的时候 使用 swap分区,防止物理内存耗尽
swap分区大小设置规则:
内存小于4GB时,推荐不少于2GB的swap空间;
内存4GB~16GB,推荐不少于4GB的swap空间;
内存16GB~64GB,推荐不少于8GB的swap空间;
内存64GB~256GB,推荐不少于16GB的swap空间
查看当前的交换分区:
[root@lcr ~]# free -m
[root@lcr ~]# swapon -s
制作swap分区:
先用fdisk做一个分区
格式化
[root@lcr ~]#mkswap /dev/sda5
激活swap分区
[root@lcr ~]#swapon /dev/sda5
关闭swap分区
[root@lcr ~]# swapoff /dev/sda5
五、开机挂载
[root@lcr ~]#vim /etc/fstab
第1列:挂载设备(3种写法)
(1)/dev/sda5
(2)10.11.59.110:/abc
(3)UUID=设备的uuid rhel6 rhel7的默认写法
第2列:挂载点
第3列:文件系统类型
第4列:文件系统属性
第5列:是否对文件系统进行(磁带)备份
0 不备份
1 1天一次
2 2天一次
第6列:是否检查文件系统
0 不检查
1 先检查
2 后检查
/dev/sdb1 /opt/lcr xfs defaults 0 0
/dev/sdb2 /opt/lcr2 ext2 defaults 0 0
UUID=7363c072-d11b-4a5a-babe-2caefd6127ee /swap swap defaults 0 0
扩展:
/etc/rc.d/rc.local 开机启动(在开机的时候自动执行这个文件里面的内容(命令))
vim /etc/rc.d/rc.local
touch lcr.txt
chmod a+x /etc/rc.d/rc.local
reboot:验证这个配置文件的作用
六、磁盘矩阵RAID
常用(raid0 raid1 raid5 )其他raid6 raid10
1.介绍
RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,通常简称为磁盘阵列。简单地说, RAID 是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能和数据冗余的技术。
2.功能
(1)通过对磁盘上的数据进行条带化,实现对数据成块存取,减少磁盘的机械寻道时间,提高了数据存取速度。
(2)通过对一个阵列中的几块磁盘同时读取,减少了磁盘的机械寻道时间,提高数据存取速度。
(3)通过镜像或者存储奇偶校验信息的方式,实现了对数据的冗余保护
2.1 RAID0
优点:
(1)充分利用I/O总线性能使其带宽翻倍,读/写速度翻倍。
(2)充分利用磁盘空间,利用率为100%。
缺点:
(1)不提供数据冗余。
(2)无数据检验,不能保证数据的正确性。
(3)存在单点故障。
应用场景:
(1)对数据完整性要求不高的场景,如:日志存储,个人娱乐
(2)要求读写效率高,安全性能要求不高,如图像工作站
2.2 RAID1
优点:
(1)提供数据冗余,数据双倍存储。
(2)提供良好的读性能
缺点:
(1)无数据校验
(2)磁盘利用率低,成本高
应用场景:
存放重要数据,如数据存储领域
2.3 RAID5
优点:
(1)读写性能高
(2)有校验机制
(3)磁盘空间利用率高
缺点:
(1)磁盘越多安全性能越差
应用场景:
数据安全性高,如数据金融、库、存储等
七、文件链接
软连接:①两个的inode号会不同
②如果把源文件删掉链接文件就会失效
③可以跨硬盘链接
硬链接:①inode号不变
②源文件的删除对链接文件没影响
③不是同一硬盘分区不能链接
总结:
1.软链接产生新的inode号,硬链接不产生新的inode号
2.源文件删除后,软链接文件不可以用,硬链接文件可用
3.软链接可以跨分区,硬链接不可以跨分区
4.不支持目录做硬链接
看磁盘分区UUID
ll /dev/disk/by-uuid
blkid +/dev/sd*
八、LVM逻辑卷
基本概念:
1、 物理卷-----PV(Physical Volume)
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘。
2、 卷组--------VG(Volumne Group)
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
3、 逻辑卷-----LV(Logical Volume)
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷要以属于同一个卷组,也可以属于不同的多个卷组。
4、 物理区域--PE(Physical Extent)
物理区域是物理卷中可用于分配的最小存储单元,物理区域的大小可根据实际情况在建立物理卷时指定。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一致。
5、 逻辑区域―LE(Logical Extent)
逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
创建逻辑卷 (磁盘的分区,单个磁盘)
0. 准备物理磁盘
可以是: /dev/sdb /dev/sdc1
[root@lcr ~]# ll /dev/vd{c,d,e}
brw-rw----. 1 root disk 253, 32 Jun 6 17:38 /dev/vdc
brw-rw----. 1 root disk 253, 48 Jun 6 17:38 /dev/vdd
brw-rw----. 1 root disk 253, 64 Jun 6 17:38 /dev/vde
1. pv(创建物理卷)
[root@lcr ~]# pvcreate /dev/vdd
Physical volume "/dev/vdd" successfully created
[root@lcr ~]# pvscan
PV /dev/vdd lvm2 [2.00 GiB]
Total: 1 [2.00 GiB] / in use: 0 [0 ] / in no VG: 1 [2.00 GiB]
[root@lcr ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/vdd lvm2 a-- 2.00g 2.00g
2. vg (创建卷组)
[root@lcr ~]# vgcreate vg1 /dev/vdd
Volume group "vg1" successfully created
[root@lcr ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 1 0 0 wz--n- 2.00g 2.00g
[root@lcr ~]# vgscan
Reading all physical volumes. This may take a while...
Found volume group "vg1" using metadata type lvm2
[root@lcr ~]# vgdisplay
--- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 2.00 GiB
PE Size 4.00 MiB
Total PE 511
Alloc PE / Size 0 / 0
Free PE / Size 511 / 2.00 GiB
VG UUID 7E4tlj-l0a2-ph52-OytH-eaq7-58K6-2S4n8V
3. lv (创建逻辑卷)
[root@lcr ~]# lvcreate -l 10 -n lv1 vg1
[root@lcr ~]# lvcreate -L 200M -n lv2 vg1
[root@lcr ~]# lvscan
ACTIVE '/dev/vg1/lv1' [640.00 MiB] inherit
ACTIVE '/dev/vg1/lv2' [256.00 MiB] inherit
4. 创建文件系统并挂载
[root@lcr ~]# mkfs.xfs /dev/vg1/lv1
[root@lcr ~]# mkfs.ext4 /dev/vg1/lv2
[root@lcr ~]# mkdir /mnt/lv1 /mnt/lv2
[root@lcr ~]# vim /etc/fstab
/dev/vg1/lv1 /mnt/lv1 xfs defaults 0 0
/dev/vg1/lv2 /mnt/lv2 ext4 defaults 0 0
[root@lcr ~]# mount -o rw 设备路径 挂载点
[root@lcr ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg1-lv1 651948 32928 619020 6% /mnt/lv1
/dev/mapper/vg1-lv2 245671 2062 226406 1% /mnt/lv2
扩展:
注意:
1.扩容的过程lv 文件系统
如果lv正在被使用,当我们给lv扩容完成后,需要给文件系统扩容
如果lv没有被使用,无需操作
2.lv扩容
vg有可用空间
vg没有可用空间,有可用的pv
vg没有可用空间,没有有用的pv
1.vg有空间,直接从vg给lv扩容
2.vg没有空间,看pv,如果有剩余的pv那么直接将pv添加到卷组,如果pv没有,需要添加磁盘,将磁盘加入到pv,在将pv加入到卷组,然后在给lv扩容
lv扩容成功后使用lvs等一系列查看lv的命令去查看是否扩容成功.
文件系统扩容
xfs: xfs_growfs /dev/vg1/lv1 10G----40G
ext: resize2fs /dev/vg1/lv1
==扩大VG vgextend==
pvcreate /dev/vde
vgextend vg1 /dev/vde
vgs
vgextend -L 800M /dev/vg1/lv1
增加到800M
[root@lcr ~]# lvextend -l +15 /dev/vg1/lv1
在原有的基础上去增加15存储单元
//-L是增加到多少容量 -l是增加多少个LE——LE是LV的最小存储单元
命令:
删除lv : lvremove
[root@lcr lcr]# lvremove /dev/vg1/lv2
删除vg: vgremove
[root@lcr lcr]# vgremove vg1
删除pv: pvremove
[root@lcr lcr]# pvremove /dev/sdb
lvextend
vgextend
pvcreate
查看:
pvdisplay
lvdisplay
vgdisplay
pvs lvs vgs
pvscan lvscan vgscan
改名:
vgrename
lvrename
减少逻辑卷的大小:lvreduce
减少卷组的大小:vgreduce
扩展:
扩容文件系统:
ext家族:
resize2fs /dev/lv1
xfs:
xfs_growfs /dev/lv1
九、文件系统
1.常见文件系统类型
本地文件系统(不能远程用)
fat32 ntfs ext3 ext4 xfs
网络文件系统
nfs cifs gludterfs hdfs ceph(分布式文件系统)
superblock:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式等;
inode:记录文件的属性(文件的元数据metadata),一个文件占用一个inode,同时记录此文件数据所在的block number;
block:实际存储文件的內容,若文件太大时,会占用多个block。
Superblock 沒有Superblock ,就沒有filesystem
inode table: 存储文件的元数据
• 文件的权限(read/write/excute);
• 文件的属主/属组(owner/group);
• 文件的大小;
• 记录文件内容所在的block number (pointer);
data block:存储文件的实际数据
查看文件系统的信息:
[root@lcr dev]# dumpe2fs /dev/vg1/lv2
重点:*xfs文件系统修复
xfs_repair
主要用来修复xfs文件系统出现的损坏错误,一些选项含义如下:
-L 强制日志文件(log)清空。日志文件中包含了一些元数据的修改,加上这个选项会强制清空log。这个选项会可能导致用户文件丢失。
-n xfs的文件系统进行检查 xfs_repair -n == xfs_check
xfs_check 以及 xfs_repair -n都可以对xfs文件系统进行检查,但是xfs_check需要很长的时间。
xfs_repair结束后,所有不能到达的inode节点被放进lost+found文件夹
使用xfs_repair对文件系统进行修复
使用xfs_repair之前,要先卸载该文件系统,然后使用xfs_metadump保存元数据信息
[root@lcr ~]# xfs_metadump -o /dev/sdb1 /save/sdb1.metadump
这步只是对元数据进行了保存,保存在了/save/sdb1.metadump这个文件,没有对数据进行备份,因为如果要备份数据本身的话,需要和数据一样大小的空间,显然这里没有这个空间。
检查:
[root@lcr ~]# xfs_repair -n /dev/sdb1
会进行一系列的检查。完成之后,进行下面的修复
修复:
[root@lcr ~]# xfs_repair /dev/sdb1
出现下面的错误:
ERROR: The filesystem has valuable metadata changes in a log which needs to be replayed. Mount the filesystem to replay the log, and unmount it before re-running xfs_repair. If you are unable to mount the filesystem, then use the -L option to destroy the log and attempt a repair. Note that destroying the log may cause corruption -- please attempt a mount of the filesystem before doing this.
这个时候,因为之前已经无法挂载了,所以也就不能进行replay的操作了,因此只能进行使用-L选项了。
[root@lcr ~]# xfs_repair -L /dev/sdb1
会进行log的清空,然后一系列的检查,得到下面的结果:
...
Phase 4 - check for duplicate blocks...
- setting up duplicate extent list...
- check for inodes claiming duplicate blocks...
- agno = 0
- agno = 4
- agno = 1
- agno = 8
- agno = 9
- agno = 10
- agno = 11
- agno = 12
...
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 ...
再执行修复
[root@lcr ~]# 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
- agno = 4
- agno = 5
...
- 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
- agno = 4
- agno = 5
- agno = 7
- agno = 8
...
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
条件时间允许的话,可以再进行个检查,但是考虑到时间太久,这里就不执行最后的检查了。xfs_check耗时较长。
[root@lcr ~]# xfs_check /dev/sdb1
这个时候,进去看原来的/data文件夹的数据,已经出来了。因此可以进行挂载了。