lvm + raid(逻辑磁盘+阵列)创建删除恢复 for linux

本教程适用于linux
lvm为逻辑磁盘,raid为阵列,两种技术可以单独使用也可以搭配使用
2023.9.3更新

前三节是操作命令和基础知识,后面是实操。

一、存储硬件查看相关命令

硬盘分区相关操作在后面用的到,可以先略过,有需要了再回来查

(一)查看

1.查看所有存储硬件详细信息

bash 复制代码
fdisk -l

2.查看文件系统

bash 复制代码
df -h

3.查看硬件挂载情况

bash 复制代码
lsblk

4.硬盘温度、通电时间等信息

查看这篇详细说明:linux查看硬盘详细信息

(二)新建分区和格式化

使用fdisk -l获取所有连接的硬盘,比如要在/dev/sde这个盘新建分区,挂载到/cloud目录(之前没有这个目录)
新建ext4文件系统分区

bash 复制代码
fdisk /dev/sde

n->回车->p(查看分区)->w(保存)->q(退出)

bash 复制代码
mkfs.ext4 /dev/sde1
bash 复制代码
mkfs -t ext4 /dev/sde1

新建目录

bash 复制代码
mkdir /cloud

将目录和硬盘关联

bash 复制代码
mount /dev/sde1 /cloud

(三)开机挂载

linux非桌面版本,新加入的磁盘,如果不设置挂载,重启后会失效
使用磁盘的uuid进行挂载,不要用/dev/xxx进行挂载,否则部分情况重启可能会串盘

使用fdisk -l获取硬盘的uuid

bash 复制代码
vi /etc/fstab

比如将5607a174-cfb3-476f-b509-a0e2e5f9654b挂载到/cloud下,加入这条信息

UUID=5607a174-cfb3-476f-b509-a0e2e5f9654b /cloud            ext4    defaults        0       2

(四)删除分区

比如要删除/dev/sde1这个分区,这个分区挂载在/cloud目录
卸载目录

bash 复制代码
umount /cloud

删除

bash 复制代码
fdisk /dev/sde1

d->回车->w(可能需要删除多次)

二、raid讲解和基本命令

具体案例详细操作见四

(一)说明

(二)依赖软件安装

bash 复制代码
apt-get install mdadm

bash 复制代码
dnf install mdadm

(三)命令

1.禁用raid

禁用/dev/md0

bash 复制代码
mdadm -S /dev/md0

三、lvm讲解和命令

LVM如果其中的一个盘坏了,其它的还是不受影响的,并不是一个坏了全部都坏了

具体案例详细操作见四

(一)说明

1.物理硬件

一个具体的硬盘,由于linux中每个硬件都是一个"文件",在系统层面,形如是/dev/sda

2.物理卷PV (physical volume)

可以是一个硬盘分区或者一个组好的raid

3.卷组VG(Volume Group)

一个或多个物理卷组成一个卷组

4.逻辑卷LV(logical volume)

在卷组上的分区

(二)依赖软件安装

如果缺失这个软件,已有的lvm也无法正常运行(假如无意之中卸载了)

bash 复制代码
apt-get install lvm2

bash 复制代码
dnf install lvm2

(三)命令

lvm在linux中是默认有的,最近几年的版本在安装系统时也推荐使用lvm

1.查看类相关命令

查看物理卷PV

bash 复制代码
pvdisplay

查看卷组VG

bash 复制代码
vgdisplay

查看逻辑卷lv

bash 复制代码
lvdisplay

查看逻辑卷lv挂载状态

bash 复制代码
lvscan

2.创建类相关命令

创建物理卷PV

bash 复制代码
pvcreate /dev/sdc1

创建卷组VG

3.卸载类相关命令

``

三、具体应用-创建

(一)raid0-并行-追求速度

1.说明

这种情况下一个块硬盘的损坏会导致数据的丢失,不同容量的组raid0会按照最小的那块计算容量,建议使用容量一致的硬盘。

2.优缺点

优点:速度快,相当于并行

缺点:坏一个盘,整体数据都无法直接使用

3.实操

下面操作将/dev/sda /dev/sdc组成一个raid0,组合后的raid叫/dev/md0

bash 复制代码
mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sda /dev/sdc

