zoukankan      html  css  js  c++  java
  • xfs文件系统备份与恢复;lvm与动态扩容、缩容、快照

    一 修复服务器⽂件系统

    在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)
    
    快照恢复相当于重新挂载,优点是占用空间小。
    
  • 相关阅读:
    Jackson
    Jackson
    SAX
    SAX
    JDK Tools
    JAXB
    linux系统mysql连接检查脚本
    linux系统ssh远程连接检查脚本
    linux系统带宽监测脚本
    linux系统web日志分析脚本
  • 原文地址:https://www.cnblogs.com/caodan01/p/14609468.html
Copyright © 2011-2022 走看看