基础概念

进程

进程是程序在某一数据集上的一次运行活动,是系统进行资源分配和调度的进本单位,由以下组成

分配给他的内存地址空间
安全属性
线程
进程状态

进程的特性

  • 动态性:进程是程序的一次执行过程,是动态的
  • 并发性:进程可以和别的进程一起并发执行
  • 独立性:进程是能够独立运行的基本单位,也是系统执行资源分配和调度的独立单位
  • 异步性:由于进程间的相互制约,进程的执行是间断性的。
  • 结构:进程由程序、数据、进程控制块组成
  • 同个程序可以在不同的数据集上构成不同的进程得到不同的结果,但是在执行过程中程序不能发生改变

进程的状态转化

avatar

就绪:进程已经被分配到出了CPU以外所有的资源,等到获取到了就可以立即执行

执行:进程正在运行中

阻塞:正在执行的进程,由于某些条件不满足无法继续执行,于是放弃CPU处于阻塞状态

进程的切换

同步和异步

同步指一个任务的完成必须要依赖另外一个任务的时候,得等到那个被依赖的任务完成后,这个任务才能完成,要么都成功,要么都失败,两个任务的状态可以保持一致

异步指任务通知完被依赖的任务需要做什么工作后,这个任务不需要等待他,而是继续自己执行,只要自己这个任务完成就算完成了,所以异步是不可靠的序列

阻塞和非阻塞

阻塞是指运行中的进程(线程)在获得想要的结果之前,这个进程(线程)会被挂起

非阻塞指调用无法立即获得想要结果时,也不会阻塞该进程

异步操作也是可以被阻塞的,只不过他是在等待消息通知的时候被阻塞,而不是处理消息的时候被阻塞

并行与并发

并行指两者同时进行

并发指资源有限的情况下,两者交替轮流使用资源

死锁

指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程

进程类型

守护进程:与终端无关,由系统引导启动

前台进程:与终端有关

生命周期

https://www.cnblogs.com/zhangchao0515/p/5339964.html

linux中创建一个新进程的方式是使用fork函数,fork()执行一次有两个返回值,在父进程中返回值是子进程的进程号,在子进程中返回值是0

使用fork函数得到的子进程是父进程的一个复制品,它从父进程处复制了整个进程的地址空间,包括进程上下文,进程堆栈,内存信息,打开的文件描述符,信号控制设定,进程优先级,进程组号,当前工作目录,根目录,资源限制,控制终端等。而子进程所独有的只是它的进程号,资源使用和计时器等

父进程fork复制自己的地址空间创建子进程,每个子进程分配一个PID,PID和父进程的PID是子进程环境的元素,所有进程都可以创建子进程,所有进程都由初始进程创建

子进程继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码,随后子进程自己运行,通常父进程在子进程运行期间处于睡眠状态,当子进程完成发出信息退出,父进程接收子进程的信号被唤醒。子进程在退出时丢弃资源环境,其余部分称为僵尸,父进程被唤醒后清理剩余结构并继续执行自己的代码

初始进程

centos5/6:init
centos7:systemd

linux主要以四种方式创建新的进程

  • 系统初始化(前台进程负责和用户交互,后台进程与用户武馆,运行在后台并且直在需要时才唤醒的进程叫做守护进程)
  • 进程在运行中开启子进程
  • 用户的交互式请求而创建一个新进程(双击打开某exe)
  • 一个批处理作业的初始化

    进程状态

    每个CPU核心同时只能处理一个进程,在进程运行时,随着资源分配情况不同,他也会处于不同的状态

R运行状态:进程要么在运行要么在运行队列

S睡眠状态/可中断睡眠:进程在等待事件的完成

D磁盘睡眠状态/不可中断睡眠:等待IO结束

T停止状态:可通过发送SIGSTOP信号给进程来停止进程,等接收到SIGCNT信号继续运行

Z僵尸状态:通知父进程回收资源

僵尸进程:当一个子进程退出后,如果父进程没有利用wait或者waitpid来获取子进程的状态信息,那么子进程的状态描述符依旧保存在系统中

孤儿进程:如果父进程突然被中止,子进程就成为孤儿进程,将被初始进程接管

X死亡状态:这是一个返回状态,不会出现在任务列表

线程

线程是进程中最小的执行单位

这句话是什么意思?

就比如说,我们打开任务管理器,里面能看到很多进程,我们双击打开一个qq,那也是一个进程,这个运行着的qq他有很多功能,比如说看天气,群消息,好友消息等等,我们可以在看天气的时候,同时去看好友消息,他们不是同一个功能,但是执行起来不需要等一个结束了才能去执行另外一个,这个就叫多线程,再更具体一点,比如说看下面这段代码

avatar

这里提供了一个work函数,下面采用了两种调用方式:一种是多线程,一种是多进程他们的区别在于。多进程,p1和p2每一个都分配到了一份空间资源等,他们在自己各自的那份资源里面运行work,而多线程模式下,主进程拥有t1,t2两个线程,主进程占有一份资源,t1和t2不另外再去外面获取资源,而是在主进程的那份当中获取一部分来执行work。

多进程与多线程的优缺点

