|
28、LVM2详解及until
2021年09月17日 |
|
28.1 LVM Logical Volume Manager,Version: 2 28.1.1 DM和MD cat /proc/filesystems : 查看当前内核所支持文件系统类型 RAID: 独立冗余磁盘阵列 Linux:硬件,软件 /dev/md# Linux中两种不同的设备类型 MD: Multi Device, 多设备 MD, DM /dev/md# meta device DM: Device Mapper,将一个或多个底层块设备组织成一个逻辑设备的模块 逻辑设备 RAID, LVM2(逻辑卷) DM: 通常用于LVM2 /dev/dm-# 组件: 快照:将要改变的数据进行备份,实现数据的备份(数据备份:避免因为误操作或者文件删除的情况造成的损失) 多路径 物理卷(PE)-》卷组(VG)-》逻辑卷(LE) ![]() 28.2 PV,VG管理 28.2.1 PV管理工具 pvs:简要pv信息展示 pvdisplay:显示pv的详细信息 pvcreate /dev/DEVICE:创建PV -v 显示创建过程 pvmove:pv移除,在vgreduce之前要先移除 [root@localhost ~]# pvs /dev/md0: read failed after 0 of 4096 at 0: Input/output error PV VG Fmt Attr PSize PFree /dev/sdb2 centos lvm2 a– <99.00g 4.00m [root@localhost ~]# pvdisplay /dev/md0: read failed after 0 of 4096 at 0: Input/output error — Physical volume — PV Name /dev/sdb2 VG Name centos PV Size <99.00 GiB / not usable 3.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 25343 Free PE 1 Allocated PE 25342 PV UUID 0R0BFP-witm-SfMZ-d9an-26rT-JDtg-XzwGqy [root@localhost ~]# 28.2.2 VG管理工具 vgcreate VG_NAME /PATH/TO/PV:创建vg -v 显示过程 -s #: PE大小,默认为4MB vgs:简要vg信息展示 vgdisplay:显示pv的详细信息 vgextend:扩展 vgreduce:vg缩减 vgremove:删除vg 28.3 lv逻辑卷配置 28.3.1 LV管理工具 lvs:简要lv信息展示 lvdisplay:显示lv的详细信息 lvcreate -n LV_NAME -L #[mMgGtT] VG_NAME:创建lv -n:指明逻辑卷名称 -L:指定大小 -l:指定逻辑盘区的数量 lvremove:删除逻辑卷 创建分区:创建物理边界 创建文件系统:创建逻辑边界(紧贴着物理边界) 28.3.2 扩展逻辑卷; lvextend:扩展逻辑卷物理边界 -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME +可带可不带,不带的话代表的是扩展的目标大小 resize2fs:扩展文件系统边界(不指定大小则为使用分区所有大小) resize2fs -p /PATH/TO/LV 28.3.3 缩减逻辑卷; 注意:1、不能在线缩减,必须先卸载; 2、确保缩减后的空间大小依然能存储原有的所有数据; 3、在缩减之前应该先强行检查文件,以确保文件系统处于一至性状态; 操作过程: df -lh umount e2fsck -f resize2fs:缩减文件系统边界 resize2fs /PATH/TO/PV 3G lvreduce -L [-]# /PATH/TO/LV(缩减逻辑卷物理边界) mount重新挂载 [root@localhost ~]# umount /test [root@localhost ~]# mount /test mount: cant find /test in /etc/fstab [root@localhost ~]# mount /dev/mypv/mvvg /test mount: special device /dev/mypv/mvvg does not exist [root@localhost ~]# mount /dev/mypv/myvg /test mount: special device /dev/mypv/myvg does not exist [root@localhost ~]# mount /dev/myvg/mylv /test [root@localhost ~]# resize resize2fs resizecons resizepart [root@localhost ~]# resize resize2fs resizecons resizepart [root@localhost ~]# resize2fs /dev/myvg/mylv resize2fs 1.42.9 (28-Dec-2013) Filesystem at /dev/myvg/mylv is mounted on /test; on-line resizing required old_desc_blocks = 16, new_desc_blocks = 40 The filesystem on /dev/myvg/mylv is now 5242880 blocks long. [root@localhost ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 50G 2.6G 48G 6% / devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 8.7M 3.9G 1% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda1 1014M 143M 872M 15% /boot /dev/mapper/centos-home 42G 33M 42G 1% /home tmpfs 781M 0 781M 0% /run/user/0 /dev/mapper/myvg-mylv 4.9G 3.2M 4.7G 1% /test [root@localhost ~]# umount /dev/myvg/mylv [root@localhost ~]# e2fsck -f /dev/myvg/mylv e2fsck 1.42.9 (28-Dec-2013) 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 MYLV: 12/327680 files (0.0% non-contiguous), 119806/5242880 blocks [root@localhost ~]# resize2fs /dev/myvg/mylv 3G resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/myvg/mylv to 3145728 (1k) blocks. The filesystem on /dev/myvg/mylv is now 3145728 blocks long. [root@localhost ~]# lvreduce /dev/myvg/mylv 3G No command with matching syntax recognised. Run ‘lvreduce –help’ for more information. Correct command syntax is: lvreduce -L|–size [-]Size[m|UNIT] LV [root@localhost ~]# lvreduce /dev/myvg/mylv -L 3G WARNING: Reducing active logical volume to 3.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 5.00 GiB (1280 extents) to 3.00 GiB (768 extents). Logical volume myvg/mylv successfully resized. [root@localhost ~]# mount /dev/myvg/mylv /test [root@localhost ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 50G 2.6G 48G 6% / devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 8.7M 3.9G 1% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda1 1014M 143M 872M 15% /boot /dev/mapper/centos-home 42G 33M 42G 1% /home tmpfs 781M 0 781M 0% /run/user/0 /dev/mapper/myvg-mylv 3.0G 3.2M 2.8G 1% /test [root@localhost ~]# 28.3.4 快照卷(snapshot) 1、生命周期为整个数据时长;在这段时长内,数据的增长量不能超出快照卷大小; 2、快照卷应该是只读的; 3、跟原卷在同一卷组内; 创建过程 lvcreate -s:创建快照卷 -p r|w:指定权限 lvcreate -L # -n SLV_NAME -p r /PATH/TO/LV 练习1:创建一个至少有两个PV组成的大小为20G的名为testvg的VG,要求PE大小为16MB,而后在卷组中创建大小为5G逻辑卷testlv,挂载至、users目录 [root@localhost ~]# pvcreate /dev/sdc Physical volume “/dev/sdc” successfully created. [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a– <99.00g 4.00m /dev/sdb lvm2 — 20.00g 20.00g /dev/sdc lvm2 — 20.00g 20.00g [root@localhost ~]# vgcreate vg1 -s 16 /dev/sdb Volume group “vg1” successfully created [root@localhost ~]# vgextend vg1 -s 16 /dev/sdc vgextend: invalid option — ‘s’ Error during parsing of command line. [root@localhost ~]# vgextend vg1 /dev/sdc Volume group “vg1” successfully extended [root@localhost ~]# vgdisplay — Volume group — VG Name centos System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 3 Open LV 3 Max PV 0 Cur PV 1 Act PV 1 VG Size <99.00 GiB PE Size 4.00 MiB Total PE 25343 Alloc PE / Size 25342 / 98.99 GiB Free PE / Size 1 / 4.00 MiB VG UUID fE3YOB-nPtn-bYfY-RZX4-moqi-3YMu-6deJXo — Volume group — VG Name vg1 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 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.97 GiB PE Size 16.00 MiB Total PE 2558 Alloc PE / Size 0 / 0 Free PE / Size 2558 / <39.97 GiB VG UUID Qf0Sfr-gRzG-vmmJ-7mTK-NUln-LlRj-U2IYJ2 [root@localhost ~]# lvcreate -n testlv -L 5G vg1 WARNING: ext4 signature detected on /dev/vg1/testlv at offset 1080. Wipe it? [y/n]: y Wiping ext4 signature on /dev/vg1/testlv. Logical volume “testlv” created. [root@localhost ~]# mkdir /users [root@localhost ~]# mke2fs -t ext4 /dev/vg1/testlv mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 327680 inodes, 1310720 blocks 65536 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=1342177280 40 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 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done [root@localhost ~]# mount /dev/vg1/testlv /users [root@localhost ~]# mount sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=3985976k,nr_inodes=996494,mode=755) securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000) tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755) tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755) cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd) pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime) cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event) cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio,net_cls) cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu) cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids) cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer) cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio) cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory) cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb) cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices) cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset) configfs on /sys/kernel/config type configfs (rw,relatime) /dev/mapper/centos-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota) selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime) systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=35,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=10884) mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel) hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel) debugfs on /sys/kernel/debug type debugfs (rw,relatime) /dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota) /dev/mapper/centos-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,noquota) tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=799408k,mode=700) /dev/mapper/vg1-testlv on /users type ext4 (rw,relatime,seclabel,data=ordered) 练习2:新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录, [root@localhost ~]# man useradd [1]+ Stopped man useradd [root@localhost ~]# ls / bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test tmp users usr var [root@localhost ~]# useradd -b /users archlinux [root@localhost ~]# su – archlinux [archlinux@localhost ~]$ cp -a /etc/pam.d/ ~/ [archlinux@localhost ~]$ ls pam.d [archlinux@localhost ~]$ 练习3:扩展testlv至7G,要求archlinux的文件不能丢失 [archlinux@localhost ~]$ lvextend -L 7G /dev/vg1/testlv WARNING: Running as a non-root user. Functionality may be unavailable. /run/lvm/lvmetad.socket: access failed: Permission denied WARNING: Failed to connect to lvmetad. Falling back to device scanning. /dev/mapper/control: open failed: Permission denied Failure to communicate with kernel device-mapper driver. Incompatible libdevmapper 1.02.140-RHEL7 (2017-05-03) and kernel driver (unknown version). /run/lock/lvm/V_vg1:aux: open failed: Permission denied Cant get lock for vg1 Cannot process volume group vg1 [archlinux@localhost ~]$ umount /dev/vg1/testlv umount: /users: umount failed: Operation not permitted [archlinux@localhost ~]$ su – root Password: Last login: Tue Jul 27 03:26:48 EDT 2021 from 192.168.77.2 on pts/0 [root@localhost ~]# umount /dev/vg1/testlv umount: /users: target is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) [root@localhost ~]# ps -ef | grep archlinux root 1917 1463 0 04:01 pts/0 00:00:00 su – archlinux root 1974 1953 0 04:21 pts/0 00:00:00 grep –color=auto archlinux [root@localhost ~]# exit logout [archlinux@localhost ~]$ exit logout [root@localhost ~]# ps -ef | grep archlinux root 1977 1463 0 04:22 pts/0 00:00:00 grep –color=auto archlinux [root@localhost ~]# umount /dev/vg1/testlv [root@localhost ~]# lvextend -L 7G /dev/vg1/testlv Size of logical volume vg1/testlv changed from 5.00 GiB (320 extents) to 7.00 GiB (448 extents). Logical volume vg1/testlv successfully resized. [root@localhost ~]# resize2fs /dev/vg1/testlv resize2fs 1.42.9 (28-Dec-2013) Please run ‘e2fsck -f /dev/vg1/testlv’ first. [root@localhost ~]# e2fsck -f /dev/vg1/testlv e2fsck 1.42.9 (28-Dec-2013) 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/vg1/testlv: 48/327680 files (0.0% non-contiguous), 58493/1310720 blocks [root@localhost ~]# resize2fs /dev/vg1/testlv resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/vg1/testlv to 1835008 (4k) blocks. The filesystem on /dev/vg1/testlv is now 1835008 blocks long. [root@localhost ~]# mount /dev/vg1/testlv /users/ [root@localhost ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 50G 2.6G 48G 6% / devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 8.7M 3.9G 1% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda1 1014M 143M 872M 15% /boot /dev/mapper/centos-home 42G 33M 42G 1% /home tmpfs 781M 0 781M 0% /run/user/0 /dev/mapper/vg1-testlv 6.8G 23M 6.4G 1% /users [root@localhost ~]# [root@localhost ~]# ls /users/archlinux/ pam.d [root@localhost ~]# 练习4:收缩testlv至3G,要求archlinux的文件不能丢失 [root@localhost ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 50G 2.6G 48G 6% / devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 8.6M 3.9G 1% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda1 1014M 143M 872M 15% /boot /dev/mapper/centos-home 42G 33M 42G 1% /home tmpfs 781M 0 781M 0% /run/user/0 /dev/mapper/vg1-testlv 6.8G 23M 6.4G 1% /users [root@localhost ~]# umount /users [root@localhost ~]# e2fsck -f /dev/vg1/testlv e2fsck 1.42.9 (28-Dec-2013) 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/vg1/testlv: 48/458752 files (0.0% non-contiguous), 67358/1835008 blocks [root@localhost ~]# resize2fs /dev/vg1/testlv 3G resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/vg1/testlv to 786432 (4k) blocks. The filesystem on /dev/vg1/testlv is now 786432 blocks long. [root@localhost ~]# lvreduce /dev/vg1/testlv 3G No command with matching syntax recognised. Run ‘lvreduce –help’ for more information. Correct command syntax is: lvreduce -L|–size [-]Size[m|UNIT] LV [root@localhost ~]# lvreduce /dev/vg1/testlv -L 3G WARNING: Reducing active logical volume to 3.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce vg1/testlv? [y/n]: y Size of logical volume vg1/testlv changed from 7.00 GiB (448 extents) to 3.00 GiB (192 extents). Logical volume vg1/testlv successfully resized. [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert home centos -wi-ao—- <41.12g root centos -wi-ao—- 50.00g swap centos -wi-ao—- <7.88g testlv vg1 -wi-a—– 3.00g [root@localhost ~]# mount /test mount: cant find /test in /etc/fstab [root@localhost ~]# mount /dev/vg1/testlv /users [root@localhost ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 50G 2.6G 48G 6% / devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 8.6M 3.9G 1% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda1 1014M 143M 872M 15% /boot /dev/mapper/centos-home 42G 33M 42G 1% /home tmpfs 781M 0 781M 0% /run/user/0 /dev/mapper/vg1-testlv 2.9G 16M 2.7G 1% /users [root@localhost ~]# ls /users/archlinux/ pam.d [root@localhost ~]# 练习5:对testlv创建快照,并尝试基于快照备份数据,验证快照的功能 [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert home centos -wi-ao—- <41.12g root centos -wi-ao—- 50.00g swap centos -wi-ao—- <7.88g testlv vg1 -wi-ao—- 3.00g [root@localhost ~]# cd /users/archlinux/ [root@localhost archlinux]# touch test [root@localhost archlinux]# touch test1 [root@localhost archlinux]# ls test test1 [root@localhost archlinux]# lvcreate -s -n testlv-snap -p r -L 500M /dev/vg1/testlv Using default stripesize 64.00 KiB. Rounding up size to full physical extent 512.00 MiB Logical volume “testlv-snap” created. [root@localhost archlinux]# mount /dev/vg1/testlv-snap /backup/ mount: /dev/mapper/vg1-testlv–snap is write-protected, mounting read-only [root@localhost archlinux]# ls /backup/archlinux/ test test1 [root@localhost archlinux]# rm -rf test [root@localhost archlinux]# ls test1 [root@localhost archlinux]# ls /backup/archlinux/ test test1 [root@localhost archlinux]# 28.4 脚本完成磁盘分区格式化 28.4.1脚本编程及until简介 1、控制结构 脚本编程控制结构: 顺序 选择 if case 循环 for while until 2、while while CONDITION; do statment done 进入循环:条件满足 退出循环:条件不满足 3、until until CONDITION; do statement … done 进入循环:条件不满足 退出循环:条件满足 4、for的两种形式 for 变量 in 列表; do 循环体 done for (( expr1 ; expr2 ; expr3 )); do {例for((i=1;i<10;i++));do} 循环体 done 5、continue ![]() ![]() ![]() ![]() ![]() 写一个脚本: 1、通过ping命令测试192.168.0.151到192.168.0.254之间的所有主机是否在线, 如果在线,就显示”ip is up.”,其中的IP要换为真正的IP地址,且以绿色显示; 如果不在线,就显示”ip is down.”,其中的IP要换为真正的IP地址,且以红色显示; 要求:分别使用while,until和for(两种形式)循环实现。 ping -c -W 写一个脚本(前提:请为虚拟机新增一块硬盘,假设它为/dev/sdb),为指定的硬盘创建分区: 1、列出当前系统上所有的磁盘,让用户选择,如果选择quit则退出脚本;如果用户选择错误,就让用户重新选择; 2、当用户选择后,提醒用户确认接下来的操作可能会损坏数据,并请用户确认;如果用户选择y就继续,n就退出;否则,让用户重新选择; 3、抹除那块硬盘上的所有分区(提示,抹除所有分区后执行sync命令,并让脚本睡眠3秒钟后再分区);并为其创建三个主分区,第一个为20M,第二个为512M, 第三个为128M,且第三个为swap分区类型;(提示:将分区命令通过echo传送给fdisk即可实现) fdisk -l |grep “ dd if=/dev/zero of=/dev/sdb bs=512 count=1 sync sleep 3 RAID LVM: 逻辑卷的缩减 扩展 快照卷 while CONDITION; do 循环体 done while [ $VAR != ‘quit’ ];do done |