SRE 第二周作业

这篇博客详细介绍了SRE的作业,涉及Vim配置、grep/sed操作、编程题实现、Linux分区格式化挂载、RAID和LVM特性的总结,以及LVM的实践操作,如创建、扩容和缩容逻辑卷。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. 总结vim的三种模式切换,配置vimrc实现写脚本自动生成注释。

2. 使用grep/sed实现获取/etc/sysconfig/network-script/ifcfg-eth0目录的/etc/sysconfig/network-script/。或获取目录的ifcfg-eth0 

3. 完成编程题,可以让用户选择当前主机的所有网卡,选中网卡后,获取ip,网段,掩码。通过ping命令检测在线的主机,打印在线的主机,写入一个文件中。当ip的结尾是奇数时,在目标主机或当前主机,批量添加user1到user100用户,否则添加group1到group100,并生成对应的用户user1到user100,让用户的过期时间在1天之后。

4. 总结分区,格式化,挂载命令的使用。

5. 总结RAID特性,LVM特性。

6. 准备20G/30G的2个分区,生成VG,并创建10G的mylv,基于LVM,将10G的LV格式化挂载分区到/data/mysql, 添加gentoo用户,指定家目录为/data/mysql,确保/data/mysql的权限是gentoo用户,并切换确保gentoo用户家目录正常,之后复制/etc/sysconfig到gentoo家目录。此时扩容mylv到20G,确保数据不丢失。之后缩容mylv到5G确保数据不丢失。现在基于mylv生成快照,修改或删除原卷中的数据,基于快照卷还原数据。


第一题 总结vim的三种模式切换,配置vimrc实现写脚本自动生成注释。

vim三种模式及常用指令

 .vimrc配置方案

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""新文件标题
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"新建.c,.h,.sh,.java,.txt文件,自动插入文件头 
autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java,*.txt exec ":call SetTitle()" 
""定义函数SetTitle,自动插入文件头 
func SetTitle() 
	"如果文件类型为.sh文件 
	if &filetype == 'sh' 
		call setline(1,"\#!/bin/bash") 
		call append(line("."), "\#") 
		call append(line(".")+1, "\# fileName: ".expand("%")) 
		call append(line(".")+2, "\# author: liAng") 
		call append(line(".")+3, "\# mail: angl6112@163.com") 
		call append(line(".")+4, "\# created: ".strftime("%c")) 
		call append(line(".")+5, "\# ") 
		call append(line(".")+6, "\### BEGIN INIT INFO") 
		call append(line(".")+7, "\# Description:") 
		call append(line(".")+8, "\#") 
		call append(line(".")+9, "\#") 
		call append(line(".")+10, "\### END INIT INFO") 
		call append(line(".")+11, "set -e #遇到命令错误停止执行") 
        call append(line(".")+12, "") 
	
	endif

endfunc 
autocmd BufNewFile * normal G

"自动缩进
set autoindent
set cindent
"Tab键的宽度
set tabstop=4
"统一缩进为4
set softtabstop=4
set shiftwidth=4
"不要用空格代替制表符
set noexpandtab
"在行和段开始处使用制表符
set smarttab
"显示行号
set number

第二题 使用grep/sed实现获取/etc/sysconfig/network-script/ifcfg-eth0目录的/etc/sysconfig/network-script/。或获取目录的ifcfg-eth0

获取目录路径:

#1.grep实现
[root@rocky85 19:30:31] ~
-- # echo "/etc/sysconfig/network-script/ifcfg-eth0" | grep -oE "^/.*/"
/etc/sysconfig/network-script/
[root@rocky85 19:31:12] ~

#2.sed实现
[root@rocky85 19:31:34] ~
-- # echo "/etc/sysconfig/network-script/ifcfg-eth0" | sed -E 's/(.*\/).*/\1/g'
/etc/sysconfig/network-script/
[root@rocky85 19:31:37] ~
-- # 

获取文件名:

# grep实现
[root@rocky85 19:35:50] ~
-- # echo "/etc/sysconfig/network-script/ifcfg-eth0" | grep -oE "ifcfg-.*"
ifcfg-eth0
[root@rocky85 19:36:54] ~