多进程可以使用多个内核,可以通过增加CPU来提升性能,另外可以减少线程加锁/解锁对性能的影响,每个进程互相独立,子进程崩溃也不会影响主程序的稳定性,理论上来说多进程好像会多耗很多资源,但是在linux里面,linux采用写时拷贝,可以节省一定的资源,当一个变量x在父进程中存在,父进程在创建多个子进程的时候,子进程不会每个都把这个x复制一遍,而是和父进程采用同一个内存空间的变量,当子或父进程需要改变x的值的时候,才会复制这个变量,这样父子之间变量互不影响,父子进程地址空间完全隔开,但是变量的地址可以完全相同。多进程和多线程两者开销没有显著区别,而多进程的性能明显要好于多线程

多进程具有封闭性和可再现性,多道程序设计实现了程序的并发执行和资源贡献,提高了系统效率和资源利用率

多进程的控制逻辑较为复杂,需要和主程序交互、跨进程边界,如果有大量数据传送就不太好

多进程和多线程的优缺点

在Linux下编程多用多进程编程少用多线程编程。

多线程无需跨进程边界,程序逻辑和控制比较简单,线程可以共享内存和变量等,消耗的总资源比进程少点,操作系统切换线程比在切换进程速度上要快得多。多线程一般用于IO密集型的任务

多线程比起多进程,会存在一些安全隐患,当多线程处理同一个共享变量的时候,可能A刚把这个数读出来,B对其进行了减一操作,而A不变,这样会导致数值上出现问题.为了防止这个问题我们可以对这个变量加锁,当一个对象给锁住了的时候,如果别的线程想要获取这个对象,必须等锁他的线程执行完释放后才可以,否则一直处于等待状态

多线程一个挂全完蛋,进程则互不影响

什么是多线程?如何实现多线程?

协程

协程是一种用户态的轻量级线程,由用户自己控制调度,一个线程可以拥有多个协程.一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协助运行,在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只有在明确的被要求挂起的时候才会被挂起。常用的如python的yield,await等

基本

MB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。SMB使用了NetBIOS的应用程序接口 (Application Program Interface,简称API),一般端口使用为139,445。

SMB协议

  • SMB(服务信息模块)协议是一个高层协议、它提供了在网络上的不同计算机之间共享文
    件,打印机和不同通信资料的手段
  • SMB使用NetBIOS API实现面向连接的协议,该协议为Window是客户程序和服务提供了一个
    通过虚链路按照请求——响应方式进行通信的机制
  • SMB的工作原理就是让NetBIOS与SMB协议运行在TCP/IP上,并且使用NetBIOS的名字解释
    器让Linux机器可以在Windows的网络邻居中被看到,从而在Windows的网络邻居中被看到,从而和Windows9x/NT/200X进行相互沟通,共享文件和打印机

CIFS:

  • 通用网际文件系统是微软服务器消息块协议(SMB)的增强版
  • 提供计算机用户在企业内部网和因特网上共享文件的标准方法
  • CIFS在TCP/IP运行,利用英特网上的全球域名服务系统(DNS)增强其可扩展性,同时为因
    特网上普遍存在的慢速拨号连接优化

NetBIOS协议

  • NetBIOS是Network Basic Input/Output System的简称,网络基本输入输出协议。协议,一般指能用于局域网通信的一套API,是由IBM公司开发的。主要作用,通过NetBIOS协议获得计算机名称,然后把计算机名称解析为对应的IP地址

    配置及概念

相关配置

/etc/sysconfig/samba:用于设置守护进程的启动参数。 
/etc/samba/smb.conf:主配置文件。 
/etc/samba/smbusers:用于映射Linux用户和Windows用户。 
/etc/samba/lmhosts:用于设置NetBIOS名字与IP地址的对应关系表。
/etc/pam.d/samba:Samba的PAM配置文件 
/etc/rc.d/init.d/smb:Samba的INIT启动脚本

相关工具

服务端工具: 
  /usr/bin/smbpasswd:用于设置Samba用户账号及口令 
  /usr/bin/testparm:用于检测配置文件的正确性 
  /usr/bin/smbstatus:用于查找网络中的Samba服务器 

客户端工具: 
  /usr/bin/findsmb:用于查找网络中的Samba服务器 
  /usr/bin/smbclient:Linux下的Samba客户端 
  /usr/bin/smbget:基于SMB/CIFS的类似于wget的下载工具 
  /usr/bin/smbtar:类似于tar的归档工具,用于将SMB/CIFS的共享打包备份到Linux主机

安全等级

Samba安全等级: 
  User:由本地Samba服务器负责账户验证,使用smbpasswd 设置账号(默认的安全等级) 
  Domain:账户验证账户及口令的工作由其他的Windows,或Samba域控制器负责,需要使用“password server”指令指定验证服务器 
  Ads:验证账户及口令的工作由支持Kerberos验证的Windows活动目录服务器负责。需要使用“realm”指令指定Kerberos领域 
  Share:匿名共享 
  