查看创建结果,能输出结果说明可以

bash 复制代码
cat /proc/mdstat

(二)raid1-镜像-安全

1.说明

这种情况下组合的raid只会有最小的那块盘的容量,一般选用一样容量的硬盘。

2.优缺点

优点: 除非两个盘同时坏,否则数据完整,如果两块盘同时坏,但是没有坏在一个地方,可以恢复,数据仍然在。就是说除非两块盘同时坏在一个地方,且无法恢复,而这块丢失的数据又是需要的情况下,数据才会丢失。
缺点: 速度相对于一个盘略微降低,空间利用率最大50%(两块盘一样大)

3.实操

下面操作将/dev/sda /dev/sdc组成一个raid1,组合后的raid叫/dev/md1

bash 复制代码
mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/sda /dev/sdc

查看创建结果,能输出结果说明可以

bash 复制代码
cat /proc/mdstat

(三)raid10-速度和安全性

1.思路

相当于每2块组成一个镜像(raid1),然后两个raid1再组成raid0

(还有一种是raid01,两块盘组成raid0,然后两个raid0组成raid1,这种方法继承了raid0和raid1的缺点,不推荐使用raid01,只推荐raid10)

2.优缺点:

优点:速度快且安全

缺点:硬盘利用率最大为50%

3.实操

假设4块硬盘
先创建两个raid1

/dev/sda 和 /dev/sdb组 /dev/mda

/dev/sdc 和 /dev/sdd组 /dev/mdb

bash 复制代码
mdadm --create --verbose /dev/mda --level=1 --raid-devices=2 /dev/sda /dev/sdb
bash 复制代码
mdadm --create --verbose /dev/mdb --level=1 --raid-devices=2 /dev/sdc /dev/sdd

再创建一个raid0

bash 复制代码
mdadm --create --verbose /dev/md10 --level=0 --raid-devices=2 /dev/mda /dev/mdb

最后组合的是/dev/md10,在这个raid上分区格式化即可(操作方法在上面,看目录找)

(四)灵活扩容且安全(raid1+lvm)

1.思路

每两块硬盘组一个raid1镜像,多个raid1组一个lvm,可以只用2块,然后后期扩容,这样最后可以在系统层面只是一个分区。对于重要数据,强烈推荐使用这种方法

2.优缺点

优点:灵活扩容且安全

缺点:硬盘利用率为50%

3.实操

/dev/sda 和 /dev/sdb组 /dev/mda

/dev/sdc 和 /dev/sdd组 /dev/mdb

然后2个raid1组lvm,最后格式化,挂载到/mirror目录

先组2个raid1

bash 复制代码
mdadm --create --verbose /dev/mda --level=1 --raid-devices=2 /dev/sda /dev/sdb
bash 复制代码
mdadm --create --verbose /dev/mdb --level=1 --raid-devices=2 /dev/sdc /dev/sdd

2个raid1组lvm

2个raid1都先创建pv

bash 复制代码
pvcreate /dev/mda
bash 复制代码
pvcreate /dev/mdb

创建vg,名称为GroupMirror

bash 复制代码
vgcreate GroupMirror /dev/mda /dev/mdb

激活

bash 复制代码
vgchange -a y GroupMirror
bash 复制代码
lvcreate -l 100%FREE -n mirror_data GroupMirror

注意大小写,小写-l 可以写比例,大写是具体值

bash 复制代码
mkfs.ext4 /dev/GroupMirror/mirror_data
bash 复制代码
mkdir /mirror && mount -t ext4 /dev/GroupMirror/mirror_data /mirror 

(五)raid5

以后更新

(六)raid6

以后更新

四、具体应用-调整

(一)LVM卷组扩容

lvm可以用一个物理磁盘或者一个raid作为基础,建立lvm。

下面将一个磁盘/dev/md2扩容到名为GroupMirror的卷组
创建lvm物理卷

bash 复制代码
pvcreate /dev/md2

扩容卷组

bash 复制代码
vgextend GroupMirror /dev/md2

此时仍然未生效,下面根据自己的名称修改命令(100%新磁盘的空间扩容到原来的)

bash 复制代码
lvextend -l +100%FREE /dev/mapper/GroupMirror-mirror_data