# sed实现
[root@rocky85 19:32:28] ~
-- # echo "/etc/sysconfig/network-script/ifcfg-eth0" | sed -E 's/.*\/(.*$)/\1/g'
ifcfg-eth0
[root@rocky85 19:32:49] ~
-- # 

如果是以 / 结尾, 如  “/etc/sysconfig/network-script/” 取所在路径和目录名:

 获取目录路径:

[root@node01 18:13:12] ~
-- # echo "/etc/sysconfig/network-script/" | grep -oE '/[a-z]+/[a-Z]+/' #这种方式有些耍赖, 但是想不出好的grep方法
/etc/sysconfig/
[root@node01 18:17:28] ~
-- # echo "/etc/sysconfig/network-script/" | sed -E 's#(.*/).*/#\1#'
/etc/sysconfig/
[root@node01 18:18:16] ~
-- # 

获取目录名:

[root@node01 18:20:23] ~
-- # echo "/etc/sysconfig/network-script/" | grep -oE '[a-z]+-[a-Z]+' #没想到好办法
network-script
[root@node01 18:20:24] ~
-- # echo "/etc/sysconfig/network-script/" | sed -E 's#.*/(.*)/#\1#'
network-script
[root@node01 18:20:26] ~
-- # 


第三题 完成编程题

题目要求:

①可以让用户选择当前主机的所有网卡,选中网卡后,获取ip,网段,掩码。

②通过ping命令检测在线的主机,打印在线的主机,写入一个文件中。

③ 当ip的结尾是奇数时,在目标主机或当前主机,批量添加user1到user100用户,否则添加group1到group100,并生成对应的用户user1到user100,让用户的过期时间在1天之后。

#!/bin/bash
#
# fileName: set.sh
# author: liAng
# mail: angl6112@163.com
# created: Fri 02 Dec 2022 16:10:57 PM CST
# 
### BEGIN INIT INFO
# Description:
#
#
### END INIT INFO
set -e #cript execution will stop on erro
set -u #Disallow calls to undefined variables

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
SKYBLUE='\033[0;36m'
PLAIN='\033[0m'

ipFile="./survival.ip"
>$ipFile

# 网卡列表
netList=$(ifconfig | grep -oE '^ens[0-9]{3}')

cat <<EOF
网卡列表:
$netList
EOF

echo

read -p '请输入网卡名称: ' netcard
#netcard=ens160

# iP
ipaddr=$(ifconfig $netcard | sed -n '/^\s*inet /p' | sed -E 's/.*inet ([0-9]{3}.*)\s+ netmask.*/\1/')
# 掩码
netmask=$(ifconfig $netcard | sed -n '/^\s*inet /p' | sed -E 's/.*netmask ([0-9]{3}.*) \s+broadcast .*/\1/')
# 网段, 假设24位网段
network=$(sed -E 's/(.*)[0-9]{1,3}/\10/' <<<$ipaddr)

cat <<EOF
ip地址: $ipaddr
子网掩码: $netmask
网段: $network/$netmask
EOF

echo

echo -e "$RED正在检测在线主机, 请稍等...$PLAIN"
echo -e "$GREEN在线主机:$PLAIN"

# ping网段内的所有ip
for n in {1..2} # {1..254}
do
	ip="$(sed -E 's/^(.*\.)[0-9]{1,3}$/\1/' <<<$network)$n"
	ping -c 3 $ip &>/dev/null  
	if [ $? -eq 0 ];then
		echo -e "$YELLOW$ip$PLAIN"
		echo $ip >>$ipFile # 存活IP写入文件
	fi
done


#明天的日期
tomorrow=$(date -d '+1 day' +%F)

# 添加账户, 改为检查本机的IP类型, 添加本机账户
n=$(sed -E 's/.*\.([0-9]{1,3}$)/\1/' <<<$ipaddr)
let "res=$n & 1"
echo -e "$GREEN开始添加账户, 请稍等...$PLAIN"
if [ "$res" -eq 1 ];then
	# 奇数
	echo user{1..10}|xargs -n1 useradd
else
	# 偶数
	echo group{1..10} | xargs -n1 groupadd
	# 添加账户,指定主要组,并设置明天过期
	seq 10 | xargs -i useradd -g group{} -e $tomorrow user{}
fi
		

echo -e "$GREEN账户添加完成.$PLAIN"


