说的磁盘管理 灵梦某天接到短信报警提示,显示某主机的根分区空间使用率超过85%,该主机用于影评(mysql)和报表数据库(oracle)。经查看发现其中MySQL数据库的数据文件存放在/usr/local/mysql/中,占用根文件系统空间导致。由于前期规划不合理,没有将业务数据和系统数据分开。经研究决定,要将影评的数据库单独放到另一块磁盘上,并且实现逻辑卷管理 。
任务要求
保证数据库完整的情况下将影评数据库迁移到另外一块新添加的磁盘上
考虑到数据增长情况,新磁盘使用lvm逻辑卷管理 ,方便日后动态扩容
任务拆解
需要有一块可用硬盘(需要在虚拟机里增加一块硬盘)
使用lvm方式管理磁盘(学习lvm相关的知识点)
迁移数据库(MySQL)业务维护时间(23:00—)
停监控(根据情况)
停前端应用
停MySQL数据库
备份数据库(全备)
将原有的数据库同步到新的设备存储上(数据同步rsync)
启动数据库(保证没有问题)
启动前端应用
测试人员测试
开门营业(记得打开监控)
涉及知识点
磁盘分区相关概念和工具(fdisk)
LVM逻辑卷相关概念和工具使用(重点)
Linux学习之磁盘管理
能够使用fdisk命令对磁盘进行分区
熟悉设备的挂载方式(手动、开机自动、autofs自动)
理解物理卷、卷组、逻辑卷的概念
能够根据需求创建逻辑卷(重点)
能够根据需求动态扩容逻辑卷(重点)
熟练使用逻辑卷相关命令(pvcreate/vgcreate/lvcreate等)
理论储备 一、硬盘的基本知识 1.了解硬盘的接口类型 IDE ——> SATA I/II/III 个人pc机
SCSI ——> SAS 服务器上
2. 硬盘命名方式
OS
IDE(并口)
SATA(串口)
SCSI
RHEL5
/dev/hda
/dev/sda
/dev/sda
RHEL6
/dev/sda
/dev/sda
/dev/sda
RHEL7
/dev/sda
/dev/sda
/dev/sda
3. 磁盘设备的命名 /dev/sda2
s 硬件接口类型(sata/scsi),d disk(硬盘),a 第1块硬盘(b,第二块),2 第几个分区
/dev/hd h=IDE硬盘 /dev/hdd3 /dev/vd v=虚拟硬盘 /dev/vdf7
4. HP服务器硬盘 /dev/cciss/c0d0 /dev/cciss/c0d0p1 c0第一个控制器, d0第一块磁盘, p1分区1 /dev/cciss/c0d0p2 c0第一个控制器, d0第一块磁盘, p2分区2
5. 硬盘的分区方式 MBR <2TB fdisk 4个主分区或者3个主分区+1个扩展分区(N个逻辑分区)
MBR(Master Boot Record)的缩写,由三部分组成,即:
Bootloader(主引导程序)(446字节) 硬盘第一个扇区(512字节)
DPT分区表(Disk Partition Table)(64字节)
分区表保存了硬盘的分区信息,操作系统通过读取分区表内的信息,就能够获得该硬盘的分区信息
每个分区需要占用16个字节大小 ,保存有文件系统标识、起止柱面号、磁头号、扇区号、起始扇区位置(4个字节)、分区总扇区数目(4个字节)等内容
分区表中保存的分区信息都是主分区与扩展分区 的分区信息,扩展分区不能直接使用 ,需要在扩展分区内划分一个或多个逻辑分区 后才能使用
逻辑分区的分区信息 保存在扩展分区内 而不是保存在MBR分区表内,这样,就可以突破MBR分区表只能保存4个分区的限制
硬盘有效标志(校验位)(2个字节)
GPT >2TB gdisk(parted) 128个主分区
注意:从MBR转到GPT,或从GPT转换到MBR会导致数据全部丢失 !
扩展阅读:http://www.eassos.cn/jiao-cheng/ying-pan/mbr-vs-gpt.php
二、硬盘的工作原理 了解
三、基本分区管理 1. 磁盘划分思路
进入分区表 新建 分区 fdisk /dev/sdb
更新分区表<刷新分区表>
格式化分区——>文件系统 mkfs.ext4 /dev/sdb1
挂载使用——>mount【开机自动挂载|autofs自动挂载】
2. fdisk分区 2.1 使用fdisk分区 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 硬盘容量 = 柱面数 × 盘面数(磁头数) × 扇区数 × 扇区大小(一般为512 字节) Disk /dev/sda: 26.8 GB, 26843545600 bytes 磁盘空间 255 heads, 63 sectors/track, 3263 cylinders 255 磁头 63 个扇区 每 磁道 3263 个圆柱体 Units = cylinders of 16065 * 512 = 8225280 bytes 单元 Sector size (logical/physical): 512 bytes / 512 bytes 扇区大小(逻辑/物理) 都是512 字节。 I/O size (minimum/optimal): 512 bytes / 512 bytes I/O 大小(最小/最大) 都是512 字节。 Disk identifier: 0 x00030124 设备识别码 启动设备加* 起始 结束 块 id 系统 Device Boot Start End Blocks Id System /dev/sda1 * 1 2497 20051968 83 Linux /dev/sda2 2497 2611 916481 5 Extended 扩展分区 /dev/sda3 2612 3263 5237190 83 Linux /dev/sda5 2497 2611 916480 82 Linux swap / Solaris Command(m for help): m 输出帮助信息 Commandaction a toggle a bootable flag 设置启动分区 b edit bsd disklabel 编辑分区标签 c toggle the dos compatibility flag d delete a partition 删除一个分区 l list known partition types 列出分区类型 m print this menu 帮助 n add a new partition 建立一个新的分区 o create a new empty DOS partition table 创建一个新的空白DOS分区表 p print the partition table 打印分区表 q quit without saving changes 退出不保存设置 s createa new empty Sun disklabel 创建一个新的空的SUN标示 t changea partition's system id 改变分区的类型 u changedisplay/entry units 改变显示的单位 v verifythe partition table 检查验证分区表 w write table to disk and exit 保存分区表
总结:
最多只能分4个主分区,主分区编号1-4
逻辑分区大小总和不能超过扩展分区大小,逻辑分区分区编号从5开始
如果删除扩展分区,下面的逻辑卷分区也被删除
扩展分区的分区编号(1-4)
任务1:
添加一块硬盘,需要将其分两个分区,分别格式化成ext4和vfat格式文件系统使用,最终需要使用2G空间。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 思路: 1 . 增加一块硬盘2 . 使用fdisk命令进行分区3 . 格式化指定分区4 . 创建一个空的目录作为挂载点5 . 挂载使用步骤: 1 . 增加硬盘增加完硬盘记得重启系统 ... sdb 8 :16 0 10 G 0 disk [root @web ~] Disk /dev/sdb: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0 x00000000 2 . 使用fdisk命令分区[root @web ~] Command (m for help): p 打印分区表信息 Disk /dev/sdb: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0 x31dd29ec Device Boot Start End Blocks Id System Command (m for help): n 创建新分区 Command action e extended 扩展分区 p primary partition (1 -4 ) 主分区 p Partition number (1 -4 ): 1 选择主分区编号 First cylinder (1 -1305 , default 1 ): 起始柱面默认即可(直接回车) Using default value 1Last cylinder, +cylinders or +size{K,M,G} (1 -1305 , default 1305 ): +1 G 分区大小1 G Command (m for help): p Disk /dev/sdb: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0 x31dd29ec Device Boot Start End Blocks Id System /dev/sdb1 1 132 1060258 + 83 Linux Command (m for help): n Command action e extended p primary partition (1 -4 ) p Partition number (1 -4 ): 2 First cylinder (133 -1305 , default 133 ): Using default value 133Last cylinder, +cylinders or +size{K,M,G} (133 -1305 , default 1305 ): +1 G Command (m for help): p Disk /dev/sdb: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0 x31dd29ec Device Boot Start End Blocks Id System /dev/sdb1 1 132 1060258 + 83 Linux /dev/sdb2 133 264 1060290 83 Linux Command (m for help): w 保存退出 The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. 3 . 再次查看分区情况sdb 8 :16 0 10 G 0 disk ├─sdb1 8 :17 0 1 G 0 part └─sdb2 8 :18 0 1 G 0 part 4 . 刷新分区表信息[root @web ~] BLKPG: Device or resource busy error adding partition 1 BLKPG: Device or resource busy error adding partition 2 5 . 格式化分区[root @web ~] [root @web ~] [root @web ~] 6 . 创建新的挂载点[root @web ~] [root @web ~] 7 . 挂载使用[root @web ~] [root @web ~]
总结:
扩展分区的大小决定了所有逻辑分区 的大小
删除扩展分区后下面的逻辑分区都被删除
分完区后需要手动刷新分区表 ,如果刷新不成功需要重启操作系统
创建分区的时候尽可能注意分区序号的连续性
2.2 挂载分区设备 手动挂载:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 mount [options ] 需要挂载的设备 挂载点特点:系统重启后需要重新挂载;手动卸载后需要手动挂载 -o :挂载选项 ro,sync,rw,remount-t :文件系统类型mount -t nfs=mount.nfsmount -t cifs=mount.cifs10.1 .1.2 /share [smb ]mount.cifs -o user=user01,password=123 //10.1 .1.2 /smb /u01 mount.nfs 10.1 .1.2 :/share /u02 [root @reimu ~] remount:重新挂载一个正在挂载的设备 注意:后面可以根挂载点也可以跟设备本身 挂载设备:真实设备、设备UUID,设备的卷标 /dev/sdb /dev/sdb1 [root @reimu ~] /dev/sdb1: UUID="FD3A-F14D" TYPE ="vfat" [root @reimu ~] /dev/sdb2: UUID="f1cc2198-7e5f-4408-9c74-9b93d4716d8d" TYPE ="ext4" [root @server ~] 说明:e2label只能够对ext2~ext4的文件系统设置卷标 [root @reimu ~] [root @reimu ~] /dev/sdb2: UUID="f1cc2198-7e5f-4408-9c74-9b93d4716d8d" TYPE ="ext4" LABEL="disk2" 卸载设备:umount [root @reimu ~] [root @reimu ~]
开机自动挂载:
操作系统启动流程:
硬件初始化 硬盘、内存、。。。HD
系统初始化 /sbin/init—>xxxxxx/etc/fstab
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 UUID="9bf6b9f7-92ad-441b-848e-0257cbb883d1" /mnt/disk1 auto defaults 0 0 UUID="4d26172c-7aff-4388-baa5-c6756c014d52" /mnt/disk2 ext4 ro 0 0 特点:系统重启后自动挂载;手动卸载后重启会自动挂载或者使用mount -a 自动挂载 /etc/fstab文件: 格式: 要挂载的资源路径 挂载点 文件系统类型 挂载选项 dump备份支持 文件系统检测 UUID=289370 eb-9459-42a8-8cee-7006507f1477 / ext4 defaults 1 1 1 段:挂载的设备(磁盘设备的文件名或设备的卷标或者是设备的UUID)2 段:挂载点(建议用一个空目录),建议不要将多个设备挂载到同一个挂载点上3 段:文件系统类型(ext3、ext4、vfat、ntfs(安装软件包)、swap等等)4 段:挂载选项async/sync 异步/同步: auto/noauto 自动/非自动: rw/ro 读写/只读: exec/noexec 可被执行/不可被执行: remount 重新挂在一个已经挂载的文件系统,常用于修改挂载参数 user/nouser 允许/不允许其他普通用户挂载: suid/nosuid 具有/不具有suid权限:该文件系统是否允许SUID的存在。 usrquota 这个是在启动文件系统的时候,让其支持磁盘配额,这个是针对用户的。 grpquota 支持用户组的磁盘配额。 .... defaults 同时具有rw, dev, exec, acl, async,nouser等参数。 mount -a 重新读取/etc/fstab文件内容man mount 可以找到详细信息5 段:是否支持dump备份。//dump是一个用来备份的命令,0 代表不要做dump备份,1 代表要每天进行dump的动作,2 也代表其他不定日期的dump备份。通常这个数值不是0 就是1 。数字越小优先级越高。6 段:是否用 fsck 检验扇区。//开机的过程中,系统默认会用fsck检验文件系统是否完整。0 是不要检验,1 表示最先检验(一般只有根目录会设定为1 ),2 也是要检验,只是1 是最先,2 是其次才进行检验。说明: 要挂载的资源路径可以是文件系统的UUID,设备路径,文件系统的标签 ,光盘镜像文件(iso),亦或是来自网络的共享资源等 建议: /etc/rc.local 操作系统启动后读取的最后一个文件 vim /etc/rc.local ... /bin/mount -o noexec,ro /dev/sdb1 /u01
自动挂载 Automount:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 特点:挂载是由访问产生;卸载是由超时产生;依赖于后台的autofs服务 思路: 1 . 所有的监控都是由一个程序完成 autofs2 . 服务启动后才会监控挂载的设备3 . 修改配置文件来指定需要监控的设备需求1 :让系统自动挂载/dev/sdb1设备,如果2 分钟没有被用自动卸载 步骤: 1 )安装autofs软件[root @server ~] package autofs is not installed [root @server ~] [root @server ~] autofs.x86_64 1 :5.0 .5 -88 .el6 local libsss_autofs.x86_64 1.9 .2 -129 .el6 local [root @server ~] [root @server ~] autofs-5 .0.5 -88 .el6.x86_64 2 )修改配置文件(指定需要监控的设备和挂载的目录)vim /etc/auto.master //定义一级挂载点/u01和子配置文件 /u01 /etc/auto.test -t 120 或者 --timeout 120 单位秒 (设置超时时间去卸载) vim /etc/auto.test //子配置文件自己创建,定义二级挂载点和需要挂载的设备 test -fstype =ext4,ro :/dev/sdb5 3 )重启服务[root @reimu ~] Stopping automount: [ OK ] Starting automount: [ OK ] [root @reimu ~] 4 )测试验证[root @server ~] [root @server ~] Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 18 G 6.6 G 9.9 G 41 % / tmpfs 491 M 0 491 M 0 % /dev/shm /dev/sda1 485 M 33 M 427 M 8 % /boot /dev/sr0 4.2 G 4.2 G 0 100 % /mnt 后续补充: 如果想要将/dev/sdb5挂载到/u01下,怎么做? vim /etc/auto.master /- /etc/auto.test vim /etc/auto.test /u01 -fstype =ext4 :/dev/sdb5 需求2 :将10.1 .1.1 (node1)上的共享目录/share/nfs挂载到10.1 .1.2 (server)本地的/notes下面 环境: node1:10.1 .1.1 搭建NFS服务,共享/share/nfs/xxx server:10.1 .1.2 使用autofs自动挂载server上共享目录 步骤: 1 . node1端共享文件1 )修改/etc/exports文件[root @node1 ~] [root @node1 ~] [root @node1 ~] [root @node1 ~] /share/nfs 10.1 .1.2 /24 (rw) 2 )重启nfs服务[root @node1 ~] [root @node1 ~] 2 . server端使用autofs方式自动挂载[root @server ~] Export list for 10.1 .1.1 : /share/nfs 10.1 .1.2 /24 [root @server ~] [root @server ~] /- /etc/auto.notes --timeout 60 [root @server ~] /notes -nfs ,ro 10.1 .1.1 :/share/nfs 3 ) 重启服务[root @server ~] Stopping automount: [ OK ] Starting automount: [ OK ] 4 )测试验证[root @server ~] file1 file2 file3 file4 file5 [root @server ~] Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 18 G 6.6 G 9.9 G 41 % / tmpfs 491 M 0 491 M 0 % /dev/shm /dev/sda1 485 M 33 M 427 M 8 % /boot /dev/sr0 4.2 G 4.2 G 0 100 % /mnt 10.1 .1.1 :/share/nfs 18 G 4.1 G 13 G 25 % /notes注意:一级和二级挂载点可以不用创建,autofs可以让我们临时使用
总结:挂载设备的三种方式
设备要被挂载,必须要有文件系统类型(mkfs.类型)
手动挂载mount mount -o 挂载选项(ro,rw,auto,noexec…) 需要挂载设备 挂载点
开机自动挂载
/etc/fstab 修改特别小心(不建议)
修改/etc/rc.local文件 启动后最后读取文件,执行该文件必须要有可执行权限
autofs自动挂载
四、逻辑卷管理(重点) 1. 逻辑卷介绍 逻辑卷: 逻辑卷(LVM):它是Linux环境下对磁盘分区进行管理 的一种机制,它是建立在物理存储设备之上 的一个抽象层 ,优点在于灵活 管理。特点: 1、动态在线扩容(重点) 2、离线裁剪 3、数据条带化 4、数据镜像
2. 逻辑卷基本概念
物理卷是底层真正提供容量 ,存放数据的设备,它可以是整个硬盘、硬盘上的分区等。
卷组建立在物理卷之上,它由一个或多个物理卷 组成。即把物理卷整合起来提供容量分配。 一个LVM系统中可以只有一个卷组,也可以包含多个卷组。
逻辑卷建立在卷组之上,它是从卷组中“切出”的一块空间。它是最终用户使用的逻辑设备 。逻辑卷创建之后,其大小可以伸缩 。
每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是能被LVM寻址的最小单元。PE的大小可指定,默认为4 MB。 PE的大小一旦确定将不能改变,同一个卷组中的所有物理卷的PE的大小是一致的。 4MB=4096kb=4096kb/4kb=1024个block
说明:
硬盘读取数据最小单位1个扇区512字节
操作读取数据最小单位1个数据块=8*512字节=4096字节=4KB
lvm寻址最小单位1个PE=4MB
逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
真实的物理设备——>逻辑上(命令创建)——>物理卷(pv)——>卷组(vg)——>逻辑卷(lv)——>逻辑卷格式化——>挂载使用
3. 逻辑卷LVM应用 3.1 逻辑卷创建 需求:创建一个2.5G大小的逻辑卷
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 思路: 1 . 物理的设备2 . 将物理设备做成物理卷3 . 创建卷组并将物理卷加入其中4 . 创建逻辑卷5 . 格式化逻辑卷6 . 挂载使用步骤: 1 . 物理设备sdb 8 :16 0 10 G 0 disk ├─sdb1 8 :17 0 2 G 0 part ├─sdb2 8 :18 0 2 G 0 part ├─sdb3 8 :19 0 1 K 0 part ├─sdb5 8 :21 0 2 G 0 part ├─sdb6 8 :22 0 2 G 0 part └─sdb7 8 :23 0 2 G 0 part 2 . 创建物理卷[root @server ~] 查看物理卷: [root @server ~] PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 a-- 2.01 g 2.01 g /dev/sdb2 lvm2 a-- 2.01 g 2.01 g [root @server ~] 3 . 创建卷组并将物理卷加入其中[root @server ~] Volume group "vg01" successfully created 查看卷组信息: [root @server ~] VG vg01 2 0 0 wz--n- 4.01 g 4.01 g [root @server ~] 4 . 创建逻辑卷[root @server ~] Logical volume "lv01" created 在操作系统层面映射两个地方: [root @server ~] lrwxrwxrwx 1 root root 7 Jan 7 11 :16 /dev/mapper/vg01-lv01 -> ../dm-2 [root @server ~] lrwxrwxrwx 1 root root 7 Jan 7 11 :16 /dev/vg01/lv01 -> ../dm-2 查看逻辑卷的信息: [root @server ~] -n :指定逻辑卷的名字-L :指定逻辑卷的大小-l :指定逻辑卷的大小举例: -l 100 100 个PE,每个PE大小默认4 M,故逻辑卷大小为400 M-l 50 %free 卷组剩余空间的50 %[root @server ~] VG vg01 1 1 0 wz--n- 2.00 g 516.00 m 创建大小为200 M的逻辑卷lv02;每个PE为4 M,-l50 指定50 个PE,大小为200 M [root @server ~] Logical volume "lv02" created [root @server ~] VG vg01 1 2 0 wz--n- 2.00 g 316.00 m [root @server ~] LV VG Attr LSize Pool Origin Data % Move Log Cpy%Sync Convert lv02 vg01 -wi-a----- 200.00 m 创建大小为剩余卷组vg01空间的50 %的逻辑卷lv03 [root @server ~] Logical volume "lv03" created [root @server ~] LV VG Attr LSize Pool Origin Data % Move Log Cpy%Sync Convert lv03 vg01 -wi-a----- 156.00 m [root @server ~] VG vg01 1 3 0 wz--n- 2.00 g 160.00 m 5 . 格式化逻辑卷[root @server ~] 6 . 挂载使用1 )创建一个空的挂载点2 )挂载使用[root @server ~]
3.2 逻辑卷动态扩容 需求:将/u01目录动态扩容到3G
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 思路: 1 . 查看/u01目录所对应的逻辑卷是哪一个 /dev/mapper/vg02-lv01 2 . 查看当前逻辑卷所在的卷组vg01剩余空间是否足够3 . 如果vg01空间不够,得先扩容卷组,再扩容逻辑卷4 . 如果vg01空间足够,直接扩容逻辑卷步骤: 1 . 查看/u01目录属于哪个卷组[root @web ~] Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg01-lv_root 18 G 5.9 G 11 G 36 % / tmpfs 931 M 0 931 M 0 % /dev/shm /dev/sda1 291 M 33 M 244 M 12 % /boot /dev/sr0 4.2 G 4.2 G 0 100 % /mnt /dev/mapper/vg02-lv01 1.5 G 35 M 1.4 G 3 % /u01 [root @web ~] LV VG Attr LSize Pool Origin Data % Move Log Cpy%Sync Conver lv01 vg02 -wi-ao---- 1.50 g 2 . 卷组的剩余空间[root @web ~] VG vg01 1 2 0 wz--n- 19.70 g 0 vg02 1 1 0 wz--n- 2.00 g 516.00 m 结果:当前卷组空间不足我扩容 3 . 扩容逻辑卷所在的卷组1 )首先得有物理设备 /dev/sdb52 ) 将物理设备做成物理卷[root @web ~] Physical volume "/dev/sdb5" successfully created [root @web ~] PV VG Fmt Attr PSize PFree /dev/sda2 vg01 lvm2 a-- 19.70 g 0 /dev/sdb5 lvm2 a-- 2.01 g 2.01 g /dev/sdb6 vg02 lvm2 a-- 2.00 g 516.00 m 3 )将物理卷加入到卷组中(卷组扩容) [root @web ~] Volume group "vg02" successfully extended [root @web ~] PV VG Fmt Attr PSize PFree /dev/sda2 vg01 lvm2 a-- 19.70 g 0 /dev/sdb5 vg02 lvm2 a-- 2.00 g 2.00 g /dev/sdb6 vg02 lvm2 a-- 2.00 g 516.00 m 注意: 正常情况下,应该先将/dev/sdb5物理设备创建为物理卷再加入到卷组中;如果直接加入卷组,系统会自动帮你将其做成物理卷。 [root @web ~] VG vg01 1 2 0 wz--n- 19.70 g 0 vg02 2 1 0 wz--n- 4.01 g 2.51 g 4 . 扩容逻辑卷[root @web ~] 或者 [root @web ~] 5 . 查看结果[root @web ~] LV VG Attr LSize Pool Origin Data % Move Log Cpy%Sync Convert lv_root vg01 -wi-ao---- 17.70 g lv_swap vg01 -wi-ao---- 2.00 g lv01 vg02 -wi-ao---- 3.00 g 已经扩容到了3 G [root @web ~] Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg01-lv_root 18 G 5.9 G 11 G 36 % / tmpfs 931 M 0 931 M 0 % /dev/shm /dev/sda1 291 M 33 M 244 M 12 % /boot /dev/sr0 4.2 G 4.2 G 0 100 % /mnt /dev/mapper/vg02-lv01 1.5 G 35 M 1.4 G 3 % /u01 实际并没有改变 6 . 同步文件系统[root @web ~] 7 . 再次查看验证[root @web ~] Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg01-lv_root 18 G 5.9 G 11 G 36 % / tmpfs 931 M 0 931 M 0 % /dev/shm /dev/sda1 291 M 33 M 244 M 12 % /boot /dev/sr0 4.2 G 4.2 G 0 100 % /mnt /dev/mapper/vg02-lv01 3.0 G 35 M 2.8 G 2 % /u01 扩容成功
离线裁剪逻辑卷(了解)
1 2 3 4 5 6 [root @server ~] [root @server ~] [root @server ~] [root @server ~] [root @server ~]
3.3 逻辑卷相关命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 创建物理卷:pvcreate pvcreate /dev/sdb1 创建卷组:vgcreate vgcreate vg01 /de/sdb1 创建逻辑卷:lvcreate lvcreate -n lv01 -L 1 G vg01 lvcreate -n lv01 -l 100 vg01 lvcreate -n lv01 -l 100 %free vg01 删除逻辑卷:lvremove lvremove /dev/vg01/lv01 删除卷组:vgremove vgremove vg01 说明:卷组里的物理卷没有被使用才可以直接删除卷组 删除物理卷:pvremove pvremove /dev/sdb1 扩容卷组:vgextend vgextend vg01 /dev/sdb2 扩容逻辑卷:lvextend lvextend /dev/vg01/lv01 -L +2 G 同步文件系统: resize2fs /dev/vg01/lv01 裁剪卷组:vgreduce vgreduce vg01 /dev/sdb2 裁剪逻辑卷:lvreduce
实战演练 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 思路: 0 . 准备好物理设备,并创建一个逻辑卷,大小根据mysql数据库的实际大小再大一些,挂载到系统中1 . 最好在系统维护时间操作(23 :00 -8 :00 )2 . 先停止前端应用 LAMP apache3 . 停止mysql数据库(建议备份mysql数据库)4 . 迁移mysql数据文件步骤: 1 . 添加一块物理硬盘[是否需要重启开服务器是否支持热插拔]sdb 8 :16 0 10 G 0 disk ├─sdb1 8 :17 0 2 G 0 part ├─sdb2 8 :18 0 2 G 0 part ├─sdb3 8 :19 0 1 K 0 part ├─sdb5 8 :21 0 2 G 0 part ├─sdb6 8 :22 0 2 G 0 part └─sdb7 8 :23 0 2 G 0 part 2 . 创建大小为8 G的逻辑卷1 )创建物理卷[root @server ~] 2 )创建卷组vg_mysql[root @server ~] [root @server ~] VG vg_mysql 5 0 0 wz--n- 9.98 g 9.98 g 3 )创建逻辑卷lv_mysql[root @server ~] [root @server ~] lv_mysql vg_mysql -wi-a----- 8.00 g 4 )格式化为ext4文件系统[root @server ~] 5 )挂载使用a. 创建一个空的挂载点/u01 [root @server ~] b. 挂载逻辑卷lv_mysql到/u01目录 [root @server ~] 3 . 停止前端web服务[root @server ~] 4 . 停止mysql数据库[root @server ~] 5 . 备份mysql数据库到另外一台备份机 (实验环境不是必须)备份机:10.1 .1.2 备份目录:/backup [root @server ~] 6 . 将/usr/local/mysql/目录里的所有数据文件同步到逻辑卷上,即/u01目录[root @server ~] 查看是否同步完成: [root @server ~] [root @server ~] 7 . 卸载逻辑卷[root @server ~] 8 . 删除/usr/local/mysql/目录里原来的数据文件注意:删之前一定要确定成功备份了!!! [root @server ~] 9 . 挂载逻辑卷lv_mysql到mysql的安装目录/usr/local/mysql[root @server ~] 开机自动挂载: vim /etc/rc.local ... mount /dev/vg_mysql/lv_mysql /usr/local/mysql/10 . 启动数据库[root @server ~] 11 . 启动web服务[root @server ~] 12 .测试验证访问之前的网站看是否可以正常访问
扩展补充 一、 扩容swap空间 方法1:增加一个硬盘或者分区来扩容swap空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 查看swap空间大小: [root @web ~] total used free shared buffers cached Mem: 1861 646 1215 0 9 60 -/+ buffers/cache: 576 1285 Swap: 2047 0 2047 [root @web ~] Filename Type Size Used Priority /dev/dm-1 partition 2097144 0 -1 [root @web ~] Setting up swapspace version 1 , size = 2104476 KiB no label, UUID=485 ff8ad-a636-4556-a2e7-4ee9efc78afb [root @web ~] /dev/sdb7: UUID="485ff8ad-a636-4556-a2e7-4ee9efc78afb" TYPE ="swap" //激活swap分区。swap空间不能手动挂载 [root @server ~] [root @server ~] Filename Type Size Used Priority /dev/dm-1 partition 2031608 0 -1 /dev/sdb7 partition 2064312 0 -2
方法2:使用dd命令模拟大文件来扩容swap
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [root @server ~] [root @server ~] [root @server ~] [root @server ~] if =源文件of=目标文件 bs=复制数据的大小 count=复制的个数 注意: 1 . 一般可以使用dd命令做块设备文件的备份2 . /dev/zero 特殊设备,一般用来模拟一个大文件,源源不断的二进制的bit流; /dev/null 空设备,类似黑洞 步骤: 1 . 使用dd命令模拟大文件2 . 格式化大文件[root @server ~] 3 .激活大文件[root @server ~] -p :指定优先级,数字越大优先级越高,0 -32767 4 . 查看[root @server ~] Filename Type Size Used Priority /tmp/swapfile file 1048568 0 1 如果开机自动挂载,需要修改文件:/etc/fstab /swap_file swap swap defautls,pri=1 0 0
二、逻辑卷实现条带化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 条带化: 把保存到逻辑卷的数据分成n等分,分别写到不同的物理卷,可以提高数据的读写效率; 如果任何一个涉及到的物理卷出现故障,数据都会无法恢复。 sdc 8 :32 0 20 G 0 disk ├─sdc1 8 :33 0 2 G 0 part └─sdc2 8 :34 0 2 G 0 part 创建物理卷 [root @server ~] 查看物理卷 [root @server ~] /dev/sdc1 lvm2 a-- 2.01 g 2.01 g /dev/sdc2 lvm2 a-- 2.01 g 2.01 g 创建卷组: [root @server ~] [root @web ~] PV VG Fmt Attr PSize PFree /dev/sdc1 vg01 lvm2 a-- 2.00 g 2.00 g /dev/sdc2 vg01 lvm2 a-- 2.00 g 2.00 g 创建实现条带化的逻辑卷: [root @server ~] Using default stripesize 64.00 KiB Logical volume "lv01" created [root @server ~] LV VG Attr LSize Pool Origin Data % Move Log Cpy%Sync Convert lv01 vg01 -wi-a----- 1.00 g [root @server ~] PV VG Fmt Attr PSize PFree /dev/sdc1 vg01 lvm2 a-- 2.00 g 1.50 g /dev/sdc2 vg01 lvm2 a-- 2.00 g 1.50 g -i 参数:给出条带化的数量格式化挂载使用: [root @server ~] [root @server ~] 测试: [root @server ~] [root @server ~] -d 查看磁盘-m 以什么速度显示,每秒M 2 每隔2 s显示一次 如果后面还有数字则代表总共显示多少次 [root @server ~] [root @server ~] 。。。 Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn sdb5 178.00 0.00 52.00 0 52 sdb6 177.00 0.00 52.00 0 52
三、逻辑卷实现镜像 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 逻辑卷实现镜像: 镜像:对某个逻辑卷的数据做镜像,起到数据备份的作用。 当前环境: ├─sdb7 8 :23 0 2 G 0 part └─sdb8 8 :24 0 2 G 0 part 创建物理卷: [root @web ~] [root @web ~] PV VG Fmt Attr PSize PFree /dev/sdb7 lvm2 a-- 2.01 g 2.01 g /dev/sdb8 lvm2 a-- 2.01 g 2.01 g 将物理卷加入到vg02卷组: [root @web ~] Volume group "vg02" successfully extended [root @web ~] VG vg02 4 1 0 wz--n- 8.02 g 6.02 g 创建实现镜像的逻辑卷: [root @web ~] Logical volume "lv02" created -m 参数:给出镜像的个数;1 表示1 个镜像[root @web ~] LV VG Attr LSize Pool Origin Data % Move Log Cpy%Sync Convert lv_root vg01 -wi-ao---- 17.70 g lv_swap vg01 -wi-ao---- 2.00 g lv01 vg02 -wi-ao---- 2.00 g lv02 vg02 mwi-a-m--- 2.00 g lv02_mlog 38.67 lv-mysql vg03 -wi-ao---- 10.00 g 说明: Cpy%Sync 53.52 该值是100 %说明复制ok 创建后: [root @web ~] PV VG Fmt Attr PSize PFree /dev/sdb7 vg02 lvm2 a-- 2.00 g 4.00 m /dev/sdb8 vg02 lvm2 a-- 2.00 g 0 格式化逻辑卷: [root @web ~] 挂载使用 [root @web ~] [root @web ~] [root @web ~] 测试验证: 思路:损坏一个磁盘,测试数据是否在第二个物理卷中 1 . 使用dd命令破坏一个物理卷[root @web ~] 2 . 再次查看物理卷发现有一个unknown Device /dev/sdc vg03 lvm2 a-- 20.00 g 10.00 g unknown device vg02 lvm2 a-m 2.00 g 4.00 m 3 . 将损坏的盘从卷组中移除vgreduce vg02 --removemissing --force 4 . 再次查看挂载点/u02数据依然存在自己也可以再次测试: 1 . 再拿刚刚人为损坏的盘做成物理卷再次加入到vg02卷组中[root @web ~] Physical volume "/dev/sdb7" successfully created [root @web ~] Volume group "vg02" successfully extended 2 . 再次让/dev/sdd5和/dev/sdd6互为镜像[root @web ~] vg02/lv02: Converted: 0.0 % vg02/lv02: Converted: 32.2 % vg02/lv02: Converted: 65.8 % vg02/lv02: Converted: 97.7 % vg02/lv02: Converted: 100.0 % 3 . 等待复制完成就可以再次人为模拟另一块物理卷损坏继续测试
四、逻辑卷快照 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 1 . 创建快照 (EXT4)[root @node1 ~] [root @node1 ~] [root @node1 ~] ACTIVE '/dev/vg1/lv1' [768.00 MiB ] inherit ACTIVE Original '/dev/vg1/lv2' [512.00 MiB ] inherit ACTIVE Snapshot '/dev/vg1/lv2-snap' [128.00 MiB ] inherit [root @node1 ~] vg1-lv2--snap (252 :5 ) ├─vg1-lv2--snap-cow (252 :7 ) 保存原卷改变前的数据 │ └─ (253 :17 ) └─vg1-lv2-real (252 :6 ) 真实的逻辑卷(原卷) ├─ (253 :17 ) └─ (253 :18 ) vg1-lv2 (252 :1 ) └─vg1-lv2-real (252 :6 ) ├─ (253 :17 ) └─ (253 :18 ) 2 . 修改原卷的数据[root @server ~] 3 . 观察Snapshot[root @server ~] LV VG Attr LSize Pool Origin Data % Move Log Cpy%Sync Convert s-lv01 vg01 swi-aos--- 52.00 m lv01 0.16 [root @server ~] LV VG Attr LSize Pool Origin Data % Move Log Cpy%Sync Convert s-lv01 vg01 swi-aos--- 52.00 m lv01 58.16 XFS: [root @node1 ~] 挂载快照,尽量使用ro的方式,将不会破坏快照卷中的数据 应用场景: /var/lib/mysql 1 . 锁表2 . 备份【逻辑|物理备份】3 . 解锁100 G 物理备份 /var/lib/mysql/xxx1 . 锁表2 . 创建快照3 . 解锁4 . 挂载快照5 . 备份到指定地方6 . 删除快照快照实现自动扩容: /etc/lvm/lvm.conf snapshot_autoextend_threshold = 80 snapshot_autoextend_percent = 20 //当快照使用到80 %时,自动扩容20 %;当snapshot_autoextend_threshold = 100 表示关闭自动扩容
五、磁盘配额 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 磁盘配额 quota =========================================================================== 作用: 限制用户或组对磁盘空间的使用,例如文件服务器,邮件服务器... 一、启用磁盘限额 1 . 让文件系统支持配额 [ext3 /4 ]/dev/vg02/lv02 /u01 ext4 defaults,usrquota,grpquota 0 0 /dev/mapper/vg02-lv02 on /u01 type ext4 (rw,usrquota,grpquota) 2 . 创建磁盘配额的数据库文件注意: 建议停用SELinux [root @server ~] [root @server ~] [root @server ~] total 16 -rw------- 1 root root 6144 Sep 17 09 :28 aquota.group-rw------- 1 root root 6144 Sep 17 09 :28 aquota.user//-a 所有分区(已支持配额) //-c 创建 //-u 用户 //-g 组 3 .启动磁盘配额二、日常管理 设置配额: 方法一:edquota Disk quotas for user stu1 (uid 500 ): Filesystem blocks soft hard inodes soft hard /dev/mapper/vg01-lv01 0 0 0 0 0 0 soft:又称软限制,当用户到达这个限制以后,系统会给予警告,但仍可写入。 hard:又称硬限制,到达这个限制,就完全禁止任何写入 以下三个为磁盘空间的限制设置: blocks:已使用空间,无需要设置 soft:用户空间使用限制,为软限制,需要设置 hard:用户空间使用限制,为硬限制,需要设置 以下三个为总文件个数的限制: inodes:已有文件总数,无需要设置 soft:文件总数限制,为软限制,需要设置 hard:文件总数限制,为硬限制,需要设置 我们要限制stu1用户使用空间10 M,最多不能超过12 M,文件总数为200 个, 最多不能超过250 个,设置如下: Filesystem blocks soft hard inodes soft hard /dev/mapper/vg01-lv01 0 10240 12288 0 200 250 注:空间限制是以k为单位的。 grace time: 宽限期,默认7 天 测试: [stu1 @vm1 data ]$ dd if =/dev/zero of=test99 bs=1 M count=11 dm-1 : warning, user block quota exceeded. 11 +0 records in 11 +0 records out11534336 bytes (12 MB) copied, 0.108284 s, 107 MB/s[stu1 @vm1 data ]$ dd if =/dev/zero of=test99 bs=1 M count=13 dm-1 : warning, user block quota exceeded. dm-1 : write failed, user block limit reached. dd: writing 'test99' : Disk quota exceeded 13 +0 records in 12 +0 records out12582912 bytes (13 MB) copied, 0.257964 s, 48.8 MB/s[stu1 @vm1 data ]$ touch file{1 ..6 } dm-1 : warning, user file quota exceeded. [stu1 @vm1 data ]$ touch file{1 ..11 } dm-1 : write failed, user file limit reached. touch: cannot touch 'file10' : Disk quota exceeded touch: cannot touch 'file11' : Disk quota exceeded [stu1 @vm1 data ]$ quota //查看自己的配额情况 Disk quotas for user stu1 (uid 500 ): Filesystem blocks quota limit grace files quota limit grace /dev/mapper/vg01-lv01 12288 * 10240 12288 24 :00 1 5 10 方法二: setquota 方法三:复制 将alice的配额方案复制给后面所有用户 > do > useradd zhang$i > edquota -p stu1 zhang$i > done +++查看配额+++ 查看单个用户的配额: 查看所有用户的配额: 普通用户查看自己配额: $ quota 扩展知识:针对组设置配额 例1 :限制hr组的成员能在/home/hr目录中:100 M 50 文件 drwxrws--- 2 root hr 4096 09 -12 17 :07 /home/hr Disk quotas for group hr (gid 507 ): Filesystem blocks soft hard inodes soft hard /dev/mapper/vg01-lv_home 4 0 102400 1 0 50 =========================================================================== rhel7: 注意: 1 、不需要手动执行quotacheck命令对xfs文件系统进行检查,它会在mount 的时候自动执行2 、不需要在xfs文件系统的根下生成quota数据文件 -x :专家模式-c :交互模式,可加多个
六、GPT分区 gdisk工具分区
parted工具分区
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 GPT 128 个主分区 1 .创建分区2 .创建文件系统(格式化)redhat7默认使用xfs3 .挂载(手动、开机自动、autofs自动)
回想实战 1. 基本练习
添加一块新的10G物理磁盘到你的Linux操作系统中,并将其分为2个分区(大小自己决定)
将sdb1做成大小为2G的逻辑卷lv01挂载到系统中的/u01目录下面,并且在/u01目录下面创建file1~file5 5个文件
假设sdb1分区有坏块,现在需要将sdb1分区上的数据快速放到另外块盘sdb2上,怎么做?
1 2 3 1 . 将/dev/sdb2加入到sdb1所在的卷组中2 . 使用pvmove命令移动[root @server ~]
由于业务需要,/u01目录需要扩大到9G,怎么做?
新建一个卷组,名称为vg0,PEsize为8M ,在卷组中创建一个名为lv02的逻辑卷,大小为50个PE,格式化为ext3,挂载在/mnt/lv01要求每次开机都生效。