Samba账户及口令数据库 
1.Samba使用的账户文件/数据库是与系统账户文件分离的 
2.当设置了user的安全等级后(默认),将由本地系统对问Samba共享资源的用户进行认证 
3.用.tdb格式的口令数据库,初始情况下口令数据库文件并不存在 
4.为了创建Samba的口令数据库文件,管理员可以在添加Samba账户的同时创建它 
5.管理员可以使用smbpasswd命令配置Samba账号并设置其口令

主配置文件

avatar

实验

通过用户名设置共享目录

共享销售部 /xsb 这个目录,只有知道用户名和密码的同时可以看这个共享,在/xsb目录中存放销售部重
要的数据。需要将security设置为user级别,这样可以启用samba身份验证机制,然后在共享目录 /xsb
下设置valid user 字段,配置只允许销售部员工能访问这个共享目录


[root@server1 ~]# vim /etc/samba/smb.conf 
[global]
    workgroup = SAMBA 
    security = user 
    passdb backend = smbpasswd
    smb passwd file = /etc/samba/smbpasswd
    # passdb backend = tdbsam

[root@server1 ~]# systemctl restart smb.service
重启后,会自动生成/etc/samba/smbpasswd文件

添加用户和组,该用户禁止登录,不生成登录目录

[root@server1 ~]# groupadd xsb
[root@server1 ~]# useradd -g xsb -M -s /sbin/nologin xsb001
[root@server1 ~]# useradd -g xsb -M -s /sbin/nologin xsb002
[root@server1 ~]# useradd jsb001

添加对应的samba账户

[root@server1 ~]# smbpasswd -a xsb001
New SMB password:
Retype new SMB password:
Added user xsb001.
[root@server1 ~]# smbpasswd -a xsb002
New SMB password:
Retype new SMB password:
Added user xsb002.

修改配置文件,重启服务

[root@server1 ~]# mkdir /xsb [root@server1 ~]# cp /etc/hosts /xsb [root@server1 ~]# vim /etc/samba/smb.conf 
[xsb] 
    comment = Xsb Data 
    path = /xsb 
    valid user = xsb01,xsb02


[root@server1 ~]# systemctl restart smb.service
[root@server1 ~]# systemctl restart nmb.service
#nmb是做ip与主机名映射用的

检查139和445

[root@server1 ~]# ss -tanl
State       Recv-Q Send-Q Local Address:Port               Peer Address:Port
LISTEN      0      50                *:139                           *:*
LISTEN      0      128               *:22                            *:*
LISTEN      0      100       127.0.0.1:25                            *:*
LISTEN      0      50                *:445                           *:*
LISTEN      0      50               :::139                          :::*
LISTEN      0      128              :::22                           :::*
LISTEN      0      100             ::1:25                           :::*
LISTEN      0      50               :::445                          :::*

验证

linux

[root@server1 ~]# yum install samba-client -y


[root@server1 ~]# smbclient -L //192.168.226.148/xsb -U xsb001
Enter SAMBA\xsb001's password:

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        xsb             Disk      Xsb Data
        IPC$            IPC       IPC Service (Samba 4.10.16)
        xsb001          Disk      Home Directories
Reconnecting with SMB1 for workgroup listing.

windows

win+r 输入\\ip

dos窗口用net user * /delete可以清空用户缓存信息

avatar

巨慢无比....一时半会儿不出来别急

挂载

[root@server1 ~]# mkdir /xsbdata
[root@server1 ~]# yum install cifs-utils -y
vim auth.smb

username=某用户
password=某用户smb密码

vim /etc/fstab
//ip/xsb /xsbdata cifs defaults,credentials=/root/auth.smb 0 0

[root@server1 ~]# mount -a
[root@server1 ~]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
/dev/mapper/centos-root 17811456 1267400 16544056    8% /
devtmpfs                  485792       0   485792    0% /dev
tmpfs                     497960       0   497960    0% /dev/shm
tmpfs                     497960    7852   490108    2% /run
tmpfs                     497960       0   497960    0% /sys/fs/cgroup
/dev/sda1                1038336  135376   902960   14% /boot
tmpfs                      99596       0    99596    0% /run/user/0
//192.168.226.148/xsb   17811456 1267400 16544056    8% /xsbdata

不同账户访问不同目录

创建三个无家目录不能登陆的用户

[root@server1 ~]# useradd -s /sbin/nologin -r smb1
[root@server1 ~]# useradd -s /sbin/nologin -r smb2
[root@server1 ~]# useradd -s /sbin/nologin -r smb3
[root@server1 ~]# smbpasswd -a smb1
New SMB password:
Retype new SMB password:
Added user smb1.
[root@server1 ~]# smbpasswd -a smb2
New SMB password:
Retype new SMB password:
Added user smb2.
[root@server1 ~]# smbpasswd -a smb3
New SMB password:
Retype new SMB password:
Added user smb3.

查看smb账号

[root@server1 ~]# pdbedit -L
xsb001:1000:
xsb002:1001:
smb1:997:
smb2:996:
smb3:995:

修改配置文件

[root@server1 ~]# vim /etc/samba/smb.conf
在workgroup下加一行
config file= /etc/samba/conf.d/%U 说明:%U表示用户名 

[share] #共享文件夹在最后添加 
Path=/data/dir #指定分享文件夹的路径 
Read only= NO #不仅仅是只读 
Guest ok = yes 
write list=@admin 