第四题 总结分区,格式化,挂载命令的使用。

1、分区

分区类型

共两种分区表: MBR 和 GPT

分区的大小=(结束扇区编号-起始扇区编号) x 扇区大小

MBR分区表

        位于硬盘的第一个扇区, 共512byte; 前446byte为bootloader(引导系统使用), 末尾2byte为标识位, 剩余64byte用于存储分区信息;

        每个分区信息需要占用16byte, 64/16=4, 所以最多只能存储4个分区的信息。其中每个分区的记录扇区数的区域只占32bit, 所以单个分区的最大容量就是: 2^32*512byte换算后为2T

        而为了突破四个分区的限制, 通常将前三个分区划分为"主分区"正常存储数据使用, 将第四个分区划分为"拓展分区", 对应分区编号1-4, 然后在"拓展分区"中划分"逻辑分区" 分区编号从5开始, 使用逻辑分区存储数据, 在这16byte中可以存储多个逻辑分区, 最终是系统中的可用分区数不局限于4个。

GPT分区表

        相比MBR, GPT最多可以划分128个分区, 并且每个分区中使用64bit记录扇区数, 使得每个分区的大小可以达到 2^64*512byte=8Z, 如果使用4K扇区其容量为 2^64*4K=64Z

        需要注意的是, 在windows中 GPT分区表必须结合UEFI引导使用或者使用BIOS+MBR, 而在linux则没有限制。

管理分区

lsblk 列出块设备

添加硬盘后, 如果找不到设备手动触发设备扫描: echo '- - -' >/sys/class/scsi_host/host*/scan

MBR: fdisk 只能管理mbr分区

例如:

查看磁盘信息

fdisk -l /dev/sdb 查看磁盘信息

创建分区 

 删除分区

p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
v 校验分区
u 转换单位
w 保存并退出
q 不保存并退出

GPT: parted(适用于MBR和GPT)

#parted 非交互式, 也支持交互式
parted /dev/sdb mklabel gpt|msdos #先设置disklabel
parted /dev/sdb print   # 打印设备信息
parted /dev/sdb mkpart primary 1 200 (默认M)#创建主分区, 大小1-200M
parted /dev/sdb rm 1 # 删除分区, /sdb1
parted -l 列出所有硬盘分区信息

gdisk: 类似fdisk的 GPT分区工具, 只管理 GPT

# 需要先安装
yum install gdisk -y

分区完成后, 如果lsblk识别不到新分区, 可能是因为内核中加载的是旧的分区表, 需要使用 partprobe 通知内核更新分区表。

二、格式化

格式化是创建文件系统的过程。硬盘只是存储数据的介质, 而数据怎么存则是由"文件系统"决定。

目前常见的文件系统:

  • linux:
    •  ext4: 比较成熟的文件系统, 各种工具很丰富
    • xfs: 相比ext4较新, 并且不支持缩容
    • swap: 交换分区, 也是一种文件系统
  • windoes:
    • FAT32: linux也通用, 但是单个文件不能超过4G
    • NTFS: linux无法识别, 可以通过一些插件在linux上使用 

mkfs.ext4 创建ext4文件系统

mkfs.xfs 创建xfs的文件系统

mkswap /dev/sdb2

#创建ext4文件系统
[root@rocky85 22:14:25] ~
-- # mkfs.ext4 /dev/sdb1 
mke2fs 1.45.6 (20-Mar-2020)
Discarding device blocks: done                            
Creating filesystem with 7864320 4k blocks and 1966080 inodes
Filesystem UUID: 49f06c9c-9eb3-4636-880d-329afb9f969c
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   

#创建xfs文件系统
[root@rocky85 22:14:35] ~
-- # mkfs.xfs /dev/sdb2 
meta-data=/dev/sdb2              isize=512    agcount=4, agsize=1966080 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0
data     =                       bsize=4096   blocks=7864320, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=3840, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.

#使用分区创建swap
[root@rocky85 22:14:44] ~
-- # mkswap /dev/sdb3 
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=fdb1bd75-eadf-46d5-b6f4-7db93ff3143f
[root@rocky85 22:14:52] ~
-- #
#使用文件创建swap
[root@rocky85 22:18:12] ~
-- # dd if=/dev/zero of=/swapfile bs=1M count=1024   #先生成文件, 1G大小, swap也1G
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.570392 s, 1.9 GB/s
[root@rocky85 22:19:00] ~
-- # stat /swapfile 
  File: /swapfile
  Size: 1073741824	Blocks: 2097152    IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 28289       Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:etc_runtime_t:s0
