xfs文件系统备份与恢复;lvm与动态扩容、缩容、快照

时间:2024-03-07 22:18:59

一 修复服务器⽂件系统

在Linux系统中,为了增加系统性能,通常系统会将⼀些数据写先放在内存中,并不会直接将数据写⼊硬 盘,这是因为内存速度要⽐硬盘快若⼲倍。但是有个问题,万⼀公司服务器突然断电或者其他未知原 因,再次启动后,会造成⽂件系统错误:“emergency mode”

执⾏任何命令都会有以下(或相似)错误

Error getting authority: Error initializing authority: Could not connect: Nosuch file or directory (g-io-error-quark, 1)

查看运⾏⽇志,可以提示出损坏的⽂件系统

journalctl -xb

修复⽅式:

# 0、如果进⼊不了操作系统,可以进⼊单⽤户模式下操作
# 1、⾸先尝试mount和umount⽂件系统,以便重放⽇志,修复⽂件系统,如果不⾏,再进⾏如下操作。
# 2、执⾏xfs_repair -n,只检查不修复:检查⽂件系统是否损坏,如何损坏会列出将要执⾏的操作[root@localhost ~]# xfs_repair -n /dev/sdb2
如果是⽇志和数据不⼀致了,xfs 默认会在挂载的时候修复这种不⼀致,操作系统给出的建议是以读写的⽅式挂载并⾃动修复,可以尝试以只读不修复⽅式挂载⽂件系统。
[root@localhost ~]# mount -o ro,norecovery /dev/sdb2 /opt
# 3、如果上述挂载不成功,可以执⾏xfs_repair修复⽂件系统
[root@localhost ~]# xfs_repair /dev/sdb2
# 4、如果还不⾏,那最后⽅法只能采⽤"损失部分数据的修复⽅法"根据打印消息,修复失败时:
先执⾏xfs_repair -L /dev/sdb2(清空⽇志,会丢失⽂件)
再执⾏xfs_repair /dev/sdb2
说明:-L是修复xfs⽂件系统的最后⼿段,慎重选择,它会清空⽇志,会丢失⽤户数据和⽂件。
备注:在执⾏xfs_repair操作前,最好使⽤xfs_metadump⼯具保存元数据,⼀旦修复失败,最起码可以恢复到修复之前的状态。
# 5、修复完成以后,尝试能不能正常挂载 ,如能,取消挂载,再启动就正常了

模拟⽂件系统损坏之 dd 命令

dd if=/dev/zero of=/dev/sdb bs=500M count=1 
 解释:
if : 从哪里读文件
of : 写入到哪里
bs : 写入500M
count : 写一块

示例:模拟文件系统出问题,再修复

1、准备⼀个1G的⽂件系统与数据
[root@localhost ~]# mount /dev/sdb1 /opt/
[root@localhost ~]# echo big_egon > /opt/1.txt 

2、模拟⽂件系统损坏
[root@localhost ~]# dd if=/dev/zero of=/dev/sdb bs=500M count=1 
 				  # 直接⼲/dev/sdb⽽不是sdb1  (直接向硬盘中写数据,不能测试向分区写数据)
[root@localhost ~]# # 此时看似⼀切都正常
[root@localhost ~]# cat /opt/1.txt
big_egon
[root@localhost ~]# echo egon_nb > /opt/2.txt
[root@localhost ~]# cat /opt/2.txt
egon_nb
[root@localhost ~]# # 但是重新挂载就会失效,即断电后系统重启,重新挂载不成功
[root@localhost ~]# umount /opt
[root@localhost ~]# mount /dev/sdb1 /opt
mount: /dev/sdb1 写保护,将以只读⽅式挂载
mount: 未知的⽂件系统类型“(null)” 	

3、对文件系统进行修复
[root@localhost ~]# xfs_repair /dev/sdb1

xfs_repair [磁盘或分区路径]
注: xfs_repair修改硬盘之后,硬盘数据丢失,所以对重要的数据要进行数据备份

xfs⽂件系统备份与恢复

备份:另外在保存一份
全量备份和增量备份
全量备份:将需要备份的文件全部复制一份
增量备份:在原来备份基础上,把新增数据重新备份一份
命令:xfsdump 

