在我们的日常工作和学习中,您是否有磁盘爆红占满的情况,导致我们主机的计算机上传下载变慢,加载文件速度慢等等。那么这一章内容希望能帮到您!!!
1.划分分区:
- 进入分区表 ==新建==分区 fdisk /dev/sdb
- 更新分区表<刷新分区表> partprobe /dev/sdb
- 格式化分区——>文件系统 mkfs.ext4 /dev/sdb1
- 挂载使用——>mount【开机自动挂载|手动挂载】
2.fdisk分区
# lsblk 查看磁盘状态的
# df -h 查看正在挂载的设备情况
# fdisk -l 查看当前系统的所有设备分区情况
# fdisk /dev/sdb
https://blog.csdn.net/FightingITPanda/article/details/122187684
硬盘容量 = 柱面数 × 盘面数(磁头数) × 扇区数 × 扇区大小(一般为512字节)
Command(m for help): m/a/b/c/d/l/n/o/p/q/s/t/u/v/w 分区
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 保存分区表 【重要】
常用分区命令:
Command(m for help): m 输出帮助信息
d delete a partition 删除一个分区【重要】
n add a new partition 建立一个新的分区【重要】
p print the partition table 打印分区表【重要】
q quit without saving changes 退出不保存设置【重要】
w write table to disk and exit 保存分区表 【重要】
3.分区步骤:
(1)创建分区列表
添加磁盘(一定要重启)
查看磁盘:
lsblk
df -h
blkid /dev/
ll /dev/
(2)删除分区(只有未挂载的分区才能删除)
mount
fidisk(按d)
part
4.挂载方式
临时挂载、etc/fstable
永久挂载/etc/rc.local
/etc/rc.local 表示操作系统启动后最后一个加载的文件
格式化方式
手动挂载(临时挂载)
开机自动挂载(/etc/rc.local)
5.磁盘分区步骤:
1.添加磁盘(一定要重启)
2.查看磁盘信息(有三种方式)
lsblk
df -h
blkid
3.分区管理
fdisk /dev/sdb
n:创建分区
p:主分区 e:表示拓展分区
w:保存自动退出
4.通知操作系统(已更新分区)
partprobe /etc/sdb
5.格式化(2种格式化方式)
mkfs.EXT4
mkfs.Vfat
6.挂载(挂载到某个路径下)
mount
首先我们来了解几个概念:
1.什么是卷组?
2.什么是物理卷和逻辑卷?
3.常见分区能分成那几个?
卷组、逻辑卷和物理卷是存储管理中的三个重要概念,它们之间的关系可以用大白话来解释如下:
一、概念解释(物理卷、卷组、逻辑卷)
物理卷(PV)物理卷就像是咱们家里的一个个独立的房间(或者一块块独立的硬盘)。这些房间(硬盘)有固定的面积(容量),可以用来存放东西(数据)。在LVM(逻辑卷管理器)里,物理卷就是最基本的存储单位。
卷组(VG)卷组就像是咱们把家里的几个房间(物理卷)打通,形成一个大的空间(存储池)。在这个大空间里,咱们可以更加灵活地摆放东西(分配存储空间)。卷组就是这样一个由多个物理卷组成的逻辑组,它提供了一个统一的存储空间,方便咱们管理和使用。
逻辑卷(LV)逻辑卷就像是咱们在卷组这个大空间里划分出来的一个个小隔间(或者一个个分区)。这些小隔间(逻辑卷)有大有小,可以根据咱们的需要来划分。它们就像是卷组里的一个个独立的小房间,可以用来存放不同类型的东西(不同类型的数据)。逻辑卷就是咱们实际使用的存储设备,它们具有动态调整大小、支持快照和镜像等高级功能的特点。
二、三者之间的关系
物理卷与卷组的关系
咱们可以把物理卷想象成一块块独立的积木,而卷组就是由这些积木搭建起来的一个大房子。没有积木(物理卷),就搭建不起房子(卷组)。同样地,没有物理卷,也就无法形成卷组。
卷组与逻辑卷的关系
卷组就像是咱们家里的一个大客厅,而逻辑卷就像是咱们在客厅里摆放的一个个家具(或者一个个小隔间)。咱们可以根据需要在客厅里摆放不同大小和形状的家具(划分不同大小和属性的逻辑卷),来满足不同的使用需求。
物理卷与逻辑卷的关系
虽然物理卷和逻辑卷在物理上是分开的(它们位于不同的物理存储设备或分区上),但在逻辑上它们是紧密相连的。逻辑卷是由卷组中的物理卷动态分配的空间组成的,因此物理卷的性能和容量会直接影响到逻辑卷的性能和容量。就像咱们家里的家具(逻辑卷)虽然摆放在客厅里(卷组里),但它们实际上是由一块块积木(物理卷)搭建起来的。
综上所述,卷组、逻辑卷和物理卷就像是咱们家里的房间、客厅和家具一样,它们相互配合、相互依存,共同构成了一个灵活、高效的存储管理系统。
三、硬盘
硬盘分为两种:机械硬盘和固态硬盘
硬盘分类:
1.机械硬盘(移动硬盘)
接口类型:
(IDE--SATA I/II/III)
SCSI
优点:
方便、寿命长、便宜
2.固态硬盘(个人一定问接口类型)
知名品牌:西数
优点:高效、贵
PCIE-4.0 :目前最高。
3. 命名方式:
| 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** |
==s===**硬件接口类型**(sata/scsi),==d===**disk(硬盘)**,==a===**第1块硬盘**(b,第二块),==2===**第几个分区**
/dev/hd h=IDE硬盘 /dev/hdd3
/dev/vd v=虚拟硬盘 /dev/vdf7
HP服务器硬盘
/dev/cciss/c0d0
/dev/cciss/**c0d0p1** 表示: c0第一个控制器, d0第一块磁盘, p1分区1
/dev/cciss/c0d0p2 c0第一个控制器, d0第一块磁盘, p2分区2
硬盘分区方式(MBR):
方式一:
1.MBR:**把房子分成卧室和客厅**
**MBR <2TB fdisk** **4个主分区或者3个主分区+1个扩展分区(N个逻辑分区)**
MBR:分为三部分
Bootloader(主引导程序)
引导操作系统的主程序(446字节)
,硬盘的第一个扇区=512字节
DPT(64字节)分区表
- 分区表保存了硬盘的分区信息,**操作系统通过读取分区表内的信息**,就能够获得该硬盘的分区信息
- 每个分区需要占用==**16个字节大小**==,保存有文件系统标识、起止柱面号、磁头号、扇区号、起始扇区位置(4个字节)、分区总扇区数目(4个字节)等内容
- 分区表中保存的分区信息都是==**主分区与扩展分区**==的分区信息,==扩展分区不能直接使用==,需要在扩展分区内划分一个或多个==逻辑分区==后才能使用
- ==逻辑分区的分区信息==保存在==扩展分区内==而不是保存在MBR分区表内,这样,就可以突破MBR分区表只能保存4个分区的限制
硬盘有效标志(校验位)2个字节
方式二:
2.**GPT >2TB gdisk(parted) 128个主分区**
注意:从MBR转到GPT,或从GPT转换到MBR会导致**数据全部丢失**!
拓展
四、硬盘工作原理
一、硬盘的基本组成
硬盘主要由盘片、磁头、盘片主轴、控制电机、磁头控制器、数据转换器、接口、缓存等几个部分组成。其中,盘片是存储数据的介质,表面镀有磁性物质,用于记录数据;磁头则负责读写数据,通过改变或感应盘片表面的磁场状态来实现数据的读写。
二、数据的写入过程
系统指令:当系统需要向硬盘写入数据时,会发送写入指令给硬盘的控制器。
磁头定位:控制器接收到指令后,会指示磁头移动到指定的磁道上。这个过程需要磁头控制器精确控制磁头的位置。
写入数据:磁头到达指定位置后,会通过“写数据”电流产生磁场,改变盘片表面磁性物质的状态,从而将数据写入到盘片上。这个过程是永久性的,即使写电流消失,盘片上的磁性状态也会保持不变。
三、数据的读取过程
系统指令:当系统需要从硬盘读取数据时,会发送读取指令给硬盘的控制器。
磁头定位:与写入过程类似,控制器会指示磁头移动到包含所需数据的磁道上。
读取数据:磁头经过盘片指定区域时,盘片表面的磁场会使磁头产生感应电流或线圈阻抗发生变化。这些变化被转换为电信号,并经过数据转换器处理成计算机可以直接识别的数据。
五、硬盘分区管理
硬盘分区基本分区管理
1.划分分区:
- 进入分区表 ==新建==分区 fdisk /dev/sdb
- 更新分区表<刷新分区表> partprobe /dev/sdb
- 格式化分区——>文件系统 mkfs.ext4 /dev/sdb1
- 挂载使用——>mount【开机自动挂载|手动挂载】
2.fdisk分区
# lsblk 查看磁盘状态的
# df -h 查看正在挂载的设备情况
# fdisk -l 查看当前系统的所有设备分区情况
# fdisk /dev/sdb
https://blog.csdn.net/FightingITPanda/article/details/122187684
硬盘容量 = 柱面数 × 盘面数(磁头数) × 扇区数 × 扇区大小(一般为512字节)
Command(m for help): m/a/b/c/d/l/n/o/p/q/s/t/u/v/w 分区
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 保存分区表 【重要】
常用分区命令:
Command(m for help): m 输出帮助信息
d delete a partition 删除一个分区【重要】
n add a new partition 建立一个新的分区【重要】
p print the partition table 打印分区表【重要】
q quit without saving changes 退出不保存设置【重要】
w write table to disk and exit 保存分区表 【重要】
3.分区步骤:
(1)创建分区列表
添加磁盘(一定要重启)
查看磁盘:
lsblk
df -h
blkid
ll
(2)删除分区(只有未挂载的分区才能删除)
umount /dev/sdb1 /mnt
一、添加分区:
思路:
1. 增加一块硬盘
2. 使用fdisk命令进行分区
3. 格式化指定分区
4. 创建一个空的目录作为挂载点
5. 挂载使用
步骤:
1. 增加硬盘
增加完硬盘记得重启系统 reboot
# lsblk 查看硬盘是否添加成功
...
sdb 8:16 0 10G 0 disk
# ll /dev/sd* 【相同的作用】
[root@web ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = 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: 0x00000000
2. 使用fdisk命令分区
[root@web ~]# fdisk /dev/sdb
Command (m for help): p 打印分区表信息
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = 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: 0x31dd29ec
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 1
Last cylinder, +cylinders or +5(1-1305, default 1305): +1G 分区大小1G
Command (m for help): p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = 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: 0x31dd29ec
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 133
Last cylinder, +cylinders or +size{K,M,G} (133-1305, default 1305): +1G
Command (m for help): p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = 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: 0x31dd29ec
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. 再次查看分区情况
# lsblk
sdb 8:16 0 10G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 1G 0 part
4. 刷新分区表信息
[root@web ~]# partprobe /dev/sdb
[root@nfs-server ~]# mount /dev/sdb1 /mnt
mount: /dev/sdb1 is write-protected, mounting read-only
mount: unknown filesystem type '(null)' 【记得格式化】
# blkid 【没有格式化的,没有类型的,不会在这个表里面】查看磁盘分区表
5. 格式化分区
[root@web ~]# mkfs.ext4 /dev/sdb1
扩展[主要是创建的文件类型同]
[root@web ~]# yum -y install dosfstools 需要mkfs.vfat命令,安装软件
[root@web ~]# mkfs.vfat /dev/sdb2
[root@web ~]# blkid
/dev/sdb1: UUID="fdf45175-c7be-4587-8655-9fbdf6681f4e" TYPE="ext4"
/dev/sdb2: UUID="66A1-04C5" TYPE="vfat"
6. 创建新的挂载点
[root@web ~]# mkdir /mnt/u01 /mnt/u02
7. 挂载使用
[root@web ~]# mount /dev/sdb1 /mnt/u01
[root@web ~]# mount /dev/sdb2 /mnt/u02
mkfs.vfat 和 mkfs.ext4 是两个用于格式化磁盘分区的命令,但它们创建的文件系统类型不同,因此具有不同的特性和用途。
mkfs.vfat: 【它通常用于可移动存储设备,如USB闪存驱动器】
这个命令用于创建一个FAT(文件分配表)文件系统。VFAT文件系统广泛兼容于多种操作系统,包括Windows、macOS和Linux。它通常用于可移动存储设备,如USB闪存驱动器、SD卡等,因为这些设备需要在不同的操作系统之间频繁交换数据。
VFAT文件系统不支持文件权限(如Linux中的读、写、执行权限)和链接(如硬链接或软链接)。
mkfs.ext4:
这个命令用于创建一个EXT4文件系统,它是EXT3文件系统的后续版本,具有更高的性能和更多的特性。
EXT4是Linux系统中常用的文件系统之一,支持大量的高级特性,如更大的文件大小、更多的子目录、文件权限、扩展属性、快照等。
EXT4文件系统特别适合于需要高性能和可靠性的Linux服务器和桌面系统。
总结:
mkfs.vfat 创建一个广泛兼容但功能相对简单的文件系统,适用于需要跨平台数据交换的场景。
mkfs.ext4 创建一个功能丰富、性能优化的文件系统,专为Linux系统设计,适用于需要高级文件系统特性的场景。
查看:
2、使用fdisk开始分区
刷新磁盘信息。
使用分区时只要挂载成功就可以了!!!
注意事项!!!!
扩展分区的大小决定了所有==逻辑分区==的大小
删除扩展分区后下面的逻辑分区都被删除
分完区后需要==手动刷新分区表==,如果刷新不成功需要==重启操作系统==
[root@nfs-server mnt]# partprobe /dev/sdd partx: /dev/sdd: error adding partition 3
创建分区的时候尽可能注意分区序号的连续性
只能删除没有挂载的分区
五、手动挂载(临时挂载)与永久挂载(开机自动挂载)
临时挂载(手动挂载):
mount [options] 需要挂载的设备 挂载点
特点:系统重启后需要重新挂载;手动卸载后需要手动挂载
-o:挂载选项 ro,sync,rw,remount
-t:文件系统类型
mount -t nfs=mount.nfs
mount -t cifs=mount.cifs
10.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@localhost ~]# mount -o remount,ro /mnt/u02 //可以是挂载点也可以是设备
remount:重新挂载一个正在挂载的设备
# mount -o remount,ro /dev/sdb1
# mount -o remount,ro /mnt/u01
注意:后面可以根挂载点也可以跟设备本身
# mount /dev/sdb3 /mnt/u03/ 默认挂载,可读可写【常用】
挂载设备:真实设备、设备UUID,设备的卷标
/dev/sdb
/dev/sdb1
[root@localhost ~]# blkid /dev/sdb1 //查看设备的UUID和文件系统类型
/dev/sdb1: UUID="FD3A-F14D" TYPE="vfat"
[root@localhost ~]# blkid /dev/sdb2
/dev/sdb2: UUID="f1cc2198-7e5f-4408-9c74-9b93d4716d8d" TYPE="ext4"
[root@server ~]# e2label /dev/sdb1 DISK1
说明:e2label只能够对ext2~ext4的文件系统设置卷标
【只能给ext4 命名 vfat格式不能命名】
[root@localhost ~]# e2label /dev/sdb2 disk2
[root@localhost ~]# blkid /dev/sdb2
/dev/sdb2: UUID="f1cc2198-7e5f-4408-9c74-9b93d4716d8d" TYPE="ext4" LABEL="disk2"
卸载设备:umount
[root@localhost ~]# umount /mnt/u01
[root@localhost ~]# umount /dev/sdb2
自动挂载(系统开机自动挂载):
操作系统启动流程:
硬件初始化 硬盘、内存、。。。HD
系统初始化 /sbin/init—>xxxxxx/etc/fstab
# vim /etc/fstab //开机自动挂载
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
特点:系统重启后自动挂载;手动卸载后重启会自动挂载或者使用mount -a自动挂载
/etc/fstab文件:
格式:
要挂载的资源路径 挂载点 文件系统类型 挂载选项 dump备份支持 文件系统检测
UUID=289370eb-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是其次才进行检验。
# fsck -f /dev/sdb2 强制检验/dev/sdb2上文件系统
说明:
要挂载的资源路径可以是文件系统的UUID,设备路径,文件系统的标签 ,光盘镜像文件(iso),亦或是来自网络的共享资源等
建议:
/etc/rc.local 操作系统启动后读取的最后一个文件 【注意这是一个链接文件、快捷方式】
vim /etc/rc.local
...
/usr/bin/mount -o noexec,ro /dev/sdb1 /mnt/u01
[root@nfs-server ~]# ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 Jul 2 17:25 /etc/rc.local -> rc.d/rc.local
[root@nfs-server ~]# ll /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 522 Jul 12 01:58 /etc/rc.d/rc.local
[root@nfs-server ~]# chmod +x /etc/rc.d/rc.local
[root@nfs-server ~]# reboot
[root@nfs-server ~]# lsblk df -hT
扩展:
# systemctl enable nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
把我们自己定义的服务,变成一个系统服务,然后开机自启动
# ll /etc/systemd/system/multi-user.target.wants
multi-user.target与运行级别
multi-user.target:是systemd中的一个目标(target),它相当于传统的init系统中的运行级别3(multi-user.target),即多用户命令行模式。在此模式下,网络服务已启动,但无图形界面。
运行级别:在systemd中,目标(target)是运行级别的现代替代品。它们代表系统应该达到的状态,而不仅仅是登录终端的数量。multi-user.target是这些目标之一,用于定义多用户命令行模式的状态。
设备挂载的方式注意事项:!!!!!
设备要被挂载,必须要有文件系统类型(mkfs.类型)
手动挂载mount mount -o 挂载选项(ro,rw,auto,noexec...) 需要挂载设备 挂载点
重启需要再次重新挂载
开机自动挂载
/etc/fstab 修改特别小心(不建议)
修改/etc/rc.local文件 启动后最后读取文件,执行该文件必须要有可执行权限
写满一个磁盘需要几步?
dd if=/dev/zero of=/mnt/disk4/1.txt bs=1M count=1000
基本磁盘,缺点是无法调整大小!!!
六、逻辑卷
物理卷(Physical Volume,PV)
物理卷是底层==真正提供容量==,存放数据的设备,它可以是整个硬盘、硬盘上的分区等。
卷组(Volume Group, VG)
卷组建立在物理卷之上,它由==一个或多个物理卷==组成。即把物理卷整合起来提供容量分配。 一个LVM系统中可以只有一个卷组,也可以包含多个卷组。
逻辑卷(Logical Volume, LV)
逻辑卷建立在卷组之上,它是从卷组中“切出”的一块空间。它是==最终用户使用的逻辑设==备。逻辑卷创建之后,其==大小可以伸缩==。
物理区域 PE(physical extent)【理论考点】
每一个物理卷被划分为称为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 extent)
逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
lvm创建方式:管理方式
真实的物理设备——>逻辑上(命令创建)——>物理卷(pv)——>卷组(vg)——>逻辑卷(lv)——>逻辑卷格式化——>挂载使用
逆向是删除
3. 逻辑卷LVM应用
创建顺序:正向是创建,逆向是删除。。。。
pv->gv->lv(创建)
lv->gv->pv (删除)
3.1 逻辑卷创建
需求:创建一个2.5G大小的==逻辑卷==
思路:
1. 物理的设备
2. 将物理设备做成物理卷 pv
3. 创建卷组并将物理卷加入其中 vg
4. 创建逻辑卷 lv
5. 格式化逻辑卷 mkfs.ext4
6. 挂载使用 mount
步骤:
1. 物理设备【如何来分区】
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 2G 0 part
├─sdb2 8:18 0 2G 0 part
├─sdb3 8:19 0 2G 0 part
├─sdb4 8:20 0 2G 0 part
├─sdb5 8:21 0 2G 0 part
├─sdb6 8:22 0 2G 0 part
├─sdb7 8:23 0 2G 0 part
└─sdb8 8:24 0 2G 0 part
2. 创建物理卷
[root@server ~]# pvcreate /dev/sdb1 /dev/sdb2
查看物理卷:
[root@server ~]# pvs 简单查看pvscan
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 a-- 2.01g 2.01g
/dev/sdb2 lvm2 a-- 2.01g 2.01g
[root@server ~]# pvdisplay /dev/sdb1 详细查看
3. 创建卷组并将物理卷加入其中
[root@server ~]# vgcreate vg01 /dev/sdb1 /dev/sdb2
Volume group "vg01" successfully created
查看卷组信息:
[root@server ~]# vgs vg01 简单查看
VG #PV #LV #SN Attr VSize VFree
vg01 2 0 0 wz--n- 4.01g 4.01g
[root@server ~]# vgdisplay vg01 详细查看
4. 创建逻辑卷 【重点】
[root@server ~]# lvcreate -n lv01 -L 2.5G vg01
Logical volume "lv01" created
在操作系统层面映射两个地方:
[root@server ~]# ll /dev/mapper/vg01-lv01
lrwxrwxrwx 1 root root 7 Jan 7 11:16 /dev/mapper/vg01-lv01 -> ../dm-2
[root@server ~]# ll /dev/vg01/lv01
lrwxrwxrwx 1 root root 7 Jan 7 11:16 /dev/vg01/lv01 -> ../dm-2
结论:其实同时指向了:/dev/dm-2
注意逻辑卷的顺序:
[root@nfs-server dev]# ll /dev/mapper/centos-root
lrwxrwxrwx 1 root root 7 Aug 20 19:37 /dev/mapper/centos-root -> ../dm-0
[root@nfs-server dev]# ll /dev/mapper/centos-swap
lrwxrwxrwx 1 root root 7 Aug 20 19:37 /dev/mapper/centos-swap -> ../dm-1
[root@nfs-server dev]# ll /dev/mapper/vg01-lv01
lrwxrwxrwx 1 root root 7 Aug 20 19:47 /dev/mapper/vg01-lv01 -> ../dm-2
查看逻辑卷的信息:
[root@server ~]# lvdisplay /dev/vg01/lv01
-n:指定逻辑卷的名字
-L:指定逻辑卷的大小 --size Size[m|UNIT] VG 【常用】
-l:指定逻辑卷的大小 --extents Number[PERCENT]
举例:
-l 100 100个PE,每个PE大小默认4M,故逻辑卷大小为400M 【相对小的lv】
-l 50%free 卷组剩余空间的50%
[root@server ~]# vgs vg01
VG #PV #LV #SN Attr VSize VFree
vg01 1 1 0 wz--n- 2.00g 516.00m
创建大小为200M的逻辑卷lv02;每个PE为4M,-l50指定50个PE,大小为200M
[root@server ~]# lvcreate -n lv02 -l50 vg01
Logical volume "lv02" created
[root@server ~]# vgs vg01
VG #PV #LV #SN Attr VSize VFree
vg01 1 2 0 wz--n- 2.00g 316.00m
[root@server ~]# lvs /dev/vg01/lv02
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv02 vg01 -wi-a----- 200.00m
创建大小为剩余卷组vg01空间的50%的逻辑卷lv03
[root@server ~]# lvcreate -n lv03 -l50%free vg01
Logical volume "lv03" created
[root@server ~]# lvs /dev/vg01/lv03
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv03 vg01 -wi-a----- 156.00m
[root@server ~]# vgs vg01
VG #PV #LV #SN Attr VSize VFree
vg01 1 3 0 wz--n- 2.00g 160.00m
5. 格式化逻辑卷
[root@server ~]# mkfs.ext4 /dev/vg01/lv01
6. 挂载使用
1)创建一个空的挂载点
2)挂载使用
[root@server ~]# mount /dev/vg01/lv01 /mnt/u01
3.2 逻辑卷动态扩容
需求:将/mnt/u01目录动态扩容到3
思路:
1. 查看/mnt/u01目录所对应的逻辑卷是哪一个 /dev/mapper/vg01-lv01
2. 查看当前逻辑卷所在的卷组vg01剩余空间是否足够
测试:# dd if=/dev/zero of=testfile count=5 bs=1G
3. 如果vg01空间不够,得先扩容卷组,再扩容逻辑卷
4. 如果vg01空间足够,直接扩容逻辑卷
步骤:
1. 查看/mnt/u01目录属于哪个卷组
[root@web ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg01-lv01 2.4G 2.4G 0 100% /mnt/u01
[root@web ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Conver
lv01 vg01 -wi-ao---- 1.50g
2. 卷组的剩余空间
[root@web ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 1 2 0 wz--n- 19.70g 0
vg02 1 1 0 wz--n- 2.00g 516.00m
结果:当前卷组空间不足我扩容
3. 扩容逻辑卷所在的卷组
1)首先得有物理设备 /dev/sdb3
2) 将物理设备做成物理卷
# pvcreate /dev/sdb3
3)将物理卷加入到卷组中(卷组扩容)
[root@web ~]# vgextend vg01 /dev/sdb3
Volume group "vg01" successfully extended
[root@web ~]# pvs
注意:
正常情况下,应该先将/dev/sdb3物理设备创建为物理卷再加入到卷组中;如果直接加入卷组,系统会自动帮你将其做成物理卷。
[root@web ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 3 3 0 wz--n- <5.99g 2.64g
4. 扩容逻辑卷 【第二种方式用的多】
[root@web ~]# lvextend -L 3G /dev/vg01/lv01 -L 3G最终的大小
或者
[root@web ~]# lvextend -L +1.5G /dev/vg01/lv01 -L +1.5G 扩容1.5G
5. 查看结果
[root@web ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv_root vg01 -wi-ao---- 17.70g
lv_swap vg01 -wi-ao---- 2.00g
lv01 vg02 -wi-ao---- 3.00g 已经扩容到了3G
[root@web ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg01-lv_root 18G 5.9G 11G 36% /
tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 291M 33M 244M 12% /boot
/dev/sr0 4.2G 4.2G 0 100% /mnt
/dev/mapper/vg02-lv01 1.5G 35M 1.4G 3% /u01 实际并没有改变
6. 同步文件系统
[root@web ~]# resize2fs /dev/vg01/lv01
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg01/lv01 is mounted on /mnt/u01; on-line resizing required 【在线扩容成功】
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg01/lv01 is now 825344 blocks long.
7. 再次查看验证
[root@web ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg01-lv_root 18G 5.9G 11G 36% /
tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 291M 33M 244M 12% /boot
/dev/sr0 4.2G 4.2G 0 100% /mnt
/dev/mapper/vg02-lv01 3.0G 35M 2.8G 2% /u01 扩容成功
3.3 逻辑卷相关命令
创建物理卷:pvcreate
pvcreate /dev/sdb1
创建卷组:vgcreate
vgcreate vg01 /dev/sdb1
创建逻辑卷:lvcreate 【三种方式】
lvcreate -n lv01 -L 1G vg01 1G
lvcreate -n lv01 -l 100 vg01 400M
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 +2G
同步文件系统:
resize2fs /dev/vg01/lv01
裁剪卷组:vgreduce
vgreduce vg01 /dev/sdb2
裁剪逻辑卷:lvreduce
扩容swap空间
增加一个硬盘或者分区来扩容swap空间
作用: ‘提升' 内存的容量,防止OOM(Out Of Memory)(内存溢出) 虚拟内存
设置交换分区大小为内存的2倍
生产(约定)
大于 4GB 而小于 16GB 内存的系统,最小需要 4GB 交换空间;
大于 16GB 而小于 64GB 内存的系统,最小需要 8GB 交换空间;
大于 64GB 而小于 256GB 内存的系统,最小需要 16GB 交换空间。
查看swap空间大小:
[root@web ~]# free -m
total used free shared buffers cached
Mem: 1861 646 1215 0 9 60
-/+ buffers/cache: 576 1285
Swap: 2047 0 2047
[root@web ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2097144 0 -1
[root@web ~]# mkswap /dev/sdb8
Setting up swapspace version 1, size = 2104476 KiB
no label, UUID=485ff8ad-a636-4556-a2e7-4ee9efc78afb
[root@web ~]# blkid /dev/sdb8
/dev/sdb7: UUID="485ff8ad-a636-4556-a2e7-4ee9efc78afb" TYPE="swap"
//激活swap分区。swap空间不能手动挂载
[root@server ~]# swapon /dev/sdb8
[root@server ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2031608 0 -1
/dev/sdb7 partition 2064312 0 -2
作业:可以尝试做一下!!
思路: [实战完整流程]
0. 准备好物理设备,并创建一个逻辑卷,大小根据mysql数据库的实际大小再大一些,挂载到系统中
1. 最好在系统维护时间操作(23:00-8:00)
2. 先停止前端应用 LAMP apache
3. 停止mysql数据库(建议备份mysql数据库) [重点]
4. 迁移mysql数据文件
步骤:
1. 添加一块物理硬盘[是否需要重启开服务器是否支持热插拔]
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 2G 0 part
├─sdb2 8:18 0 2G 0 part
├─sdb3 8:19 0 2G 0 part
├─sdb4 8:20 0 2G 0 part
├─sdb5 8:21 0 2G 0 part
├─sdb6 8:22 0 2G 0 part
├─sdb7 8:23 0 2G 0 part
└─sdb8 8:24 0 2G 0 part
2. 创建大小为8G的逻辑卷
1)创建物理卷
[root@server ~]# pvcreate /dev/sdb[12345]
2)创建卷组vg_mysql
[root@server ~]# vgcreate vg_mysql /dev/sdb[12345]
[root@server ~]# vgs vg_mysql
VG #PV #LV #SN Attr VSize VFree
vg_mysql 5 0 0 wz--n- 9.98g 9.98g
3)创建逻辑卷lv_mysql
[root@server ~]# lvcreate -n lv_mysql -L 8G vg_mysql
[root@server ~]# lvs /dev/vg_mysql/lv_mysql
lv_mysql vg_mysql -wi-a----- 8.00g
4)格式化为ext4文件系统
[root@server ~]# mkfs.ext4 /dev/vg_mysql/lv_mysql
5)挂载使用
a. 创建一个空的挂载点/u01
[root@server ~]# mkdir /u01
b. 挂载逻辑卷lv_mysql到/u01目录
[root@server ~]# mount /dev/vg_mysql/lv_mysql /u01
3. 停止前端web服务 【如果没有mysql服务,请安装】
# rpm -ivh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
# yum -y install mysql-community-server
[root@server ~]# systemctl restart mysqld
# netstat -ntlp
4. 停止mysql数据库
# systemctl stop mysqld
[root@server ~]# systemctl status mysqld
5. 备份mysql数据库到另外一台备份机 (实验环境不是必须)
备份机:10.1.1.2 备份目录:/backup
[root@server ~]# rsync -av /var/lib/mysql 10.1.1.2:/backup/
6. 将/usr/local/mysql/目录里的所有数据文件同步到逻辑卷上,即/u01目录
[root@server ~]# rsync -av /var/lib/mysql/ /u01
查看是否同步完成:
[root@server ~]# ls /u01
[root@server ~]# du -sh /u01 查看大小是否和原来mysql数据库大小一致
7. 卸载逻辑卷
[root@server ~]# umount /u01
8. 删除/usr/local/mysql/目录里原来的数据文件
注意:删之前一定要确定成功备份了!!!
[root@server ~]# rm -rf /var/lib/mysql/*
9. 挂载逻辑卷lv_mysql到mysql的安装目录/usr/local/mysql
[root@server ~]# mount /dev/vg_mysql/lv_mysql /var/lib/mysql/
开机自动挂载:
vim /etc/rc.local
...
/usr/bin/mount /dev/vg_mysql/lv_mysql /var/lib/mysql/
10. 启动数据库
[root@server ~]# systemctl restart mysqld
11. 启动web服务
[root@server ~]# systemctl status mysqld
12.测试验证
访问之前的网站看是否可以正常访问
ps -ef|grep mysql
lsof -i:3306
systemctl status mysql
netstat -tnlpnetstat -tnlp| grep mysql
ss -tnlp |grep mysql
telnet localhost 3306
systemctl stop mysqld
systemctl status mysqld
lvm:表示逻辑卷
part:分区
disk:磁盘
七、GTP分区
parted工具区分
# yum install -y gdisk
GPT 128个主分区
1.创建分区
# gdisk -l /dev/sdc
# gdisk /dev/sdc
# partprobe /dev/sdc
# ll /dev/sdc*
2.创建文件系统(格式化)redhat7默认使用xfs
# mkfs.xfs /dev/sdc1
3.挂载(手动、开机自动、autofs自动)
# mkdir /mnt/disk1
# mkdir /mnt/disk2
# mount -t xfs -o ro /dev/sdb1 /mnt/disk1 //手动挂载
# umount /mnt/disk1
八、实战
1、基本练习
添加一块新的10G物理磁盘到你的Linux操作系统中,并将其分为2个分区(大小自己决定)
将sdb1做成大小为2G的逻辑卷lv01挂载到系统中的/u01目录下面,并且在/u01目录下面创建file1~file5 5个文件
假设sdb1分区有坏块,现在需要将sdb1分区上的数据快速放到另外块盘sdb2上,怎么做?
1. 将/dev/sdb2加入到sdb1所在的卷组中
2. 使用pvmove命令移动
[root@server ~]# pvmove /dev/sdb1 /dev/sdb2
由于业务需要,/u01目录需要扩大到9G,怎么做?
2、实战演练
部署好LAMP环境,MySQL数据库在本机的根文件系统中(如环境已有可以直接用)
添加一块虚拟硬盘,使用LVM逻辑卷管理,将MySQL迁移到逻辑卷中,并保证网站正常访问
一、磁盘分区(挂载练习):
1.手动挂载过程
yum -y install lrzsz
yum -y install inotify-tools
yum -y isntall dosfstools (格式化分区一定要装,mkfs.vfat命令需要)
lsblk:先显示原有磁盘是否挂载和分区
fdisk /etc/sdb1:相应路径下的磁盘进行分区
lsblk:查看分区情况
partprobe /dev/sdb:刷新分区(通知操作系统)
mkfs.ext4 /etc/sdb1 或者mkfs.Vfat /etc/sdb1:格式化磁盘(mkds.Vfat格式介于windows和linux之间,**mkfs.ext4格式则是用于linux中使用**)
blkid:查看是否格式化成功
mount /etc/sdb1 /mnt :将、etc/sdb1挂载到 /mnt下
lsblk:显示是否挂载成功
df -h :显示高可读挂载成功
umount /etc/sdb1 /mnt/u01 :挂载、etc/sdb1 磁盘到、mnt/u01上(每次挂载都要刷新磁盘,通知操作系统)
如果需要重新挂载必须是已经挂载好的才能重新挂载。
e2label /dev/sdb1 DISK1 :设置卷的标记说明:e2label只能够对ext2~ext4的文件系统设置卷标 [起一个别名]
如果不想要了就移除挂载:
(原本有的挂载点)
2.开机自动挂载:建立在没有挂载点的情况下。
rc.local文件未加权限
将自定义的服务变成一个系统,把我们自己定义的服务,变成一个系统服务,然后开机自启动
总结:挂载设备的方式【考点总结】
设备要被挂载,必须要有文件系统类型(mkfs.类型)
手动挂载mount mount -o 挂载选项(ro,rw,auto,noexec...) 需要挂载设备 挂载点
重启需要再次重新挂载
开机自动挂载
/etc/fstab 修改特别小心(不建议)
修改/etc/rc.local文件 启动后最后读取文件,执行该文件必须要有可执行权限
写满一个磁盘需要几步?
dd if=/dev/zero of=/mnt/disk/1.txt bs=1M count=1000
基本磁盘,缺点是无法调整大小!!!