Access: 2022-12-02 22:18:59.561873513 +0800
Modify: 2022-12-02 22:19:00.132875853 +0800
Change: 2022-12-02 22:19:00.132875853 +0800
 Birth: 2022-12-02 22:18:59.561873513 +0800
[root@rocky85 22:19:07] ~
-- # mkswap /swapfile                           #将这个文件格式化为swap类型
mkswap: /swapfile: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=ef213315-931a-45ba-8040-db8a81e56e0b
[root@rocky85 22:20:26] ~
-- # chmod 600 /swapfile      #swap文件权限设置为600
[root@rocky85 22:20:51] ~

查看文件系统信息:

# 关键参数
[root@rocky85 22:01:52] ~
-- # tune2fs -l /dev/sdb1 
tune2fs 1.45.6 (20-Mar-2020)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          9692b610-7684-437a-83b6-43d3ffe29451 #uuid
Filesystem state:         clean   #文件系统正常
Inode count:              3276800  # inode的数量
Block count:              13107200  #block的数量
Reserved block count:     655360    #保留的block的数量, 供root应急使用
Free blocks:              12822642  #剩余的block的数量 x block_size=剩余空间
Free inodes:              3276789   #剩余的inode的数量
First block:              0
Block size:               4096 #block的大小, 单位KB, 通常4k

# dumpe2fs也可以
[root@rocky85 22:05:55] ~
-- # dumpe2fs -h /dev/sdb1

# 查看xfs文件系统信息
[root@rocky85 22:06:53] ~
-- # xfs_info /dev/sdb2 
meta-data=/dev/sdb2              isize=512    agcount=4, agsize=3276736 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0
data     =                       bsize=4096   blocks=13106944, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=6399, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@rocky85 22:06:58] ~
-- # 

三、挂载

# 临时挂载硬盘分区
[root@rocky85 22:09:06] ~
-- # mount /dev/sdb1 /mnt/     #挂载分区
[root@rocky85 22:09:13] ~
-- # df | grep mnt
/dev/sdb1            51343840   53272  48652744   1% /mnt
[root@rocky85 22:09:23] ~
-- # mount /dev/sr0 /cdrom     #挂载光盘
[root@rocky85 22:09:39] ~
-- # 
# 挂载swap分区
[root@rocky85 22:22:30] ~
-- # swapon /dev/sdb3        #挂载分区类型的swap
[root@rocky85 22:23:13] ~
-- # swapon /swapfile        #挂载文件类型的swap
[root@rocky85 22:23:27] ~
-- # swapon -s               #查看已挂载的swap的设备号
Filename				Type		Size	Used	Priority
/dev/dm-1                              	partition	2097148	0	-2
/dev/sdb3                              	partition	2097148	0	-3
/swapfile                              	file    	1048572	0	-4
[root@rocky85 22:23:31] ~
-- # free -hm                #查看swap大小已扩容
              total        used        free      shared  buff/cache   available
Mem:          3.6Gi       326Mi       1.8Gi        16Mi       1.5Gi       3.1Gi
Swap:         5.0Gi          0B       5.0Gi
[root@rocky85 22:23:36] ~
-- # 
# 永久挂载, 挂载信息写入持久化文件 /etc/fstab
[root@rocky85 22:30:55] ~
-- # cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Wed Nov  9 20:36:19 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rl-root     /                       xfs     defaults        0 0
UUID=4c761727-17ab-4b50-b4a7-38ad082671f8 /boot                   xfs     defaults        0 0
/dev/mapper/rl-swap     none                    swap    defaults        0 0

# 0 0 不备份, 不检查
UUID=49f06c9c-9eb3-4636-880d-329afb9f969c	/mnt	ext4	defaults	0 0
UUID=b260dcf8-5c20-4797-ac8f-96f9cd1de5aa	/data	xfs		defaults	0 0