上面的操作后仍然未生效

-------如果是ext格式用这个刷新(-p是现实百分比)

bash 复制代码
resize2fs -p /dev/mapper/GroupMirror-mirror_data

-------如果是xfs格式则用以下的即可

bash 复制代码
xfs_growfs /dev/mapper/GroupMirror-mirror_data

我拓展了一个8T的机械盘用了一个小时左右

五、具体应用-卸载

(一)卸载lvm

1.移除挂载的分区

比如挂载的分区叫/mirror

bash 复制代码
umount /mirror

2.删除逻辑卷LV

比如逻辑卷为 /dev/GroupMirror/mirror_data

bash 复制代码
lvremove /dev/GroupMirror/mirror_data

会询问是否删除,输入y


注意:此时vg卷组还在,数据还在,重新挂载LV和之前数据一样
如果需要重新挂载,看五、(一)误删LV恢复

3.删除卷组VG

bash 复制代码
vgremove /dev/GroupMirror

会提示,全部选择y即可

注意:此时物理卷还在,数据还在,仍然可以恢复
如果需要重新挂载,看五、(二)误删LV、VG恢复

4.删除物理卷PV

查看pv

bash 复制代码
pvs

移除对应的物理卷,这个物理卷有可能是raid

bash 复制代码
pvremove /dev/sde

注意:此时仍然有机会恢复,建议找专业人士

5.删除物理磁盘

注意,这次删除数据就真的没了!

bash 复制代码
fdisk /dev/sde

依次选择:m、d、3、w

六、具体应用-LVM相关恢复

(一)误删LV(逻辑卷)

1.查询achieve记录

需要通过VG卷组进行恢复
查看VG

bash 复制代码
vgdisplay

可以看到VG还在,假设VG名称为GroupMirror

查看VG操作记录

bash 复制代码
vgcfgrestore --list GroupMirror

可以看到类似以下的操作

2.恢复到指定的节点

bash 复制代码
vgcfgrestore -f /etc/lvm/archive/GroupMirror_00008-1277402051.vg GroupMirror

然后会显示恢复成功

激活LV(和新建的时候操作一样)

bash 复制代码
lvchange -ay /dev/GroupMirror/mirror_data

创建挂载点并挂载,使用原来的挂载点即可
如果是挂载到新的挂载点,mkdir /xxx即可

bash 复制代码
mount -t ext4 /dev/GroupMirror/mirror_data /mirror

(二)误删LV(逻辑卷)、VG(卷组)恢复

如果删掉了LV和VG仍然可以恢复,先恢复VG,然后再恢复LV(同上面恢复LV)

1.查询achieve记录

bash 复制代码
vgcfgrestore --list GroupMirror

会看到很多文件,还有修改时间,找到误删时候的文件,y以.vg结尾(通常是最近的一个)

可以看到很多操作记录,比如下面的

2.恢复卷组VG和LV

这个命令一次性就恢复了两次操作,当然你要选好恢复的.VG文件

bash 复制代码
vgcfgrestore -f /etc/lvm/archive/GroupMirror_00010-1053623108.vg GroupMirror

完成后会提示

3.恢复逻辑卷LV

激活LV(和新建的时候操作一样)

bash 复制代码
lvchange -ay /dev/GroupMirror/mirror_data

创建挂载点并挂载,使用原来的挂载点即可
如果是挂载到新的挂载点,mkdir /xxx即可

bash 复制代码
mount -t ext4 /dev/GroupMirror/mirror_data /mirror
相关推荐
WTT00115 分钟前
2024楚慧杯WP
大数据·运维·网络·安全·web安全·ctf
苹果醋314 分钟前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
了一li36 分钟前
Qt中的QProcess与Boost.Interprocess:实现多进程编程
服务器·数据库·qt
日记跟新中1 小时前
Ubuntu20.04 修改root密码
linux·运维·服务器
唐小旭1 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python
码农君莫笑1 小时前
信管通低代码信息管理系统应用平台
linux·数据库·windows·低代码·c#·.net·visual studio
明 庭1 小时前
Ubuntu下通过Docker部署NGINX服务器
服务器·ubuntu·docker
BUG 4041 小时前
Linux——Shell
linux·运维·服务器
007php0071 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程