创建目录,对smb1和smb2创建单独的配置文件


[root@server1 ~]# mkdir /data
[root@server1 ~]# mkdir /data/dir
[root@server1 ~]# mkdir /data/dir1
[root@server1 ~]# mkdir /data/dir2
[root@server1 ~]# mkdir /data/dir/share.txt
[root@server1 ~]# mkdir /data/dir1/smb1.txt
[root@server1 ~]# mkdir /data/dir2/smb2.txt


[root@server1 ~]# mkdir /etc/samba/conf.d

[root@server1 ~]# vim /etc/samba/conf.d/smb1
[share] 
Path=/data/dir1
Read only= NO 等价于writable = yes 
Create mask=0644

[root@server1 conf.d]# vim /etc/samba/conf.d/smb2
[share] 
path=/data/dir2

[root@server1 conf.d]# systemctl restart smb nmb

在客户机上测试

[root@server2 ~]# yum -y install samba-client samba-common cifs-rtils samba

[root@server2 ~]# smbclient //192.168.226.148/share -U smb1%123
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Tue Jan 18 15:41:33 2022
  ..                                  D        0  Tue Jan 18 15:41:15 2022
  smb1.txt                            D        0  Tue Jan 18 15:41:33 2022

                17811456 blocks of size 1024. 16543616 blocks available
smb: \> exit
[root@server2 ~]# smbclient //192.168.226.148/share -U smb2%123
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Tue Jan 18 15:41:38 2022
  ..                                  D        0  Tue Jan 18 15:41:15 2022
  smb2.txt                            D        0  Tue Jan 18 15:41:38 2022

                17811456 blocks of size 1024. 16543616 blocks available
smb: \> exit
[root@server2 ~]# smbclient //192.168.226.148/share -U smb3%123
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Tue Jan 18 15:41:24 2022
  ..                                  D        0  Tue Jan 18 15:41:15 2022
  share.txt                           D        0  Tue Jan 18 15:41:24 2022

                17811456 blocks of size 1024. 16543596 blocks available
smb: \> exit

基础

NFS,网络文件系统,允许网络中的计算机之间通过网络共享资源,当将NFS主机分享的目录挂载到本地时,本地可以读写NFS服务器上的文件。

nfs本身没有网络传输的功能,而是基于远程过程调用协议实现

RPC:远程过程调用,当两台异地服务器AB,A想要调用B上应用提供的函数,由于不在同一个内存空间,不能直接调用,而是要通过网络来表达调用的语义和传达调用的数据。他可为遵从RPC协议应用层协议提供端口注册功能,工作于会话层,使用111端口来监听客户端的请求

  • 基于RPC的服务在启动时向portmapper注册端口
  • 客户端联系服务端portmapper询问端口号
  • portmapper告诉客户端端口号
  • 客户端访问该端口
  • 服务端响应请求

avatar

实验

挂载

关防火墙和selinux
webserver端安装web服务

yum install httpd -y
systemctl start httpd

NAS端

yum install -y nfs-utils
mkdir /webdata
vim /webdata/index.html

vim /etc/exports
/webdata ip/24(rw)

systemctl start nfs-server.service
systemctl enable nfs-server.service

web端查看共享

yum install -y nfs-untils
showmount -e ip

web挂载

mount -t nfs ip:/webdata /var/www/html
df

在浏览器测试访问即可

自动挂载

服务器


[root@server1 ~]# mkdir /data
[root@server1 ~]# useradd -d /data/user user
[root@server1 ~]# id user
uid=1000(user) gid=1000(user) 组=1000(user)
[root@server1 ~]# yum install -y nfs-utils.x86_64


[root@server1 ~]# vim /etc/exports.d/test.exports
/data/user  *(rw,anonuid=1000,anongid=1000,all_squash)


[root@server1 ~]# systemctl restart nfs-server.service
[root@server1 ~]# cd /data/user/
[root@server1 user]# touch 123

客户端

[root@server1 ~]# yum install nfs-utils.x86_64

[root@server1 ~]# showmount -e 192.168.226.148
Export list for 192.168.226.148:
/data/user *
[root@server1 ~]# mkdir /data
[root@server1 ~]# mount -t nfs 192.168.226.148:/data/user /data
[root@server1 ~]# df -Th
文件系统                   类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root    xfs        17G  1.2G   16G    7% /
devtmpfs                   devtmpfs  475M     0  475M    0% /dev
tmpfs                      tmpfs     487M     0  487M    0% /dev/shm
tmpfs                      tmpfs     487M  7.7M  479M    2% /run
tmpfs                      tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/sda1                  xfs      1014M  133M  882M   14% /boot
tmpfs                      tmpfs      98M     0   98M    0% /run/user/0
192.168.226.148:/data/user nfs4       17G  1.2G   16G    7% /data
[root@server1 ~]# umount /data
[root@server1 ~]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
/dev/mapper/centos-root 17811456 1232320 16579136    7% /
devtmpfs                  485792       0   485792    0% /dev
tmpfs                     497960       0   497960    0% /dev/shm
tmpfs                     497960    7816   490144    2% /run
tmpfs                     497960       0   497960    0% /sys/fs/cgroup
/dev/sda1                1038336  135376   902960   14% /boot
tmpfs                      99596       0    99596    0% /run/user/0
[root@server1 ~]# yum install autofs