# 分区类型的swap使用uuid挂载, 挂载点是none, 文件系统类型swap
UUID=7ac2e48c-4239-40d0-8d03-4dbdb3581140	none	swap	defaults	0 0
#文件类型的swap使用文件路径挂载
/swapfile	none	swap	defaults	0 0
[root@rocky85 22:30:36] ~
-- # mount -a              #使用mount -a 挂载fstab中的文件系统
[root@rocky85 22:30:38] ~
-- # df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             1.8G     0  1.8G   0% /dev
tmpfs                1.9G     0  1.9G   0% /dev/shm
tmpfs                1.9G   17M  1.8G   1% /run
tmpfs                1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/rl-root   17G  3.2G   14G  19% /
/dev/nvme0n1p1      1014M  188M  827M  19% /boot
tmpfs                371M     0  371M   0% /run/user/0
/dev/sdb1             30G   45M   28G   1% /mnt
/dev/sdb2             30G  247M   30G   1% /data
[root@rocky85 22:30:41] ~
-- # free -mh
              total        used        free      shared  buff/cache   available
Mem:          3.6Gi       326Mi       1.8Gi        16Mi       1.5Gi       3.1Gi
Swap:         2.0Gi          0B       2.0Gi
[root@rocky85 22:30:45] ~
-- # swapon -a              #swap需要使用swapon -a挂载
[root@rocky85 22:30:53] ~
-- # free -mh
              total        used        free      shared  buff/cache   available
Mem:          3.6Gi       329Mi       1.8Gi        16Mi       1.5Gi       3.1Gi
Swap:         5.0Gi          0B       5.0Gi
[root@rocky85 22:30:55] ~
-- # 

# 卸载硬盘分区
[root@rocky85 22:11:08] ~
-- # umount /mnt               
[root@rocky85 22:11:13] ~
-- # umount /data

# 卸载swap分区
[root@rocky85 22:25:44] ~
-- # swapon -s                #查看已挂载的swap的设备号
Filename				Type		Size	Used	Priority
/dev/dm-1                              	partition	2097148	0	-2
/dev/sdb3                              	partition	2097148	0	-3
/swapfile                              	file    	1048572	0	-4
[root@rocky85 22:25:47] ~
-- # swapoff /swapfile        #按照设备号关闭swap
[root@rocky85 22:25:56] ~
-- # swapoff /dev/sdb3 
[root@rocky85 22:26:05] ~
-- # free -mh
              total        used        free      shared  buff/cache   available
Mem:          3.6Gi       324Mi       1.8Gi        16Mi       1.5Gi       3.1Gi
Swap:         2.0Gi          0B       2.0Gi
[root@rocky85 22:26:45] ~
-- # 

#注释/etc/fstab中的挂载信息
[root@rocky85 22:33:48] ~
-- # cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Wed Nov  9 20:36:19 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rl-root     /                       xfs     defaults        0 0
UUID=4c761727-17ab-4b50-b4a7-38ad082671f8 /boot                   xfs     defaults        0 0
/dev/mapper/rl-swap     none                    swap    defaults        0 0

# 0 0 不备份, 不检查
#UUID=49f06c9c-9eb3-4636-880d-329afb9f969c	/mnt	ext4	defaults	0 0
#UUID=b260dcf8-5c20-4797-ac8f-96f9cd1de5aa	/data	xfs		defaults	0 0

# 分区类型的swap使用uuid挂载, 挂载点是none, 文件系统类型swap
#UUID=7ac2e48c-4239-40d0-8d03-4dbdb3581140	none	swap	defaults	0 0
#文件类型的swap使用文件路径挂载
#/swapfile	none	swap	defaults	0 0
[root@rocky85 22:33:50] ~
-- # 

 第五题 总结RAID特性,LVM特性。

raid:

raid是一种磁盘阵列技术, 将多块磁盘组合成一个磁盘阵列, 来提供磁盘冗余提升性能。

raid通常由"raid阵列卡"实现, 这是一种硬件设备称为硬raid, 这种实现稳定性高, 同时还附带"阵列卡缓存"提高读写性能。

其次还有"软raid"顾名思义就是通过"软件"模拟raid特性提供冗余提高性能, 多用于家用环境, 成本低。

raid级别:

raid有raid0, raid1, raid4, raid5, raid6, raid01, raid10, raid40, raid50, raid60