xfsdump的备份级别有以下两种,默认为0(即完全备份)

0 完全备份
1 <= level <= 9 增量备份
# ps:增量备份是和第⼀次的备份(level 0)进⾏⽐较,仅备份有差异的⽂件(level 1)

xfsdump常⽤参数

-L :记录每次备份的地方
-M :此次备份的注释,这⾥可以填写此媒体的简易说明。
-l :指定备份的等级,有0~9共10个等级,默认为0,即完整备份
-f :备份的文件名称,例如/dev/st0设备⽂件名或其他⼀般⽂件⽂件名
-I :查看备份信息,列出⽬前备份的信息状态。

xfsdump使⽤限制

1.必须⽤root权限
2.只能备份已挂载的⽂件系统
3.只能备份XFS⽂件系统
4.只能⽤xfsrestore解释
5.透过⽂件系统的UUID来分辨备份档,因此不能备份相同UUID的⽂件系统

安装备份命令

[root@localhost ~]# yum install xfsdump -y

备份的命令格式

xfsdump [参数] 备份路径
例:xfsdump -L sdb1_bak -M "sbd1_from_xxx" -l 0 -f sdb1_from_bak_1 /root/oldboy

查看⼀下备份⽂件⼤⼩
[root@localhost ~]# du -sh /root/
恢复:将以前保存的数据进行还原
命令:xfsrestore 
参数:
	-f  指定备份的文件路径
恢复的格式
xfsrestore [参数] 恢复的路径
[root@localhost oldboy]# xfsrestore -f /root/sdb1_from_bak_3 /root/oldboy/

三 LVM

什么是LVM

逻辑卷管理LVM是硬盘的⼀个文件系统管理⼯具。⽆论在Linux或者其他类似的系统,都是⾮常的好⽤。传统分区 使⽤固定⼤⼩分区,重新调整⼤⼩⼗分麻烦。但是,LVM可以创建和管理“逻辑”卷,⽽不是直接使⽤物 理硬盘。可以让管理员弹性的管理逻辑卷的扩⼤缩⼩,操作简单,⽽不损坏已存储的数据。可以随意将 新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷。LVM并不需要重启就可以让内核知道分区的存 在。

通过 LVM 技术,可以屏蔽掉磁盘分区的底层差异,在逻辑上给⽂件系统提供了⼀个卷的概念,然后在这 些卷上建⽴相应的⽂件系统

lvm优缺点

优点:
1、可以在系统运⾏的状态下动态的扩展⽂件系统的⼤⼩。
2、⽂件系统可以跨多个磁盘,因此⽂件系统⼤⼩不会受物理磁盘的限制。
3、可以增加新的磁盘到LVM的存储池中。
4、可以以镜像的⽅式冗余重要的数据到多个物理磁盘。
5、可以⽅便的导出整个卷组到另外⼀台机器。
缺点:
1、因为加⼊了额外的操作,存取性能受到影响。
2、当卷组中的⼀个磁盘损坏时,整个卷组都会受到影响。
解释:LVM如果有⼀个磁盘损坏,整个lvm都坏了,lvm只有动态扩展作⽤,
⽅案:底层⽤RAID + 上层LVM = 既有冗余⼜有动态扩展

1、lvm的基本使⽤

1、安装lvm软件包
[root@localhost ~]#	yum install lvm2 -y

2、制作pv:可以对分区做、也可以对整块盘做
[root@localhost ~]# pvcreate /dev/sdb3 # 对分区做
[root@localhost ~]# pvcreate /dev/sdc # 对整块盘做

3、查看pv
[root@localhost ~]#	pvs
[root@localhost ~]#	pvscan

4、创建vg:将pv划⼊vg中
[root@localhost ~]#	vgcreate [vg名称] [pv路径]
[root@localhost ~]# vgcreate vg1 /dev/sdb1 /dev/sdc # 包含/dev/sdb1与/dev/sdc两个pv

5、查看vg
[root@localhost ~]# vgs

6、创建lvm逻辑卷(lv)
lvcreate [参数] 逻辑卷名称
	-L : 创建逻辑卷的大小
	-n : 逻辑卷的名字
		lvcreate [参数] 逻辑卷名称