[root@server1 ~]# vim /etc/auto.master
/data /etc/auto.home

[root@server1 ~]# vim /etc/auto.home
*  -fstype=nfs 192.168.226.148:/data/user


[root@server1 ~]# systemctl restart autofs
[root@server1 ~]# useradd -d /data/user -u 1000 user
useradd:警告:此主目录已经存在。
不从 skel 目录里向其中复制任何文件。
[root@server1 ~]# ls /data/
user
[root@server1 ~]# su - user
[user@server1 ~]$ ls
123

rpm

常用指令

-a:查询所有安装包
‐f:查询指定的文件由哪个程序包安装生成
-h, --hash   软件包安装的时候列出哈希标记 
‐i:information
-v, --verbose    提供更多的详细信息输出
‐l:查看指定的程序文件安装后生成的所有文件
安装RPMs
rpm -ivh packagename
升级RPMs
rpm -Uvh packagename
移除RPMS
rpm -ev packagename
查看指定包是否安装
rpm -q 包名
rpm -qa | grep 包名
查找指定包安装的文件
rpm -ql 包名
查询包的info
rpm -qi 包名

源码包

  1. ./configure [--]

    1. 指定安装路径,例如 --prefix=/usr/local/nginx
    2. 启用或禁用某些功能,例如 --enable-ssl 、 --disable-filter 、 --with- http_ssl_module
    3. 和其他软件关联,例如 --with-pcre
    4. 检查安装环境
  2. make,可以用-j用多颗cpu编译
  3. make install

yum

基于rpm包管理,能够从指定服务器自动下载rpm包并安装,自动解决依赖关系

常用指令

查看可用仓库

yum repolist #查看默认的源
yum clean all #清空缓存及其他文件
yum makecache #重建缓存

软件包安装

yum -y install 包名/本地包名/url #-y是默认确认的意思,可以不加
yum -y reinstall 包名
yum update 包名 #不加包名就是更新所有软件
yum list #列出所有可安装的软件清单
yum list/info 包名 #查询包是否群在
yum remove 包名#删除
yum search 指令名 #查找软件包
yum grouplist #安装环境,如图形桌面等

历史

yum history #查看历史记录
yum history info id #列出某次详细详细
yum history undo id #撤销某次更改

国内yum源:

163:http://mirrors.163.com/.help/centos.html
中科大:https://mirrors.ustc.edu.cn/help/centos.html
阿里:https://developer.aliyun.com/mirror/
清华:https://mirror.tuna.tsinghua.edu.cn/help/centos/

实验

yum换源

查看默认源

[root@server1 ~]# yum repolist
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.njupt.edu.cn
 * extras: mirrors.cn99.com
 * updates: mirrors.cn99.com
源标识                                  源名称                                   状态
!base/7/x86_64                          CentOS-7 - Base                          10,072
!extras/7/x86_64                        CentOS-7 - Extras                           500
!updates/7/x86_64                       CentOS-7 - Updates                        3,252

下载对应源的CentOS-Base.repo,最后再生成缓存

[root@server1 yum.repos.d]# yum makecache
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
base                                                            | 3.6 kB  00:00:00
extras                                                          | 2.9 kB  00:00:00
updates                                                         | 2.9 kB  00:00:00
(1/7): extras/7/x86_64/other_db                                 | 145 kB  00:00:01
(2/7): extras/7/x86_64/filelists_db                             | 259 kB  00:00:01
(3/7): base/7/x86_64/other_db                                   | 2.6 MB  00:00:05
(4/7): base/7/x86_64/filelists_db                               | 7.2 MB  00:00:08
(5/7): updates/7/x86_64/filelists_db                            | 7.0 MB  00:00:09
(6/7): updates/7/x86_64/other_db                                | 918 kB  00:00:00
(7/7): updates/7/x86_64/primary_db                              |  13 MB  00:00:09
元数据缓存已建立

通过ftp提供update源

配置防火墙、关selinux、准备FTP

 firewall-cmd --permanent --add-service=ftp
 firewall-cmd --reload 12

 setenforce 0
 sed -i "s/=enforcing/=disabled/g" /etc/sysconfig/selinux 12

 yum -y install vsftpd
 systemctl start vsftpd
 sysemctl enable vsftpd
#开启yum缓存
vim /etc/yum.conf
keepcache=1

yum update -y

mkdir /var/ftp/update

find /var/cache/yum/x86_64/7/ -iname "*.rpm" |xargs -i  cp {} /var/ftp/update/

yum -y install createrepo
#创建软件仓库
createrepo /var/ftp/update

avatar
avatar

RAID

基础概念

RAID0

无冗余,至少需要两块
avatar

RAID1

使用两块磁盘呈现完全镜像,拥有容错能力,成本高
avatar

RAID5

校验数据分布在整列的所有磁盘上,有扩展性,当一块磁盘损坏时,可以根据别的同一条带上的其他数据块和对应的校验数据来重建损坏的数据,是较常见的数据保护方案
avatar