不同的raid级别需要使用不同数量的硬盘, 同时提供了不同的磁盘冗余性能提升(有些raid会降低性能)

各raid级别特点
实现方式最少磁盘冗余数量磁盘利用率特点
raid0数据分散在所有盘中, 共同读写1n

数据均匀分布同时读写性能高, 但是没有冗余, 任何一块盘损坏都会导致所有数据丢失。

单盘raid0, 表面看没有意义, 但是做了raid之后应该能蹭到"阵列卡缓存", 应该有些许性能提升。

raid1两块盘互为镜像盘21n/2数据同时写入两块盘, 写性能些许降低, 读性能会有提升。
raid4

四块盘组成raid, 数据分散写入n-1块盘, 剩余一块盘专门存储校验位, 用于恢复任何一块盘的数据。

41(n-1)/n

在兼顾冗余的同时, 提高了读写性能。

但是实践中发现, 单独的校验盘的故障率过高。

raid5

最少三快盘组成阵列, 数据写入时会同时计算出校验位(异或算法)

数据和校验位交叉存储在所有盘上 

31(n-1)/n

在兼顾冗余的同时, 提高了读写性能。

相比raid4, 它的校验位和数据时交叉存储的, 降低了硬盘的故障率, 同时需要的硬盘数量更少。

raid6

最少四块盘组成阵列, 数据写入时使用双份校验法, 存储两份校验数据。

数据和校验位交叉存储在所有盘上

42(n-2)/n

读写性能提升

校验数据存储两份, 允许两块盘故障, 相应的校验算法更复杂。

raid01先做最少两组raid0, 然后将这两组raid0 合并为raid142n/2实现了更高的冗余, 提高了性能。但是故障盘必须在同一组raid0上才是2块冗余, 否则就是1
raid10先做最少两组raid1, 然后将这两组raid1 合并为raid042n/2

实现了更高的冗余, 提高了性能。但是故障盘必须分散在不同组raid0上才是2块冗余, 否则就是1

对比raid01更常用。

raid50先做最少两组raid5, 然后将这两组raid5 合并为raid062(n-2)/n较好的兼顾性能和冗余。造价高
raid60先做最少两组raid6, 然后将这两组raid6 合并为raid084(n-4)/n极高的冗余, 特殊场景使用。造价高

图例:

 

 

 

 

 lvm特性

lvm位于是物理磁盘和文件系统之间的一个逻辑层, 它屏蔽了下层磁盘的差异, 使得不同类型不同大小的磁盘组合成统一的"逻辑卷组", 在卷组之中划分"逻辑卷"每个逻辑卷对应着一个"文件系统"。

逻辑卷是一个抽象概念, 通过逻辑卷使文件系统不在局限在某个固定大小的磁盘分区上,可以实现文件系统动态扩缩容

注意: xfs类型的文件系统因为其文件系统边缘不支持收缩, 因此每次缩容后都需要重新创建文件系统。 扩容不收影响。


第六题 lvm管理

①准备20G/30G的2个分区,生成VG,并创建10G的mylv;

# 先准备一个新的磁盘大小50G /dev/sdd

# 然后划分两个分区, /dev/sdd1 20G 和 /dev/sdd2 30G

[root@rocky85 14:00:07] ~
-- # vgcreate myvg /dev/sdd{1,2}  #分区可以直接创建vg, 会自动创建pv
  Physical volume "/dev/sdd1" successfully created.
  Physical volume "/dev/sdd2" successfully created.
  Volume group "myvg" successfully created
[root@rocky85 14:00:14] ~
-- # lvcreate -L 10G -n mylv myvg  #划分一个10g的mylv
  Logical volume "mylv" created.
[root@rocky85 14:00:34] ~
-- # 

②基于LVM,将10G的LV格式化挂载分区到/data/mysql;

添加gentoo用户,指定家目录为/data/mysql,确保/data/mysql的权限是gentoo用户,并切换确保gentoo用户家目录正常,之后复制/etc/sysconfig到gentoo家目录。

[root@rocky85 14:00:34] ~
-- # mkfs.ext4 /dev/myvg/mylv   #创建文件系统
mke2fs 1.45.6 (20-Mar-2020)
Discarding device blocks: done                            
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: 70583b72-b0dd-4ecd-b37e-dea0c1ae96ef
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

