目录
一、认识磁盘
1、什么是磁盘:
2、磁盘运行机理:
3、磁盘的扇区、磁道、柱面:
4、磁盘的分类:
??
二:磁盘分区
1、为什么要分区
2、分区格式:
?3、磁盘分区工具:
4、MBR分区
fdisk工具:常用命令含义
fdisk创建分区:
5、GPT分区
gdisk创建分区
四 :格式化制作文件系统与挂载?
挂载与卸载: 以/dev/sdb2 为例子演示
开启开机自动挂载
补充:磁盘挂载mount
五:制作swap分区
六:Dell R740服务器配置RAID5+1
七:修复服务器文件系统:
八:xfs文件系统备份与回复
九:LVM
为什么要用lvm
什么是lvm?
?lvm优缺点总结:
LVM使用:
动态在线扩容:
一、认识磁盘
1、什么是磁盘:
磁盘(disk)是指利用磁记录技术存储数据的存储器。 磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk,简称硬盘)。 磁盘是一种计算机的外部存储器设备,由一个或多个覆盖有磁性材料的铝制或玻璃制的碟片组成,用来存储用户的信息,这种信息可以反复地被读取和改写。绝大多数磁盘被永久封存在一个密封的盒子里。
2、磁盘运行机理:
简单来说就是多个盘片之间靠主轴连接,电机带动主轴做旋转运动,通过多个磁头臂的摇摆和磁盘的旋转,磁头就可以在磁盘旋转的过程中就读取到磁盘中存储的各种数据 ?
3、磁盘的扇区、磁道、柱面:
1、磁道:磁盘的每个盘面被划分为许多同心圆,这些同心圆的轨道叫做磁道。每个盘面可以划分多个磁道 Track。但是肉眼不可见。? 2、扇区:一个盘面划分为若干个内角相同的扇形,这样盘面上的每个磁道就被分为若干段圆弧,每段圆弧叫做一个扇区。每个扇区中的数据作为一个单元同时被读入或写入。每一个扇区是512字节,其中有64个字节存储的是分区表,一条分区信息占16个字节。硬盘出厂时候会对磁盘进行一次低级格式化,会将每个磁道划分为多个圆弧,每个圆弧段称为扇区Sector, 扇区是数据存储的基本物理单位,每个扇区大小512bytes。? 3、柱面:每一个盘片同一大小的同心圆可以看成连在一起的柱面,磁盘在分区的时候最小单位是柱面,每一个盘片的上下面都可以读取数据,每一个磁头,不可以跨盘面读取数据。简单来说就是处于同一个垂直区域的磁道称为柱面 ,即各盘面上面相同位置磁道的集合。这样数据如果存储到相同半径磁道上的同一扇区,这样可以实现并行读取,主要是减少磁头寻道时间。两个柱面之间的扇区称为一个分区。? 4、盘片 硬盘一般有一个或多个盘片,每个盘片可以有两面,即第一个盘片的正面为0面,反面为1面然后依次类推。? 5、平均寻道时间 7200转/60s的硬盘 120转/s 机械手臂找到磁道大概需要5ms? 7、平均延迟时间 转半圈4ms 大概需要 所以机械磁盘慢就是慢在找数据 = 平均寻道时间+平均延迟时间 8、磁头读取磁道上面的金属块,主要负责读或写入数据。
4、磁盘的分类:
(1)IDE磁盘:特点价格低廉,兼容性强,性价比高,数据传输慢,不支持热插拔等等。 (2)SCSI磁盘:传输速率高,读写性能好,运行稳定,可连接多个设备。可支持热插拔,占用CPU低,但是价格相对来说比较贵,一般用于工作站或服务器上。 (3)SATA磁盘:结构简单、支持热插拔 (4)USB (5)MSATA (6)M.2 其中IDE的磁盘的文件名为 ?/dev/hd[a-d] 而SCSI、SATA、USB的磁盘文件名为 /dev/sd[a-p] ?
?
二:磁盘分区
主分区-->扩展分区-->逻辑分区。
1、逻辑分区属于扩展分区,扩展分区属于主分区
2、主分区又叫做引导分区,是可以安装系统的分区
?
1、为什么要分区
1、为什么要分区
(1)易于管理和使用:
比如说我们把磁盘分了sda1、sda2、sda3、sda4盘,我们假设sda1盘为系统盘,其他的比如说游戏、办公、软件盘,这样我们要重新分哪个区就直接在对应的盘分就可以了,不需要整块磁盘进行分区。根据用途我们也能较快的去使用相应的磁盘。
(2)有利于数据的安全:
通过分区可以降低数据损失的风险。出现硬盘坏道、错误操作、重装系统都有可能造成数据损失,如果分区了,那么我们就可以将损失最小化。
(3)节约寻找文件的时间:
这个我觉得跟第一条比较像,但是这里所说的寻找文件的时间,是指电脑搜索文件的时间。分区以后,电脑搜索文件时只需要在相对应的分区搜索就可以了,没必要进行全盘搜索。大大节省了寻找文件的时间。
2、分区格式:
磁盘的常见分区格式:MBR分区和GPT分区:
MBR 分区,MBR 的意思是 "主引导记录"。MBR 最大支持 2TB 容量,在容量方面存在着极大的瓶颈。
MBR分区最多可以分4个分区
GPT 分区,GPT 意为 GUID 分区表,它支持的磁盘容量比 MBR 大得多。
这是一个正逐渐取代 MBR 的新标准,它是由 UEFI 辅住而形成的,将来 UEFI 用于取代老旧的 BIOS,而 GPT 则取代老旧的 MBR。
GPT分区最多可以分128个分区
?3、磁盘分区工具:
磁盘分区工具:
fdisk工具用于 MBR格式
gdis工具用于 GPT格式
4、MBR分区
操作步骤如下:
命令:fdisk
fdisk分区:
1、最多只有4个分区
2、 第一步:创建分区
fdisk /dev/sdb
n : 创建一个分区
d : 删除一个分区
p : 打印分区列表
w : 写入磁盘
第二步:保存分区
w : 写入磁盘
3、制作文件系统
mkfs.xfs /dev/sdb1
4、挂载使用
mount /dev/sdb1 /opt
5、查看
lsblk
具体操作极其解释:查看分区详情,和分区情况
查看分区详情,和分区情况
[root@test ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 512M 0 part /boot
└─sda2 8:2 0 99.5G 0 part
├─centos-root 253:0 0 99G 0 lvm /
└─centos-swap 253:1 0 512M 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
sr0 11:0 1 1024M 0 rom
[root@test ~]# lsblk /dev/sda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 512M 0 part /boot
└─sda2 8:2 0 99.5G 0 part
├─centos-root 253:0 0 99G 0 lvm /
└─centos-swap 253:1 0 512M 0 lvm [SWAP]
[root@test ~]#
[root@test ~]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 10G 0 disk
fdisk工具:常用命令含义
适用于磁盘小于2T的磁盘,分区类型MBR,主分区4或者主分区3+扩展分区,分区后需要保存才能生效。
# fdisk /dev/sdb
Command (m for help): m #输入m列出常用的命令
Command action
a toggle a bootable flag #切换分区启动标记
b edit bsd disklabel #编辑sdb磁盘标签
c toggle the dos compatibility flag #切换dos兼容模式
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 #创建新的空白分区表
p print the partition table #显示分区表的信息
q quit without saving changes #不保存退出
s create a new empty Sun disklabel #创建新的Sun磁盘标签
t change a partitions system id #修改分区ID,可以通过l查看id
u change display/entry units #修改容量单位,磁柱或扇区
v verify the partition table #检验分区表
w write table to disk and exit #保存退出
x extra functionality (experts only) #拓展功能
n #新建分区
p #显示分区表的信息
d # 删除一个已有的分区,保存退出后需要执行partprobe命令刷新一下分区表
w #保存退出
fdisk创建分区:
# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x12c57921 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+1G
分区 1 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x12c57921
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
命令(输入 m 获取帮助):
#####
重复上述步骤,创建4个1G的主分区
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x12c57921
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 4196351 1048576 83 Linux
/dev/sdb3 4196352 6293503 1048576 83 Linux
/dev/sdb4 6293504 8390655 1048576 83 Linux
####
之后再创建新的分区就会失败。即使有足够的空间。
命令(输入 m 获取帮助):
命令(输入 m 获取帮助):n
If you want to create more than four partitions, you must replace a
primary partition with an extended partition first.
命令(输入 m 获取帮助):
#####
删除主分区4,把剩余的空间都给他
命令(输入 m 获取帮助):d # 删除主分区4
分区号 (1-4,默认 4):4
分区 4 已删除
命令(输入 m 获取帮助):p # 查看
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x12c57921
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 4196351 1048576 83 Linux
/dev/sdb3 4196352 6293503 1048576 83 Linux
命令(输入 m 获取帮助):n # 新建扩展分区
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): e # 选择创建扩展分区
已选择分区 4
起始 扇区 (6293504-41943039,默认为 6293504):
将使用默认值 6293504
Last 扇区, +扇区 or +size{K,M,G} (6293504-41943039,默认为 41943039): # 直接回车,剩余空间都给它
将使用默认值 41943039
分区 4 已设置为 Extended 类型,大小设为 17 GiB
命令(输入 m 获取帮助):p # 查看
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x12c57921
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 4196351 1048576 83 Linux
/dev/sdb3 4196352 6293503 1048576 83 Linux
/dev/sdb4 6293504 41943039 17824768 5 Extended
命令(输入 m 获取帮助): w # 保存
#######
查看sdb分区。
[root@test ~]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 10G 0 disk
├─sdb1 8:17 0 1G 0 part
├─sdb2 8:18 0 1G 0 part
├─sdb3 8:19 0 1G 0 part
└─sdb4 8:20 0 1K 0 part
5、GPT分区
# 需要安装命令
[root@egon ~]# yum install gdisk -y
[root@egon ~]# gdisk /dev/sdc
......
Command (? for help): m
b back up GPT data to a file #将GPT数据备份到文件中
c change a partition's name #更改分区的名称
d delete a partition #删除分区
i show detailed information on a partition #显示分区的详细信息
l list known partition types #列出已知的分区类型
n add a new partition #添加一个新的分区
o create a new empty GUID partition table (GPT) #创建一个新的空GUID分区表(GPT)
p print the partition table #打印分区表
q quit without saving changes #没有保存更改就退出
r recovery and transformation options (experts only) #恢复和转换选项(仅限专家使用)
s sort partitions #年代分类分区
t change a partition's type code #不要更改分区的类型代码
v verify disk #验证磁盘
w write table to disk and exit #将表写入磁盘并退出
x extra functionality (experts only) #额外功能(仅限专家使用)
? print this menu #打印菜单
gdisk创建分区
Command (? for help): n # 新建
Partition number (1-128, default 1): # 直接回车,默认分区号为1
First sector (34-5242879966, default = 2048) or {+-}size{KMGTP}: #直接回车,使用默认的起始位置
Last sector (2048-5242879966, default = 5242879966) or {+-}size{KMGTP}: +1G # 设定1G的空间
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): L # 列出所有文件系统
......会看到一系列文件系统信息,默认的8300编号代表Linux filesystem,用它就好
Hex code or GUID (L to show codes, Enter = 8300): # 直接回车用默认8300就好
Changed type of partition to 'Linux filesystem'
Command (? for help): p # 打印查看
......
Number Start (sector) End (sector) Size Code Name
1 2048 2099199 1024.0 MiB 8300 Linux filesystem
Command (? for help): w # 保存
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y # 输入y保存
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.
四 :格式化制作文件系统与挂载?
磁盘必须格式化文件系统才能挂载使用
针对一个硬盘 /dev/sdb
可以不分区,直接格式化制作文件系统。
mkfs.xfs /dev/sdb
也可以基于MBR或者GPT分区方式完毕后,针对某一分区,比如/dev/sdb2制作文件系统。
[root@test ~]# mkfs.xfs /dev/sdb2
meta-data=/dev/sdb2 isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
centos7选择xfs格式作为默认文件系统,而且不再使用以前的ext,仍然支持ext4,xfs专为大数据产生,每个单个文件系统最大可以支持8eb,单个文件可以支持16tb,不仅数据量大,而且扩展性高。还可以通过xfsdump,xfsrestore来备份和恢复。
挂载与卸载: 以/dev/sdb2 为例子演示
[root@test ~]# mkdir /opt2
[root@test ~]# ls
2.sh anaconda-ks.cfg date file2 init.sh nginx-1.8.0 nginx-1.8.0.tar.gz passwd
[root@test ~]# mount /dev/sdb2 /opt2
[root@test ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 979M 0 979M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 18M 973M 2% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root 99G 2.8G 97G 3% /
/dev/sda1 509M 157M 353M 31% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/sdb2 1014M 33M 982M 4% /opt2
卸载
umount /dev/sdb1 # 或者umount /opt
[root@test ~]# umount /dev/sdb2
[root@test ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 979M 0 979M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 18M 973M 2% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root 99G 2.8G 97G 3% /
/dev/sda1 509M 157M 353M 31% /boot
tmpfs 199M 0 199M 0% /run/user/0
、
卸载
umount /dev/sdb1 # 或者umount /opt
强制卸载
umount -l /dev/sdb1 # 或者umount -l /opt
思考
1、往目录/opt 下新建的文件存到了哪里 ?
2、卸载/opt 后,数据是否存在 [root@localhost ~]# mkfs.xfs -f /dev/sdb1 # 强制重新格式化,需要加-f
2、重新格式化/dev/sdb2后,数据是否依然存在?
4、同一个分区/文件系统挂载到不同的文件夹下,数据来源是否一致?
开启开机自动挂载
开启开机自动挂载;
方式一:将挂载命令写到文件/etc/rc.localhost
注意:centos7下/etc/rc.local 文件里配置的开机启动项不执行的解决办法。
[root@test~]# ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 7月 13 21:08 /etc/rc.local -> rc.d/rc.local
[root@test~]# ll /etc/rc.d/rc.local # 没有执行权限,需要加上
-rw-r--r--. 1 root root 523 11月 6 15:03 /etc/rc.d/rc.local
[root@test~]# chmod +x /etc/rc.d/rc.local
方式二:编辑文件/etc/fstab
[root@test~]# sed -i '$a /dev/sdb1 /opt xfs defaults 0 0' /etc/fstab
[root@test~]# tail -1 /etc/fstab
/dev/sdb1 /opt xfs defaults 0 0
补充:磁盘挂载mount
-t 指定文件系统
-a 挂载/etc/fstab中配置的所有
[root@egon ~]# mount -t xfs /dev/sdb1 /db1
可以查看到文件系统的uuid并挂载
[root@egon ~]# blkid | grep sdb1
/dev/sdb1: UUID="10a939a8-d17c-4a0f-9a89-8066ac013855" TYPE="xfs"
[root@egon ~]# mount UUID="10a939a8-d17c-4a0f-9a89-8066ac013855" /opt
建议配置文件/etc/fstab用uuid
[root@egon ~]# tail -1 /etc/fstab # 编辑文件,新增一行
UUID="10a939a8-d17c-4a0f-9a89-8066ac013855" /opt xfs defaults 0 0
[root@egon ~]# mount -a
[root@egon ~]# df # 查看挂载情况
五:制作swap分区
swap
#### 1
查看
[root@test ~]# free -m
total used free shared buff/cache available
Mem: 1980 134 1739 17 106 1710
Swap: 511 0 511
#### 2
制作swap分区
[root@test ~]# fdisk /dev/sdb #分出一个1G的硬盘空间
[root@test ~]# mkswap /dev/sdb3 # 格式化为swap
mkswap: /dev/sdb3: warning: wiping old swap signature.
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=c7787b57-ee2a-43d9-8e53-2640e3c23410
#### 3
激活swap分区
[root@test ~]# free -m
total used free shared buff/cache available
Mem: 1980 134 1738 17 106 1710
Swap: 511 0 511
[root@test ~]# swapon /dev/sdb3
[root@test ~]# free -m
total used free shared buff/cache available
Mem: 1980 134 1738 17 106 1709
Swap: 1535 0 1535
##### 4
关闭swap分区
[root@test ~]# swapon -s # 查看当前所有的swap分区
Filename Type Size Used Priority
/dev/dm-1 partition 524284 0 -2
/dev/sdb3 partition 1048572 0 -3
[root@test ~]# swapoff -a #关闭当前所有的分区
[root@test ~]# swapoff /dev/sdb3 #关闭当前某一分区
[root@test ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 524284 0 -2
[root@test ~]# free -m
total used free shared buff/cache available
Mem: 1980 134 1738 17 106 1709
Swap: 511 0 511
[root@test ~]#
##### 5
如果磁盘没有过多的分区可用,也可以通过文件增加swap空间,本质还是磁盘
[root@localhost ~]# dd if=/dev/zero of=/swap_file bs=1M count=200
[root@localhost ~]# chmod 0600 /swap_file
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1980 185 1364 9 430 1598
Swap: 0 0 0
[root@localhost ~]# mkswap -f /swap_file
[root@localhost ~]# swapon /swap_file
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1980 222 1300 9 458 1550
Swap: 199 0 199
#### 6
开机自动挂载新增的swap分区。
[root@localhost ~]# blkid | grep /dev/sdb1
/dev/sdb1: UUID="91d30c2d-2b43-40b1-b2b5-6f828c585f97" TYPE="swap" PARTUUID="d3b7649d-54aa-45eb-8bef-dccfe6915413"
[root@localhost ~]# vim /etc/fstab
[root@localhost ~]# tail -1 /etc/fstab
UUID="91d30c2d-2b43-40b1-b2b5-6f828c585f97" swap swap defaults 0 0
https://www.cnblogs.com/linhaifeng/articles/13921161.html
七:修复服务器文件系统:
https://blog.sholdboyedu.com/?p=216
八:xfs文件系统备份与回复
九:LVM
为什么要用lvm
# 如果分区设置的过大,就白白浪费了磁盘空间;
# 如果分区设置的过小,就会导致空间不够用的情况出现。
对于分区过小的问题,我们可以重新划分磁盘的分区,或者通过软连接的方式将此分区的目录链接到另外一个分区。这样做虽然能够临时解决问题,但是给管理带来了麻烦
什么是lvm?
逻辑卷管理LVM是一个多才多艺的硬盘系统工具。无论在Linux或者其他类似的系统,都是非常的好用。
传统分区使用固定大小分区,重新调整大小十分麻烦。
但是,LVM可以创建和管理“逻辑”卷,而不是直接使用物理硬盘。
可以让管理员弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。
可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷。
LVM并不需要重启就可以让内核知道分区的存在。
LVM使用分层结构,如下图所示。
图中顶部,首先是实际的物理磁盘及其划分的分区和其上的物理卷(PV)。
一个或多个物理卷可以用来创建卷组(VG)。然后基于卷组可以创建逻辑卷(LV)。
只要在卷组中有可用空间,就可以随心所欲的创建逻辑卷。
文件系统就是在逻辑卷上创建的,然后可以在操作系统挂载和访问。
?通过LVM技术,可以屏蔽掉磁盘分区的底层差异,在逻辑上给文件系统提过一个卷的概念,然后在这些卷上简历文件系统,:
物理卷(PV):(physical volume),把常规的磁盘设备通过pvcreate命令对其进行初始化,形成了物理卷。其实就是硬盘或分区。(面粉)
卷组(VG):(volume group),把多个物理卷组成一个逻辑的整体,这样卷组的大小就是多个硬盘之和。或者理解就是由一个或多个PV组成的整体。(面团)
逻辑卷(LV):(logical volume),从卷组中划分需要的空间大小出来。用户仅需对其格式化然后即可挂载使用。从VG中切割出的空间用于创建文件系统。(切成馒头)
基本单元(PE):(physical extend),分配的逻辑大小的最小单元,默认为4MB的基本块。(假设分配100MB逻辑空间,则需要创建25个PE)
?
?lvm优缺点总结:
# 优点:
# 1、可以在系统运行的状态下动态的扩展文件系统的大小。
# 2、文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制。
# 3、可以增加新的磁盘到LVM的存储池中。
# 4、可以以镜像的方式冗余重要的数据到多个物理磁盘。
# 5、可以方便的导出整个卷组到另外一台机器。
# 缺点:
# 1、因为加入了额外的操作,存取性能受到影响。
# 2、当卷组中的一个磁盘损坏时,整个卷组都会受到影响。
解释:LVM如果有一个磁盘损坏,整个lvm都坏了,lvm只有动态扩展作用,
方案:底层用RAID + 上层LVM = 既有冗余又有动态扩展
# 2、在从卷组中移除一个磁盘的时候必须使用reducevg命令(该命令要求root权限,并且不允许在快照卷组中使用)
LVM使用:
?
下载软件包
1、yum install -y lvm2
# 制作
[root@egon ~]# pvcreate /dev/sdb1 # 对分区做
[root@egon ~]# pvcreate /dev/sdb2 # 对分区做
[root@egon ~]# pvcreate /dev/sdb3 # 对分区做
[root@egon ~]# pvcreate /dev/sdc # 对整块盘做
# 查看
[root@egon ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 1.00g 1.00g
/dev/sdb2 lvm2 --- 1.00g 1.00g
/dev/sdb3 lvm2 --- 1.00g 1.00g
/dev/sdc lvm2 --- 20.00g 20.00g
[root@egon ~]# pvscan
PV /dev/sdb1 lvm2 [1.00 GiB]
PV /dev/sdc lvm2 [20.00 GiB]
PV /dev/sdb2 lvm2 [1.00 GiB]
PV /dev/sdb3 lvm2 [1.00 GiB]
Total: 4 [23.00 GiB] / in use: 0 [0 ] / in no VG: 4 [23.00 GiB]
####
制作vg:将pv划入vg中
# 制作一个vg1:
[root@egon ~]# vgcreate vg1 /dev/sdb1 /dev/sdc # 包含/dev/sdb1与/dev/sdc两个pv
Volume group "vg1" successfully created
[root@egon ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 2 0 0 wz--n- 20.99g 20.99g
# 也可以再制作一个vg2:
[root@egon ~]# vgcreate vg2 /dev/sdb2 /dev/sdb3 # 包含/dev/sdb2与/dev/sdb3两个pv
Volume group "vg2" successfully created
[root@egon ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 2 0 0 wz--n- 20.99g 20.99g
vg2 2 0 0 wz--n- 1.99g 1.99g
[root@egon ~]#
3创建逻辑卷lvm
选项
-L #逻辑卷大小
-n #逻辑卷名字
# 从vg1中分出来逻辑卷lv1_from_vg1、lv2_from_vg1
[root@egon ~]# lvcreate -L 100M -n lv1_from_vg1 vg1
[root@egon ~]# lvcreate -L 200M -n lv2_from_vg1 vg1
# 从vg2中分出来一个建逻辑卷lv1_from_vg2、lv1_from_vg2
[root@egon ~]# lvcreate -L 300M -n lv1_from_vg2 vg2
[root@egon ~]# lvcreate -L 400M -n lv2_from_vg2 vg2
# 查看
[root@egon ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1_from_vg1 vg1 -wi-a----- 100.00m
lv2_from_vg1 vg1 -wi-a----- 200.00m
lv1_from_vg2 vg2 -wi-a----- 300.00m
lv2_from_vg2 vg2 -wi-a----- 400.00m
# 把vg的100%空间都给lv
lvcreate -l 100%VG -n lv的名字 vg的名字
格式与挂载:
[root@egon ~]# mkfs.xfs /dev/vg1/lv1_from_vg1
[root@egon ~]# mkfs.xfs /dev/vg1/lv2_from_vg1
[root@egon ~]# mkfs.xfs /dev/vg2/lv1_from_vg2
[root@egon ~]# mkfs.xfs /dev/vg2/lv2_from_vg2
[root@egon ~]# mount /dev/vg1/lv1_from_vg1 /test1/
[root@egon ~]# mount /dev/vg1/lv2_from_vg1 /test2/
[root@egon ~]#
[root@egon ~]# mount /dev/vg2/lv1_from_vg2 /test3/
[root@egon ~]# mount /dev/vg2/lv2_from_vg2 /test4/
# 查看
[root@egon ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
...
/dev/mapper/vg1-lv1_from_vg1 98980 5344 93636 6% /test1
/dev/mapper/vg1-lv2_from_vg1 201380 10464 190916 6% /test2
/dev/mapper/vg2-lv1_from_vg2 303780 15584 288196 6% /test3
/dev/mapper/vg2-lv2_from_vg2 406180 20704 385476 6% /test4
[root@egon ~]#
?
示例:
[root@test ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
[root@test ~]#
[root@test ~]# pvcreate /dev/sdb2
WARNING: xfs signature detected on /dev/sdb2 at offset 0. Wipe it? [y/n]: ^C Interrupted...
Aborted wiping of xfs.
1 existing signature left on the device.
Interrupted...
[root@test ~]#
[root@test ~]#
[root@test ~]# pvcreate /dev/sdb3
WARNING: swap signature detected on /dev/sdb3 at offset 4086. Wipe it? [y/n]: y
Wiping swap signature on /dev/sdb3.
Physical volume "/dev/sdb3" successfully created.
[root@test ~]#
[root@test ~]#
[root@test ~]#
[root@test ~]#
[root@test ~]#
[root@test ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 512M 0 part /boot
└─sda2 8:2 0 99.5G 0 part
├─centos-root 253:0 0 99G 0 lvm /
└─centos-swap 253:1 0 512M 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
├─sdb1 8:17 0 1G 0 part
├─sdb2 8:18 0 1G 0 part
├─sdb3 8:19 0 1G 0 part
└─sdb4 8:20 0 1K 0 part
sr0 11:0 1 1024M 0 rom
[root@test ~]#
[root@test ~]#
[root@test ~]#
[root@test ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <99.50g 0
/dev/sdb1 lvm2 --- 1.00g 1.00g
/dev/sdb3 lvm2 --- 1.00g 1.00g
[root@test ~]#
[root@test ~]# pvscan
PV /dev/sda2 VG centos lvm2 [<99.50 GiB / 0 free]
PV /dev/sdb3 lvm2 [1.00 GiB]
PV /dev/sdb1 lvm2 [1.00 GiB]
Total: 3 [<101.50 GiB] / in use: 1 [<99.50 GiB] / in no VG: 2 [2.00 GiB]
[root@test ~]#
[root@test ~]#
[root@test ~]# vgcteate vg1 /dev/sdb1 /dev/sdb3
-bash: vgcteate: command not found
[root@test ~]# vgcreate vg1 /dev/sdb1 /dev/sdb3
Volume group "vg1" successfully created
[root@test ~]#
[root@test ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <99.50g 0
vg1 2 0 0 wz--n- 1.99g 1.99g
[root@test ~]#
[root@test ~]#
[root@test ~]# lvcreate -L 100M -n 1v1_from_vg1 vg1
Logical volume "1v1_from_vg1" created.
[root@test ~]# lvcreate -L 100M -n 1v1_from_vg1 vg1
Logical Volume "1v1_from_vg1" already exists in volume group "vg1"
[root@test ~]# lvcreate -L 100M -n 2v1_from_vg1 vg1
Logical volume "2v1_from_vg1" created.
[root@test ~]#
[root@test ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <99.00g
swap centos -wi-ao---- 512.00m
1v1_from_vg1 vg1 -wi-a----- 100.00m
2v1_from_vg1 vg1 -wi-a----- 100.00m
[root@test ~]# mkfs.xfs /dev/vg1/1v1_from_vg1
meta-data=/dev/vg1/1v1_from_vg1 isize=512 agcount=4, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=25600, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@test ~]# mkfs.xfs /dev/vg1/2v1_from_vg1
meta-data=/dev/vg1/2v1_from_vg1 isize=512 agcount=4, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=25600, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@test ~]#
[root@test ~]#
[root@test ~]# ls
2.sh anaconda-ks.cfg date file2 init.sh nginx-1.8.0 nginx-1.8.0.tar.gz passwd
[root@test ~]# mkdir /test123
[root@test ~]#
[root@test ~]#
[root@test ~]# mount /dev/vg1/1v1_from_vg1 /test1/
mount: mount point /test1/ does not exist
[root@test ~]# mount /dev/vg1/1v1_from_vg1 /test123/
[root@test ~]#
[root@test ~]#
[root@test ~]#
[root@test ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 979M 0 979M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 18M 973M 2% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root 99G 2.8G 97G 3% /
/dev/sda1 509M 157M 353M 31% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/mapper/vg1-1v1_from_vg1 97M 5.3M 92M 6% /test123
动态在线扩容:
再不用卸载的情况下完成扩容?
lvextend -L [+]MGT /dev/VG_NAME/VL_NAME
# 注意:-L 100M 与 -L +100M不是一个意思,或者代表在原有的基础上扩容
# 1、新增一块盘或者一个分区
fdisk /dev/sdb ......
partprobe
ls /dev/sdb4
# 2、新增一个pv
[root@egon ~]# pvcreate /dev/sdb4
# 3、把新增的pv扩到vg2里
[root@egon ~]# vgextend vg2 /dev/sdb4
[root@egon ~]# vgs # 可以看到vg2扩容了
# 4、接下来对lv1_from_vg2扩容
[root@egon ~]# lvextend -L +1000M /dev/vg2/lv1_from_vg2
[root@egon ~]# xfs_growfs /dev/vg2/lv1_from_vg2 # 扩展逻辑卷后需要更新fs文件系统
动态缩容:(不要缩容,容易出问题。数据无法找回)
删除:
# 删除lv之前需要先卸载挂载点
[root@egon ~]# umount /test3
[root@egon ~]# lvremove /dev/vg2/lv1_from_vg2?
?
# 删vg
[root@egon ~]# vgremove vg2
?
# 删pv:只能删掉那些不属于任何vg的pv
[root@egon ~]# pvremove /dev/sdb2
[root@egon ~]# pvremove /dev/sdb3
|