[root@localhost ~]# lvcreate -L 100M -n lv1_from_vg1 vg1	
[root@localhost ~]# lvs     # 查看

7、制作文件系统
[root@localhost ~]#	mkfs.xfs /dev/vg1/xxx
	
8、挂载文件系统
[root@localhost ~]#	 # mount [lv的路径] [挂载点的路径]
[root@localhost ~]#  mount /dev/vg1/lv1_from_vg2 /test1/

2、在线动态扩容

在线扩容的意思为:在不⽤卸载的情况下完成扩容

lvextend -L [+]MGT /dev/VG_NAME/VL_NAME
# 注意:-L 100M 与 -L +100M不是⼀个意思,或者代表在原有的基础上扩容

步骤示例

1、增加一块硬盘或者⼀个分区
[root@localhost ~]# fdisk /dev/sdb

2、创建pv
[root@localhost ~]# pvcreate  /dev/sdd

3、直接扩容给VG
[root@localhost ~]# vgextend [vg的名称] [pv]
[root@localhost ~]# vgextend vg1 /dev/sdd

4、扩容给LV
[root@localhost ~]# lvextend -L [+100G] [lv路径]
[root@localhost ~]# lvextend -L +100G /dev/vg1/lv1_from_vg1

5、刷新[root@localhost ~]# xfs_growfs /dev/vg1/lv1_from_vg1   # 扩展逻辑卷后需要更新fs⽂件系统

3、在线动态缩容与删除

不要缩容!!!并且xfs⼲脆不⽀持缩容

lvreduce -L [-]MGT /dev/VG_NAME/LV_NAME 缩减逻辑卷
删除
1、删除lv之前需要先卸载挂载点
[root@localhost ~]# umount /root/vg02

2、删除lv
[root@localhost ~]# lvremove /dev/vg1/vg1_test01 
Do you really want to remove active logical volume vg1/vg1_test01? [y/n]: y
  Logical volume "vg1_test01" successfully removed
  
3、删除vg
[root@localhost ~]# vgremove vg1
  Volume group "vg1" successfully removed

4、删除PV:只能删掉那些不属于任何vg的pv
[root@localhost ~]# pvremove /dev/sdb1 
  Labels on physical volume "/dev/sdb1" successfully wiped.
[root@localhost ~]# pvremove /dev/sdc 
  Labels on physical volume "/dev/sdc" successfully wiped.
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize    PFree   
  /dev/sda2  centos lvm2 a--   <19.00g       0 
  /dev/sdb2  vg2    lvm2 a--   <40.00g  <40.00g
  /dev/sdd   vg2    lvm2 a--  <100.00g <100.00g

3、快照

LVM 机制提供了对 LV 做快照的功能,也就是说可以给⽂件系统做⼀个备份

快照的本质就是⼀个特殊的lv,创建快照后,如果源数据卷中的⽂件被更新了,会将⽼数据赋给快照的空间,这就要求快照的空间也是够⽤的

步骤

1、挂载硬盘

2、创建PV

3、创建VG

4、创建LV

5、格式化文件系统

6、挂载

7、造数据
[root@www ~]# echo 111 >> /vg/1.txt

8、拍摄快照
[root@www ~]# lvcreate -L +1G -s -n vg_from_vg100_bak /dev/vg100/vg_from_vg100 
  Logical volume "vg_from_vg100_bak" created.

lvcreate -L [快照大小] -s(创建快照) -n [快照的名字] [拍摄快照的目标]
lvcreate -L 1G -s -n lv1_from_vg1_snap /dev/vg1/lv1_from_vg1

9、查看快照
[root@www ~]# lvs
  LV                VG     Attr       LSize   Pool Origin        Data%  Meta%  Move Log Cpy%Sync Conver    
  vg_from_vg100     vg100  owi-aos---   1.00t                                                           
  vg_from_vg100_bak vg100  swi-a-s---   1.00g      vg_from_vg100 0.01  
  
10、恢复数据
[root@www ~]# mount -o nouuid /dev/vg100/vg_from_vg100_bak /vg_bak
# 备注:同一个UUID只能挂载一次,如果需要挂载多次,则需要使用(-o nouuid)

快照恢复相当于重新挂载,优点是占用空间小。