[root@rocky85 14:02:26] ~
-- # mkdir /data/mysql         #创建挂载点
[root@rocky85 14:03:25] ~
-- # grep mylv /etc/fstab      #持久化挂载, 逻辑卷可以直接写名称
/dev/mapper/myvg-mylv	/data/mysql	ext4	defaults 0 0
[root@rocky85 14:03:33] ~
-- # 
[root@rocky85 14:03:33] ~
-- # mount -a                  #挂载
[root@rocky85 14:06:17] ~
-- # df | grep mysql
/dev/mapper/myvg-mylv  10255636   36888   9678076   1% /data/mysql
[root@rocky85 14:06:22] ~
-- # 
[root@rocky85 14:07:53] ~
-- # useradd -d /data/mysql gentoo       #创建gentoo指定家目录
[root@rocky85 14:07:59] ~
-- # ll /data/mysql/ -d                  #gentoo家目录权限不正确
drwxr-xr-x. 3 root root 4096 Dec  3 14:02 /data/mysql/   
[root@rocky85 14:08:30] ~
-- # chown -R gentoo.gentoo /data/mysql  #调整gentoo家目录权限
[root@rocky85 14:08:56] ~
-- # su - gentoo                         #切换gentoo测试账户
[gentoo@rocky85 14:08:59] ~
-- $ ls
lost+found
[gentoo@rocky85 14:09:01] ~
-- $ pwd                                 #验证家目录
/data/mysql
[gentoo@rocky85 14:09:06] ~
-- $ exit
logout

[root@rocky85 14:09:15] ~
-- # grep gentoo /etc/passwd             #验证家目录
gentoo:x:1023:1024::/data/mysql:/bin/bash

[root@rocky85 14:10:43] ~                #拷贝测试目录
-- # cp -ar /etc/sysconfig /data/mysql/
[root@rocky85 14:11:23] ~
-- # ll /data/mysql/
total 4
drwxr-xr-x. 5 root root 4096 Nov 18 10:39 sysconfig
[root@rocky85 14:12:26] ~
-- # 

③此时扩容mylv到20G,确保数据不丢失。

[root@rocky85 14:14:52] ~
-- # vgdisplay myvg                           #查看vg空间是否足够
  --- Volume group ---
  VG Name               myvg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               49.99 GiB
  PE Size               4.00 MiB
  Total PE              12798
  Alloc PE / Size       2560 / 10.00 GiB
  Free  PE / Size       10238 / 39.99 GiB   #足够扩容10G       
  VG UUID               XTRupm-O2YJ-60Hh-xILU-GCCV-WfGE-eX8ynL
   
[root@rocky85 14:15:14] ~                   #-L 调整到20G, 也可以加-r 自动调整文件系统
-- # lvextend -L 20G -n /dev/myvg/mylv 
  Size of logical volume myvg/mylv changed from 10.00 GiB (2560 extents) to 20.00 GiB (5120 extents).
  Logical volume myvg/mylv successfully resized.

[root@rocky85 14:15:48] ~
-- # resize2fs /dev/myvg/mylv               #ext4文件系统, 手动调整文件系统边缘
resize2fs 1.45.6 (20-Mar-2020)
Filesystem at /dev/myvg/mylv is mounted on /data/mysql; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/myvg/mylv is now 5242880 (4k) blocks long.

[root@rocky85 14:16:11] ~
-- # df -h | grep mylv                      #检查已扩容到20G
/dev/mapper/myvg-mylv   20G   45M   19G   1% /data/mysql
[root@rocky85 14:16:43] ~
-- # 

[root@rocky85 14:19:57] /data/mysql/sysconfig
-- # du -sh /data/mysql/sysconfig/          #检查文件
112K	/data/mysql/sysconfig/
[root@rocky85 14:20:08] /data/mysql/sysconfig
-- #

④缩容mylv到5G确保数据不丢失。

