0 新增磁盘流程
# 磁盘整体的操作步骤
1.增加磁盘
编辑虚拟机设置--新增硬盘--SCSI--创建新虚拟磁盘--200G、多个文件--完成
2.磁盘分区
3.分区格式化成文件系统
4.文件系统挂载到指定目录
1 磁盘分区
# 1 分区分类
主分区
主引导分区,是可以安装系统的分区
拓展分区
属于主分区
逻辑分区
属于拓展分区
# 2 分区格式
MBR分区: "主引导记录"
1.MBR最大支持 2TB容量,在容量方面存在着极大的瓶颈
2.最多支持4个主分区
GPT分区: GPT fdisk,是fdisk的延伸
GPT是全局唯一标识分区表(GUID Partition Table)GUID分区表
1.它支持的磁盘容量比MBR大得多
2.最多支持128个主分区,足够使用
# GPT分区
这是一个正逐渐取代MBR的新标准,它是由UEFI辅住而形成的
将来UEFI用于取代老旧的BIOS,而GPT则取代老旧的MBR
# 3 分区工具
fdisk 工具用于 MBR 格式
gdisk 工具用于 GPT 格式
1.1 MBR分区
# 1 查看所有可用块设备(磁盘)的信息
lsblk [选项] [设备块]
选项:
-a 显示所有块设备 包含空设备
-f 显示文件系统信息、UUID xfs、ext4
# 2 fdisk工具 用于 MBR格式
# 查看、创建和维护分区表:
fdisk [选项] 或 [磁盘路径]
选项:
-l 列出所有分区表
-u 与 -l搭配使用,显示分区数目
# eg:
1.显示所有磁盘的分区情况
fdisk -l
2.显示指定磁盘的分区情况
fdisk -l /dev/sdb
3.修改指定磁盘的分区
fdisk /dev/sdb # 出现操作菜单
# 菜单操作指令:
m :帮助信息
n : 新增一个分区
d : 删除分区,保存退出后 需要执行partprobe命令,刷新一下分区表
p : 查看分区列表
w : 保存,并退出
# 3 eg: fdisk命令 做MBR分区
fdisk /dev/sdb
Command (m for help): n # 新增分区
# 分区类型
Partition type:
p primary (0 primary, 0 extended, 4 free) # 主分区最多创建4个,通常是3个主分区,加一堆拓展分区
# primary : 已经分过的分区
# extended : 已经分过的逻辑分区
# free : 总共还可以分多少个分区
e extended # 拓展分区
# 选择分区类型
Select (default p):
# 选择分区的编号
Partition number (1-4, default 1):
# 分区开始的扇区
First sector (2048-419430399, default 2048): # 0-2047:磁盘自己使用
# 分区结束的扇区
Last sector, +sectors or +size{K,M,G} (2048-419430399, default 419430399): +100G
Command (m for help): p # 查看分区列表
# 分区的名称 扇区开始的编号 扇区结束的编号 桶的数量 当前硬盘的编号 文件系统
Device Boot Start End Blocks Id System
/dev/sdb3 2048 209717247 104857600 83 Linux
# 4 刷新分区表
partprobe
1.2 GPT分区
# 1 安装gdisk工具 用于GPT格式 GPT fdisk,是fdisk的延伸
yum install gdisk -y
# 2 查看、创建和维护分区表:
gdisk [选项] 或 [磁盘路径]
选项:
-l 列出所有分区表
# eg:
1.显示所有磁盘的分区情况
gdisk -l
2.显示指定磁盘的分区情况
gdisk -l /dev/sdb
3.修改指定磁盘的分区
gdisk /dev/sdb # 出现操作菜单
# 菜单操作指令:
? :帮助信息
n : 新增一个分区
d : 删除分区,保存退出后 需要执行partprobe命令,刷新一下分区表
p : 查看分区列表
w : 保存,并退出
# 3 eg: gdisk命令 做GPT分区
gdisk /dev/sdb
Command (? for help): n # 新建分区
# 选择分区的编号
Partition number (1-128, default 1):
# 分区开始的扇区
First sector (34-5242879966, default = 2048) or {+-}size{KMGTP}:
# 分区结束的扇区
Last sector (2048-5242879966, default = 5242879966) or {+-}size{KMGTP}: +1G # 设定1G的空间
Current type is 'Linux filesystem'
# 列出所有文件系统 L指令
Hex code or GUID (L to show codes, Enter = 8300): L
会看到一系列文件系统信息,默认的8300编号代表Linux filesystem,用它就好
Hex code or GUID (L to show codes, Enter = 8300): # 直接回车用默认8300就好
Changed type of partition to 'Linux filesystem'
Command (? for help): p # 查看分区表
......
Number Start (sector) End (sector) Size Code Name
1 2048 2099199 1 024.0 MiB 8300 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 # 输入y继续 proceed v.继续进行
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.
2 格式化文件系统
# 1 强调:linux目录需要挂载使用
系统目录可以挂载到任何磁盘设备上
磁盘必须格式化制作文件系统,然后挂载才能使用
# 2 格式化文件系统 给分区指定文件系统的类型
mkfs.xfs [文件系统分区的路径]
# eg: mkfs.xfs /dev/sdb3
meta-data=/dev/sdb3 isize=512 agcount=4, agsize=6553600 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=26214400, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=12800, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# 注:
针对一块硬盘/dev/sdb,可以不分区,直接格式化制作文件系统 硬盘整体就是一个分区
mkfs.xfs /dev/sdb
# 3 注意
centos7选择xfs格式作为默认文件系统,而且不再使用以前的ext,但仍然支持ext4
xfs专为大数据产生,每个单个文件系统最大可以支持8eb
单个文件可以支持16tb,不仅数据量大,而且扩展性高
还可以通过xfsdump,xfsrestore来备份和恢复
3 磁盘挂载
3.1 挂载与卸载命令
### 1 磁盘挂载
# 1.1 手动挂载 临时挂载 每次重启就失效 需要重新挂载
mount [选项] [磁盘分区(文件系统)的路径] [挂载的路径]
选项:
-o 参数 主要用来描述设备或档案的挂接方式 # 就是/etc/fstab 挂载参数的列
loop # 用来把一个文件当做硬盘分区,挂接上系统 常用于挂载ISO镜像文件,就不用依赖于iso光盘
ro # 采用只读方式挂接设备
rw # 采用读写方式挂接设备
-t 指定文件系统
-a 挂载 /etc/fstab文件中 配置的所有挂载
eg:
mount /dev/sdb3 /mnt
mount -o loop /xxx.iso /opt # 直接 把本地的ISO镜像文件 当做一个硬盘分区,挂载 到 /opt目录
# 1.2 自动挂载 永久挂载
# 方式一: 修改磁盘配置文件 /etc/fstab # 先做快照,防止配置失误后,可恢复!
sed -i '$a /dev/sdb1 /mnt xfs defaults 0 0' /etc/fstab
或
vim /etc/fstab
# 增加1行
/dev/sdb1 /mnt xfs defaults 0 0
# 注:
1.当挂载信息出现问题时,linux主机将无法正常开机
2.在添加完配置信息之后,一定要检测语法是否正确
同一挂载点,若被多个磁盘挂载,会被覆盖
同一个磁盘,若挂载到多个挂载点,操作数据是同一份
3.挂载完要重启 或 mount -a 是挂载配置文件 立即生效
# 方式二: 将临时挂载命令 添加到开机自启动脚本中 /etc/rc.local
1.为/etc/rc.local文件添加可执行权限
chmod +x /etc/rc.d/rc.local
2.修改rc.local文件
vim /etc/rc.local
mount /dev/sdb1 /mnt
3.重启
reboot
### 2 磁盘卸载:
umount [挂载的设备 或者 挂载的目录路径]
eg: umount /dev/sdb1 或 umount /mnt
# 注:卸载文件时,光标不能够在卸载的目录
umount /mnt
umount: /mnt: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
# 强制卸载
umount -l [挂载源 或 挂载点]
### 3 查看目前文件系统 磁盘使用情况统计
df
-h # 大小按照易读的方式 展示
-T # 显示文件系统的类型
-i # 显示inode的信息
# eg: df -h
文件系统 大小 已用 可用 已用(%) 挂载的目录
Filesystem Size Used Avail Use% Mounted on
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.5M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 98G 2.2G 96G 3% /
/dev/sda1 509M 132M 378M 26% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb3 100G 33M 100G 1% /mnt
3.2 挂载配置文件详解
# 磁盘挂载配置文件详解 /etc/fstab
挂载的设备 挂载点(入口) 文件系统类型 挂载参数 是否备份 是否检查
/dev/... / xfs defaults 0 0
第一列:device:指定要挂载的文件系统的设备名称或块信息
除了指定设备文件外,也可以使用UUID、LABEL来指定分区。 # 推荐UUID
# 查看设备块的 uuid
blkid 或 lsblk -f
第二列:dir:指定挂载点的路径
第三列:type:指定文件系统的类型,如ext3,ext4,xfs等
第四列:options:指定挂载的参数,默认为defaults
defaults具有 rw、suid、exec、auto、nouser、async等默认参数的设定
第五列:dump:表示该挂载后的文件系统能否被dump备份命令作用
0 不备份
1 每天进行备份
2 不定日期的进行备份
第六列:pass:指定如何使用fsck来检查硬盘
0 不检查
1 检查 # 挂载点为/ (根分区)的时候,必须填写1,其他的都不能填写1
2 检查 # 当1级别检验完成之后,进行2级别检验
3 制作swap分区
# 1 查看开启的swap分区
swapon -s
文件名 类型 大小 已用 权限
/dev/sda2 partition 1048572 0 -2
free -m # 查看cpu 含swap
# 2 制作swap分区
### 通过真实磁盘空间,增加swap空间
# 2.1 先磁盘分区
fdisk或gdisk /dev/sdb
# 2.2 再格式化为swap
mkswap /dev/sdb1
### 通过文件,增加swap空间 本质还是磁盘
dd if=/dev/zero of=/swap_file bs=1M count=200
chmod 0600 /swap_file
mkswap -f /swap_file # 以文件制作swap分区
swapon /swap_file # 挂载
# 3 挂载swap分区
swapon /dev/sdb1
# 4 关闭swap分区
swapoff -a # 关闭所有的swap分区
swapoff /dev/sdb1 # 关闭某个具体的swap分区
# 5 开机自动挂载新增的swap分区
# 1.先查看swap分区的 设备块id
blkid | grep /dev/sdb1
/dev/sdb1: UUID="91d30c2d-2b43-40b1-b2b5-6f828c585f97" TYPE="swap" PARTUUID="d3b7649d-54aa-45eb-8bef-dccfe6915413"
# 2.修改/etc/fstab
vim /etc/fstab
UUID="91d30c2d-2b43-40b1-b2b5-6f828c585f97" swap swap defaults 0 0
4 raid磁盘阵列
# 0 前提
raid技术是针对实体的服务器
# 1 RAID(Redundant Array of Independent Disks)
即独立磁盘冗余阵列,简称为「磁盘阵列」
是多个独立的磁盘,通过 硬raid(硬件RAID卡) 或 软raid(软件MDADM)
组成在一起形成一个容量巨大的磁盘组
从而提升整个磁盘系统效能
# 2 RAID常用种类
RAID0 # 存储性能最高、但不提供数据校验或冗余备份
RAID1 # 数据安全最高(双份数据冗余备份)、但成本最高 空间使用率只有50%
RAID5 # 存储性能、数据安全、存储成本 兼顾的一种方案 ***
RAID10 # 0+1的结合
# 3 具体实战 注意:是先硬盘raid 再装服务器系统
https://zhuanlan.zhihu.com/p/356299159
https://www.cnblogs.com/linhaifeng/articles/13921161.html
5 文件系统的修复
### 0 前提
在Linux系统中为了增加系统性能,通常系统会将一些数据写 先放在内存中,
并不会直接将数据写入硬盘,这是因为内存速度要比硬盘快若干倍
但万一服务器突然断电或者其他未知原因 导致内存写入到硬盘的过程中断了
再次启动后,会造成文件系统错误:“emergency mode” 紧急模式
### 1 修复
# 0.如果进入不了操作系统,可以进入单用户模式下操作
# 1.首先尝试mount和umount文件系统,以便重放日志修复文件系统,如果不行,再进行如下操作
# 2.执行xfs_repair -n,只检查不修复:检查文件系统是否损坏,如何损坏会列出将要执行的操作
xfs_repair -n /dev/sdb2
如果是日志和数据不一致了,xfs默认会在挂载的时候修复这种不一致
操作系统给出的建议是以读写的方式挂载并自动修复,可以尝试以只读不修复方式挂载文件系统
mount -o ro,norecovery /dev/sdb2 /opt
# 3.若上述挂载不成功,xfs_repair 修复文件系统
xfs_repair /dev/sdb2
# 4.若还不行,最终 强制修复 会清空日志,导致丢失数据
xfs_repair -L /dev/sdb2
说明:-L是修复xfs文件系统的最后手段,慎重选择,它会清空日志,会丢失用户数据和文件
备注:在执行xfs_repair操作前,最好使用xfs_metadump工具保存元数据
一旦修复失败,最起码可以恢复到修复之前的状态
# 5.修复完成以后,尝试能不能正常挂载,如能,取消挂载,再启动就正常了
mount /dev/sdb2 /opt
### 2 实例
# 1.准备一个1G的文件系统与数据
mount /dev/sdb1 /opt/
echo big_egon > /opt/1.txt
# 2.模拟文件系统损坏
dd if=/dev/zero of=/dev/sdb bs=500M count=1 # 直接写入到/dev/sdb磁盘,而不是sdb1分区
# 此时看似一切都正常
cat /opt/1.txt
big_egon
echo egon_nb > /opt/2.txt
cat /opt/2.txt
egon_nb
# 但是重新挂载就会失效,即断电后系统重启,重新挂载就会不成功
umount /opt
mount /dev/sdb1 /opt
mount: /dev/sdb1 写保护,将以只读方式挂载
mount: 未知的文件系统类型“(null)”
# 3.修复
xfs_repair /dev/sdb1
Phase 1 - find and verify superblock...
bad primary superblock - bad magic number !!!
。。。。。。
修复失败,无法挂载
mount /dev/sdb1 /opt/
mount: 将 /dev/sdb1 挂载到 /opt 失败: 结构需要清理
# 强制修复 清空日志
xfs_repair -L /dev/sdb1
mount /dev/sdb1 /opt/
# 查看数据 数据丢失
ls /opt/ # 此时修复的意义在于可用,至于数据,你需要自己有备份意识
### 3 ext文件系统修复
fsck -f -y /dev/sda1 # 也是强制修复,清空日志
-y 对所有问题都回答 "yes"
-f 即使文件系统标记为clean,也强制进行检查
6 文件系统的备份与恢复
### 0 前提
针对是 xfs 文件系统的备份与恢复
### 1 备份级别
0 完全备份
1 <=level<= 9 增量备份
# ps:增量备份是和第一次的备份(level 0)进行比较,仅备份有差异的文件(level 1)
### 2 xfsdump 备份常用参数
-L xfsdump会记录每次备份的session Label,一般填写针对此文件系统的简易说明
-M xfsdump可以记录存储Media Label,一般填写此媒体的简易说明
-l 是L的小写,就是指定level,有0~9共10个等级,默认为0,即完全备份
-f 后面接 备份文件 和源文件
-I 大写的“i”,从/var/lib/xfsdump/inventory 列出目前备份的信息状态
### 3 备份与恢复 备份的数据 应存放在 与源路径 不同的磁盘上! 不然没有意义,一块磁盘坏,备份数据也会坏
# 1 数据备份
# 1.1 先做全量备份, 切记:“备份的源路径” 末尾不要加左斜杠/ ***
xfsdump -l 0 -L sdb3_bak -M "all bak" -f 全量备份的成果路径1 备份的源路径
eg: xfsdump -l 0 -L sdb3_bak -M "all bak" -f /all.bak /opt
# 1.2 再做增量备份
xfsdump -l 1 -L sdb3_bak -M "add bak1" -f 增量备份的成果路径1 备份的源路径
xfsdump -l 1 -L sdb3_bak -M "add bak2" -f 增量备份的成果路径2 备份的源路径
xfsdump -l 1 -L sdb3_bak -M "add bak3" -f 增量备份的成果路径3 备份的源路径
eg: xfsdump -l 1 -L sdb3_bak -M "add bak1" -f /add.bak1 /opt
# 2 数据恢复
# 2.1 先恢复全量备份
xfsrestore -f 全量备份的成果路径1 数据恢复的路径
# 2.2 再依次恢复增量备份
xfsrestore -f 增量备份的成果路径1 数据恢复的路径
xfsrestore -f 增量备份的成果路径2 数据恢复的路径
xfsrestore -f 增量备份的成果路径3 数据恢复的路径
### 4 xfsdump使用限制
1.必须用root权限
2.只能备份已挂载的文件系统
3.只能备份XFS文件系统
4.只能用xfsrestore恢复
5.通过文件系统的UUID来分辨备份,因此不能备份相同UUID的文件系统
7 LVM逻辑卷
7.1 LVM介绍
# 0 前提:为何使用LVM
磁盘分区时,通常不能确定每个分区的使用大小,凭经验预估
且fdisk、gdisk工具对磁盘分区后,分区空间大小则固定了 后续管理则麻烦
# 1 LVM Logical Volume Manager 逻辑卷管理
逻辑卷管理LVM是硬盘的一个系统工具
LVM可以创建和管理“逻辑”卷,而不是直接使用物理硬盘
可以让管理员弹性的管理 逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据
# 2 LVM涉及主要概念
物理卷(PV): physical volume
把常规的磁盘设备通过pvcreate命令对其进行初始化,形成了物理卷 # 其实就是硬盘或分区 面粉
卷组(VG): volume group
把多个物理卷组成一个逻辑的整体,卷组的大小就是多个硬盘之和 # 理解就是由一个或多个PV组成的整体 面团
逻辑卷(LV): logical volume
从卷组中划分需要的空间大小出来。用户仅需对其格式化然后即可挂载使用
从VG中切割出的空间,用于创建文件系统 # 切成馒头
基本单元(PE): physical extend
分配的逻辑大小的最小单元,默认为4MB的基本块
假设分配100MB逻辑空间,则需要创建25个PE
# 3 LVM优缺点
# 优点:
1.可在系统运行的状态下,动态的扩展文件系统的大小
2.文件系统可以跨多个磁盘 # 因此文件系统大小,不会受物理磁盘的限制
3.可增加新的磁盘到LVM的存储池中
4.可 以镜像的方式冗余重要的数据到多个物理磁盘
5.可方便的导出整个卷组到另外一台机器
# 缺点:
1.因为加入了额外的操作,存取性能受到影响
2.当卷组中的一个磁盘损坏时,整个卷组都会受到影响
解释:LVM如果有一个磁盘损坏,整个lvm都坏了,lvm只有动态扩展作用
方案:底层用RAID + 上层LVM = 既有冗余又有动态扩展
3.在从卷组中移除一个磁盘的时候,必须使用reducevg命令
该命令要求root权限,且不允许在快照卷组中使用
7.2 LVM基本使用
### 0 安装lvm2
yum install -y lvm2
### 1 PV物理卷 操作
# 1.制作PV
pvcreate /dev/sdb1 # 可对分区做
pvcreate /dev/sdc # 可对整块盘做
# 2.查看PV
pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 1.00g 1.00g
/dev/sdc lvm2 --- 20.00g 20.00g
pvscan
PV /dev/sdb1 lvm2 [1.00 GiB]
PV /dev/sdc lvm2 [20.00 GiB]
PV /dev/sdb2 lvm2 [1.00 GiB]
PV /dev/sdb3 lvm2 [1.00 GiB]
Total: 4 [23.00 GiB] / in use: 0 [0 ] / in no VG: 4 [23.00 GiB]
### 2 VG卷组 操作
# 1.VG制作 将PV划入VG中
vgcreate vg1 /dev/sdb1 /dev/sdc # 包含/dev/sdb1与/dev/sdc两个pv
# 2.VG查看
vgs
VG #PV #LV #SN Attr VSize VFree
vg1 2 0 0 wz--n- 20.99g 20.99g
### 3 LV逻辑卷 操作
# 1.LV制作
lvcreate -L 100M -n lv1_from_vg1 vg1 # 从vg1卷组中分出来 逻辑卷lv1_from_vg1
-L # 逻辑卷大小
-n # 逻辑卷名字
# 2.LV查看
lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1_from_vg1 vg1 -wi-a----- 100.00m
### 4 格式与挂载
mkfs.xfs /dev/vg1/lv1_from_vg1
mount /dev/vg1/lv1_from_vg1 /test1/
7.3 在线动态操作容量
### 1 在线扩容
# 1 在线扩容
意思是在不用卸载的情况下,完成扩容
# 2 命令
lvextend -L [+]MGT /dev/VG_NAME/LV_NAME
# 注:
-L 100M 与 -L +100M不是一个意思
-L 100M 代表是直接指定大小为多少
-L +100M 代表在原有的基础上扩容
# 3 示例
# 1.新增一块盘或者一个分区
fdisk /dev/sdb ......
partprobe # 刷新分区表信息
ls /dev/sdb4
# 2.新增一个pv
pvcreate /dev/sdb4
# 3.把新增的pv扩到vg1里 # 前三步 属于VG卷组扩容
vgextend vg1 /dev/sdb4
vgs # 可以看到vg1扩容了
# 4.接下来对lv1_from_vg1扩容 若VG卷组有多余的空间,以上步骤可不用,直接LV扩容
lvextend -L +1000M /dev/vg1/lv1_from_vg1
xfs_growfs /dev/vg1/lv1_from_vg1 # 扩展逻辑卷后需要更新xfs文件系统
### 2 在线缩容
不要缩容!!!并且xfs干脆不支持缩容
lvreduce -L [-]MGT /dev/VG_NAME/LV_NAME 缩减逻辑卷
### 3 删除
# 1.删除lv 需要先卸载挂载点
umount /test3
lvremove /dev/vg2/lv1_from_vg2
# 2.删vg
vgremove vg2
# 3.删pv:只能删掉那些不属于任何vg的pv
pvremove /dev/sdb2
pvremove /dev/sdb3
7.4 快照与数据恢复
# 1 快照 snapshot
LVM机制提供了对LV做快照的功能,也就是给文件系统做一个备份
采用写时复制技术(Copy-On-Write,COW),还支持 thin类型的快照
# 2 快照原理:写时复制技术
是指当LVM快照创建的时候,仅创建了 原逻辑卷中实际数据 的inode块的硬链接(hark-link)而已
快照会跟踪原始卷中块的改变
只要实际的数据没有改变,快照就只包含指向数据的inode的指针,而非数据本身
若实际的数据发生改变,原始逻辑卷上 将要改变的数据,会在改变之前,拷贝到快照预留的空间
故要求快照的空间,是够用的
# 3 快照总结
1.创建快照实际上就是创建了一个逻辑卷,只不过该卷的属性与普通逻辑卷的属性有些不一样
2.VG中需要预留存放,快照本身的空间,不能全部被占满
3.快照所在的VG 必须与被备份的LV所处的VG 相同,否则创建快照会失败
# 4 快照实例: 给vg1下的lv1建立快照,并恢复快照数据
# 1.准备好初始数据
df
文件系统 1K-块 已用 可用 已用% 挂载点
...
/dev/mapper/vg1-lv1_from_vg1 98980 5348 93632 6% /test1
echo "hello egon" > /test1/1.txt
# 2.查看vg1容量是否充足
vgs # lv1_from_vg1 属于卷组vg1,而vg1有足够的容量来分配给快照卷
VG #PV #LV #SN Attr VSize VFree
vg1 2 2 0 wz--n- 20.99g <20.70g
# 3.在vg1卷组里,创建一个lv1_from_vg1_snap的快照
lvcreate -L 1G -s -n lv1_from_vg1_snap /dev/vg1/lv1_from_vg1
# 格式
-L 指定快照(逻辑卷)的空间大小
# 原则上:应该是和源lv的空间一样,但是lv可以动态扩容,故可以先设定小一部分就行
-s 指定为快照(snapshot)的格式
-n 指定快照的名称
最后 指定为哪个逻辑卷 建立快照
# 4.查看
lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1_from_vg1 vg1 owi-aos--- 100.00m
lv1_from_vg1_snap vg1 swi-a-s--- 104.00m lv1_from_vg1 0.01
# 5.恢复数据
# 5.1 单个文件的处理: 挂载快照后,再将备份数据,还原到原lv中
mount -o nouuid /dev/vg1/lv1_from_vg1_snap /opt/
# 注:
快照挂载的时候,由于和原来的lv是同一个UUID
而xfs文件系统是不允许相同UUID的文件系统挂载,故需要加选项 -o nouuid
cp /opt/1.txt /test1/1.txt # 将备份的1.txt,复制到源目录中
# 其实多个文件,也可以直接cp所有文件
cp /opt/* /test/
# 5.2 多个文件的处理: 先卸载数据源与快照,再进行合并快照,再挂载源lv
# 快照(lv)是一次性的,合并后会自动删除
umount /test1
umount /opt
lvconvert --mergesnapshot /dev/vg1/lv1_from_vg1_snap
mount /dev/vg1/lv1_from_vg1 /test1/
cat /test1/1.txt # 数据还原回来了