RAID10&RAID01

avatar

实验

avatar

RAID10

添加四块磁盘
avatar

安装mdadm

[root@server1 ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: partition table exists on /dev/sdb
mdadm: partition table exists on /dev/sdb but will be lost or
       meaningless after creating array
mdadm: partition table exists on /dev/sdc
mdadm: partition table exists on /dev/sdc but will be lost or
       meaningless after creating array
mdadm: partition table exists on /dev/sdd
mdadm: partition table exists on /dev/sdd but will be lost or
       meaningless after creating array
mdadm: partition table exists on /dev/sde
mdadm: partition table exists on /dev/sde but will be lost or
       meaningless after creating array
mdadm: size set to 20954112K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.


# 格式化
mkfs.ext4 /dev/md0

#挂载

[root@server1 ~]# mkdir /raid10
[root@server1 ~]# mount /dev/md0 /raid10/
[root@server1 ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  1.2G   16G    7% /
devtmpfs                devtmpfs  475M     0  475M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  7.7M  479M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  133M  882M   14% /boot
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0
/dev/md0                ext4       40G   49M   38G    1% /raid10

# 查看挂载信息,写入文件永久挂载
[root@server1 ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jan 14 15:10:31 2022
        Raid Level : raid10
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Fri Jan 14 15:13:28 2022
             State : clean
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

              Name : server1:0  (local to host server1)
              UUID : 3d044cfd:cfce3ec6:bd588e7a:3ef0a55e
            Events : 27

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync set-A   /dev/sdb
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       3       8       64        3      active sync set-B   /dev/sde


echo "/dev/md0 /rain10 ext4 defaults 0 0" >> /etc/fstab

损坏及修复

# 模拟损坏
[root@server1 ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@server1 ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jan 14 15:10:31 2022
        Raid Level : raid10
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Fri Jan 14 15:17:27 2022
             State : clean, degraded
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 1
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

              Name : server1:0  (local to host server1)
              UUID : 3d044cfd:cfce3ec6:bd588e7a:3ef0a55e
            Events : 29

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       3       8       64        3      active sync set-B   /dev/sde

       0       8       16        -      faulty   /dev/sdb


# 假装坏哩,买了新的盘关机换好后重启,然后我们把更换的盘重新挂载上去

[root@server1 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE   MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part   /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm    /
  └─centos-swap 253:1    0    2G  0 lvm    [SWAP]
sdb               8:16   0   20G  0 disk
sdc               8:32   0   20G  0 disk
└─md0             9:0    0   40G  0 raid10 /rain10
sdd               8:48   0   20G  0 disk
└─md0             9:0    0   40G  0 raid10 /rain10
sde               8:64   0   20G  0 disk
└─md0             9:0    0   40G  0 raid10 /rain10
sr0              11:0    1  918M  0 rom
[root@server1 ~]# umount /dev/md0
[root@server1 ~]# mdadm /dev/md0 -a /dev/sdb
mdadm: added /dev/sdb
[root@server1 ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Jan 14 15:10:31 2022
        Raid Level : raid10
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Fri Jan 14 15:23:16 2022
             State : clean, degraded, recovering
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 1

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 16% complete

              Name : server1:0  (local to host server1)
              UUID : 3d044cfd:cfce3ec6:bd588e7a:3ef0a55e
            Events : 39

    Number   Major   Minor   RaidDevice State
       4       8       16        0      spare rebuilding   /dev/sdb
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       3       8       64        3      active sync set-B   /dev/sde

raid5+备份

创建RAID5至少要三块硬盘,外加一块备份硬盘,一共4块

[root@server1 ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

[root@server1 ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Jan 16 08:57:35 2022
        Raid Level : raid5
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Sun Jan 16 08:58:34 2022
             State : clean, degraded, recovering
    Active Devices : 2
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 2

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 61% complete

              Name : server1:0  (local to host server1)
              UUID : 181d0cf3:6dbae3e6:d6ab8f42:2653f86c
            Events : 10

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      spare rebuilding   /dev/sdd

       3       8       64        -      spare   /dev/sde

[root@server1 ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477056 blocks
523852 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624

Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

# 注意我此处用的是临时挂载,长期用fstab
[root@server1 ~]# mkdir /mnt/raid5
[root@server1 ~]# mount /dev/md0 /mnt/raid5/

模拟坏了一块的情形

[root@server1 ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@server1 ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Jan 16 08:57:35 2022
        Raid Level : raid5
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Sun Jan 16 09:02:57 2022
             State : clean, degraded, recovering
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 1
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 24% complete

              Name : server1:0  (local to host server1)
              UUID : 181d0cf3:6dbae3e6:d6ab8f42:2653f86c
            Events : 25

    Number   Major   Minor   RaidDevice State
       3       8       64        0      spare rebuilding   /dev/sde
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd

       0       8       16        -      faulty   /dev/sdb

LVM

avatar

avatar

物理卷:物理磁盘\分区\磁盘整列

卷组:由物理卷构成,一个卷组可以包含多个物理卷,并且创建后依然可以向其中添加物理卷

逻辑卷:在卷组上利用空闲资源建立起来的卷组,是一种虚拟磁盘

案例

创建逻辑卷、扩容逻辑卷、缩容逻辑卷、拍快照再恢复快照、删除逻辑卷

创建

添加两块硬盘,让他支持LVM技术

[root@server1 ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
[root@server1 ~]# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created.

把两块硬盘打包成一个卷组,或者使用分区也行,但是不能格式化

[root@server1 ~]# vgcreate vg1 /dev/sdb /dev/sdc
  Volume group "vg1" successfully created
[root@server1 ~]# vgdisplay
  --- Volume group ---
  VG Name               centos
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <19.00 GiB
  PE Size               4.00 MiB
  Total PE              4863
  Alloc PE / Size       4863 / <19.00 GiB
  Free  PE / Size       0 / 0
  VG UUID               zyNdps-Jtez-2bvl-LvtC-8EKc-GN8U-a5hEPd

  --- Volume group ---
  VG Name               vg1
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       0 / 0
  Free  PE / Size       10238 / 39.99 GiB
  VG UUID               EYo89p-6UU4-vnMZ-mPYa-uh6h-tatV-NCK50L

切割逻辑卷设备

切割时有两种选择:

  1. -L,以容量为单位,如-L 100M
  2. -l,以基本单元个数为单位,一个基本单元默认4M
[root@server1 ~]# lvcreate -n v1 -L 150M vg1
  Rounding up size to full physical extent 152.00 MiB
  Logical volume "v1" created.
[root@server1 ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                EcfqJv-Y3c0-ZWpI-D51M-CrsE-zyll-p0QA9R
  LV Write Access        read/write
  LV Creation host, time localhost, 2022-01-12 10:04:09 +0800
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                LF6tdh-zsUY-iWK3-I1FB-DKkS-Xu4S-hdc4st
  LV Write Access        read/write
  LV Creation host, time localhost, 2022-01-12 10:04:10 +0800
  LV Status              available
  # open                 1
  LV Size                <17.00 GiB
  Current LE             4351
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/vg1/v1
  LV Name                v1
  VG Name                vg1
  LV UUID                11j9V3-Ho6W-cmrr-23EM-PWJh-Qww5-adyf2u
  LV Write Access        read/write
  LV Creation host, time server1, 2022-01-14 18:38:46 +0800
  LV Status              available
  # open                 0
  LV Size                152.00 MiB
  Current LE             38
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

格式化逻辑卷,挂载

[root@server1 ~]# mkfs.ext4 /dev/vg
vg1/         vga_arbiter
[root@server1 ~]# mkfs.ext4 /dev/vg1/v1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
38912 inodes, 155648 blocks
7782 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=33816576
19 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729

Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

[root@server1 mnt]# mount /dev/vg1/v1 v_1
[root@server1 mnt]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  1.2G   16G    7% /
devtmpfs                devtmpfs  475M     0  475M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  7.7M  479M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  133M  882M   14% /boot
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0
/dev/mapper/vg1-v1      ext4      144M  1.6M  132M    2% /mnt/v_1

扩容

Linux e2fsck命令用于检查使用 Linux ext2 档案系统的 partition 是否正常工作。

-f强制检查

resize2fs:调整没有挂载的ext系列文件系统的大小

#卸载,扩容
umount /dev/vg1/v1
[root@server1 mnt]# lvextend -L 300M /dev/vg1/v1
  Size of logical volume vg1/v1 changed from 152.00 MiB (38 extents) to 300.00 MiB (75 extents).
  Logical volume vg1/v1 successfully resized.

#检查完整性,调整文件系统大小
[root@server1 mnt]# e2fsck -f /dev/vg1/v1
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/vg1/v1: 11/38912 files (0.0% non-contiguous), 10567/155648 blocks
[root@server1 mnt]# resize2fs /dev/vg1/v1
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg1/v1 to 307200 (1k) blocks.
The filesystem on /dev/vg1/v1 is now 307200 blocks long.

#重新挂载

[root@server1 mnt]# mount /dev/vg1/v1 /
bin/   dev/   home/  lib64/ mnt/   proc/  run/   srv/   tmp/   var/
boot/  etc/   lib/   media/ opt/   root/  sbin/  sys/   usr/
[root@server1 mnt]# mount /dev/vg1/v1 v_1
[root@server1 mnt]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  1.2G   16G    7% /
devtmpfs                devtmpfs  475M     0  475M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  7.7M  479M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  133M  882M   14% /boot
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0
/dev/mapper/vg1-v1      ext4      287M  2.1M  266M    1% /mnt/v_1

缩小

[root@server1 mnt]# umount /dev/vg1/v1
[root@server1 mnt]# e2fsck -f /dev/vg1/v1
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/vg1/v1: 11/77824 files (0.0% non-contiguous), 15987/307200 blocks
[root@server1 mnt]# resize2fs /dev/vg1/v1 150M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg1/v1 to 153600 (1k) blocks.
The filesystem on /dev/vg1/v1 is now 153600 blocks long.

[root@server1 mnt]# lvreduce -L 150M /dev/vg1/v1
  Rounding size to boundary between physical extents: 152.00 MiB.
  WARNING: Reducing active logical volume to 152.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg1/v1? [y/n]: y
  Size of logical volume vg1/v1 changed from 300.00 MiB (75 extents) to 152.00 MiB (38 extents).
  Logical volume vg1/v1 successfully resized.
[root@server1 mnt]# mount /dev/vg1/v1 v_1
[root@server1 mnt]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  1.2G   16G    7% /
devtmpfs                devtmpfs  475M     0  475M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  7.7M  479M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  133M  882M   14% /boot
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0
/dev/mapper/vg1-v1      ext4      142M  1.6M  130M    2% /mnt/v_1

快照

写个文件作对比

[root@server1 mnt]# echo "hello world" >> v_1/1.txt
[root@server1 mnt]# ls -l v_1/
总用量 14
-rw-r--r--. 1 root root    12 1月  14 19:33 1.txt
drwx------. 2 root root 12288 1月  14 18:40 lost+found

-s创建快照

[root@server1 mnt]# lvcreate -L 150M -s -n KZ1 /dev/vg1/v1
  Rounding up size to full physical extent 152.00 MiB
  Logical volume "KZ1" created.
[root@server1 mnt]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                EcfqJv-Y3c0-ZWpI-D51M-CrsE-zyll-p0QA9R
  LV Write Access        read/write
  LV Creation host, time localhost, 2022-01-12 10:04:09 +0800
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                LF6tdh-zsUY-iWK3-I1FB-DKkS-Xu4S-hdc4st
  LV Write Access        read/write
  LV Creation host, time localhost, 2022-01-12 10:04:10 +0800
  LV Status              available
  # open                 1
  LV Size                <17.00 GiB
  Current LE             4351
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/vg1/v1
  LV Name                v1
  VG Name                vg1
  LV UUID                11j9V3-Ho6W-cmrr-23EM-PWJh-Qww5-adyf2u
  LV Write Access        read/write
  LV Creation host, time server1, 2022-01-14 18:38:46 +0800
  LV snapshot status     source of
                         KZ1 [active]
  LV Status              available
  # open                 1
  LV Size                152.00 MiB
  Current LE             38
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/vg1/KZ1
  LV Name                KZ1
  VG Name                vg1
  LV UUID                XYTTPp-WpPS-F9Hq-qqzD-xUPJ-adpa-kkug2S
  LV Write Access        read/write
  LV Creation host, time server1, 2022-01-14 19:45:49 +0800
  LV snapshot status     active destination for v1
  LV Status              available
  # open                 0
  LV Size                152.00 MiB
  Current LE             38
  COW-table size         152.00 MiB
  COW-table LE           38
  Allocated to snapshot  0.01%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:5

写入个大文件,发现快照卷的存储空间占用率上升了

[root@server1 mnt]# dd if=/dev/zero of=v_1/t1  count=1 bs=100M
记录了1+0 的读入
记录了1+0 的写出
104857600字节(105 MB)已复制,2.14811 秒,48.8 MB/秒
[root@server1 mnt]# lvdisplay

  --- Logical volume ---
  LV Path                /dev/vg1/KZ1
  LV Name                KZ1
  VG Name                vg1
  LV UUID                XYTTPp-WpPS-F9Hq-qqzD-xUPJ-adpa-kkug2S
  LV Write Access        read/write
  LV Creation host, time server1, 2022-01-14 19:45:49 +0800
  LV snapshot status     active destination for v1
  LV Status              available
  # open                 0
  LV Size                152.00 MiB
  Current LE             38
  COW-table size         152.00 MiB
  COW-table LE           38
  Allocated to snapshot  66.08%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:5

恢复快照后,快照卷会自动删除,查看目录发现已经恢复原样

[root@server1 mnt]# umount /dev/vg1/v1
[root@server1 mnt]# lvconvert --merge /dev/vg1/KZ1
  Merging of volume vg1/KZ1 started.
  vg1/v1: Merged: 82.16%
  vg1/v1: Merged: 100.00%
[root@server1 mnt]# mount /dev/vg1/v1
[root@server1 mnt]# mount /dev/vg1/v1 v_1/
[root@server1 mnt]# ls v_1/
1.txt  lost+found

为何对原逻辑卷进行修改后快照占有会上升?因为这里采用的是写实拷贝技术,系统在创建快照的时候并不会直接把目标给复制一份,而是先放一个空的,也就是我们一开始看到快照占有非常小的原因,当数据发生修改时,快照才会记录修改部分的原始数据,当恢复快照时,系统会把快照和目标没有修改的部分相结合,得到目标拍摄快照时的状态

删除逻辑卷

[root@server1 mnt]# umount /dev/vg1/v1
[root@server1 mnt]# lvremove /dev/vg1/v1
Do you really want to remove active logical volume vg1/v1? [y/n]: y
  Logical volume "v1" successfully removed
[root@server1 mnt]# vgremove vg1
  Volume group "vg1" successfully removed
[root@server1 mnt]# pvremove /dev/sdb /dev/sdc
  Labels on physical volume "/dev/sdb" successfully wiped.
  Labels on physical volume "/dev/sdc" successfully wiped.