[root@rocky85 14:27:42] ~
-- # umount /data/mysql         #先卸载分区
[root@rocky85 14:27:51] ~
-- # e2fsck -f /dev/myvg/mylv   #执行文件系统检查
e2fsck 1.45.6 (20-Mar-2020)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg/mylv: 41/1310720 files (0.0% non-contiguous), 126350/5242880 blocks
[root@rocky85 14:28:03] ~
-- # resize2fs /dev/myvg/mylv 5G  #按照缩容后的空间调整文件系统边缘, 调整后最好挂载查看下空间和数据
resize2fs 1.45.6 (20-Mar-2020)
Resizing the filesystem on /dev/myvg/mylv to 1310720 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 1310720 (4k) blocks long.

   
[root@rocky85 14:29:34] ~
-- # lvs
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv myvg -wi-a-----  20.00g   #逻辑卷还是20G                                                  
  root rl   -wi-ao---- <17.00g                                                    
  swap rl   -wi-ao----   2.00g                                                    
[root@rocky85 14:29:46] ~
-- # lvreduce -L 5G /dev/myvg/mylv   #逻辑卷缩减到5G
  WARNING: Reducing active logical volume to 5.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/mylv? [y/n]: y
  Size of logical volume myvg/mylv changed from 20.00 GiB (5120 extents) to 5.00 GiB (1280 extents).
  Logical volume myvg/mylv successfully resized.
[root@rocky85 14:30:13] ~
-- # lvs
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv myvg -wi-ao----   5.00g         #逻辑卷已缩减                                           
  root rl   -wi-ao---- <17.00g                                                    
  swap rl   -wi-ao----   2.00g     

[root@rocky85 14:30:29] ~
-- # mount -a               #挂载检查                             
[root@rocky85 14:30:32] ~              
-- # df -h | grep mylv
/dev/mapper/myvg-mylv  4.8G   33M  4.5G   1% /data/mysql
[root@rocky85 14:30:44] ~
-- # du -sh /data/mysql/sysconfig/
112K	/data/mysql/sysconfig/
[root@rocky85 14:30:55] ~
-- # 

⑤基于mylv生成快照,修改或删除原卷中的数据,基于快照卷还原数据。

[root@rocky85 14:30:44] ~
-- # du -sh /data/mysql/sysconfig/
112K	/data/mysql/sysconfig/

[root@rocky85 14:37:13] ~
-- # lvcreate -L 5G -s -n mylv-snapshot /dev/myvg/mylv  #创建快照  -p r创建只读快照
  Logical volume "mylv-snapshot" created.
[root@rocky85 14:38:20] ~
-- # mkdir /data/mysql-bak
[root@rocky85 14:38:30] ~
-- # mount /dev/myvg/mylv-snapshot /data/mysql-bak/     #挂载快照, 检查快照功能

[root@rocky85 14:38:54] ~
-- # du -sh /data/mysql-bak/sysconfig/
112K	/data/mysql-bak/sysconfig/
[root@rocky85 14:38:58] ~
-- # 
[root@rocky85 14:38:59] ~
-- # rm -rf /data/mysql/sysconfig/                     #删除原逻辑卷文件
[root@rocky85 14:39:11] ~
-- # du -sh /data/mysql-bak/sysconfig/                 #快照不受影响
112K	/data/mysql-bak/sysconfig/
[root@rocky85 14:39:15] ~
-- # du -sh /data/mysql/sysconfig/
du: cannot access '/data/mysql/sysconfig/': No such file or directory
[root@rocky85 14:39:22] ~
-- # 

#还原快照

[root@rocky85 15:41:37] ~
-- # umount /data/mysql        #先卸载分区
[root@rocky85 15:41:43] ~
-- # umount /data/mysql-bak 
[root@rocky85 15:41:45] ~
-- # lvconvert --merge /dev/myvg/mylv-snapshot     #还原快照
  Merging of volume myvg/mylv-snapshot started.
  myvg/mylv: Merged: 100.00%

[root@rocky85 15:42:18] ~
-- # 
[root@rocky85 15:42:18] ~
-- # mount /dev/myvg/mylv /data/mysql            #文件恢复
[root@rocky85 15:42:42] ~
-- # du -sh /data/mysql/sysconfig/
112K	/data/mysql/sysconfig/
[root@rocky85 15:42:53] ~

[root@rocky85 15:43:13] ~           #原来的快照自动删除了
-- # lvs
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv myvg -wi-ao----   5.00g                                                    
  root rl   -wi-ao---- <17.00g                                                    
  swap rl   -wi-ao----   2.00g                                                    
[root@rocky85 15:43:16] ~
-- # 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值