第二十八章 Linux系统磁盘管理详解
一、磁盘基础介绍
1.什么是磁盘
磁盘是指利用磁记录技术存储数据的存储器,是所有硬式存储的统称,如最早出现的软盘,现在的硬盘,都是磁盘中的一部分。
2.什么是软盘
磁盘开始指的是1.44MB的3.5英寸磁盘,这是很早时候的电脑储存盘,也叫软盘。
软盘在如今已经很少被使用了,使用软盘需要安装软盘驱动。软盘容量小,容易损坏。随着数据的大量增长,软盘已经不满足日益所需的数据存储需求,所以,硬盘便被研发了出来。
3.什么是硬盘
硬盘就是一种最为常见的外存储器,它好比是数据的外部仓库一样。电脑除了要有"工作间",还要有专门存储东西的仓库。是计算机中的最大的存储装置了,我们会将磁盘的储存片装到硬质金属盒子里,这样就可以得到更好的保护,而且在使用寿命上也比软盘优越得多,只有低格的时候才会对硬盘有很大的伤害。
4.磁盘与软盘硬盘的关系
磁盘是一种统称,即是一开始的软盘,又是现如今的硬盘,但是在现在,说起磁盘,都指的是硬盘。
二、磁盘的根本结构
1.盘片
盘片是硬盘中承载数据存储的介质。硬盘盘片是以坚固耐用的材料为盘基,将磁粉附着在铝合金(新材料也有用玻璃)圆盘片的表面上,表面被加工的相当平滑。这些磁粉被划分成为磁道的若干个同心圆,在每个同心圆的磁道上就好像有无数的任意排列的小磁铁,它们分别代表着0和1的状态。当这些小磁铁受到来自磁头的磁力影响时,其排列的方向会随之改变。
利用磁头的磁力控制指定的一些小磁铁方向,使每个小磁铁都可以用来储存信息。硬盘是由多个盘片叠加在一起,互相之间由垫圈隔开。
硬盘中一般会有多个盘片,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头(Head,简写为H)。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。
2.磁道
当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。
每个盘片的盘面在出厂的时候被划分出了多个同心圆环,数据就存储在这样的同心圆环上面,每个盘面可以划分多个磁道,但是肉眼不可见。通常一块盘面有成千上万个磁道。
磁盘上的磁道是一组记录密度不同的同心圆。磁表面存储器是在不同形状(如盘状、带状等)的载体上。
3.扇区
在硬盘出厂时会对磁盘进行一次低级格式化,其实就是再将每个磁道划分为若干个弧段,每个弧段就是一个扇区(Sector)。若干个扇区就组成整个盘片,硬盘的读写以扇区为基本单位。这种以簇为最小分配单位的机制,使硬盘对数据的管理变得相对容易。现在每个扇区可存储512字节数据,已经成了业界的约定。
低级格式化就是将空白的磁盘划分出柱面和磁道,再将磁道划分为若干个扇区,每个扇区又划分出标识部分ID、间隔区GAP和数据区DATA等。
硬盘低级格式化的功用:硬盘低级格式化是对硬盘最彻底的初始化方式,经过低格后的硬盘,原来保存的数据将会全部丢失,所以一般来说低格硬盘是非常不可取的,只有非常必要的时候才能低格硬盘。而这个所谓的必要时候有两种,一是硬盘出厂前,硬盘厂会对硬盘进行一次低级格式化;另一个是当硬盘出现某种类型的坏道时,使用低级格式化能起到一定的缓解或者屏蔽作用。
4.柱面
柱面实际上就是我们抽象出来的一个逻辑概念,简单来说就是处于同一个垂直区域的磁道称为柱面,即各盘面上面相同位置的集合,这样数据如果存储到相同半径磁道上的同一扇区,这样可以实现并行读取,主要是减少磁头寻道时间。
5.磁头
磁头是硬盘中最昂贵的部件,也是硬盘技术中最重要和最关键的一环。主要作用是读取磁盘磁道上面的金属块,负责读或写入数据。
三、磁盘的相关概念
1.磁盘的接口
IDE SCSI #淘汰了
SATA III SAS #企业级
SSD( SATA III PCIE )
M2 超极本的接口标准 MSATA
2.机械硬盘和固态硬盘的区别
机械硬盘 HDD | 固态硬盘 SSD |
---|---|
容量大价格低 | 容量小价格贵 |
抗击打能力弱 | 抗击打能力强 |
读写速度慢 | 读写速度快 |
数据损坏恢复易 | 数据恢复难 |
寿命一直使用 | 使用期限有一定限制 |
3.linux磁盘的命名方式
/dev/sda1 #第一块物理硬盘的第一个分区
/dev/sdb3 #第二块物理硬盘的第三个分区
/dev/vdc5 #第三块虚拟硬盘的第5个分区
sd #物理硬盘
vd #虚拟硬盘
4.磁盘的相关单位和术语
尺寸: 2.5英寸 3.5英寸
数据大小: bit B KB MB GB TB PB EB
单位换算: 1024 1B=8b
转速: RPM 转/每分钟 5400 7200 10k 15k
IOPS 衡量磁盘读写 IO的单位 每秒的输入输出
5.两个分区表
1.MBR 适用于2TB 只能有4个主分区 扩展分区(逻辑分区 )
3个主分区 + 1个扩展分区( 逻辑分区...... )
MBR的位置: 0磁头0磁道1扇区 512字节
446字节 MBR引导记录
64字节4个主分区
2字节分区结束标识符
2.GPT 适用于2TB以上 128个主分区
6.分区工具
fdisk #适用于2TB的分区
gdisk #适用于2TB以上
四、查看系统的磁盘使用情况-lsblk
1.含义
lsblk命令来自于英文词组”list block“的缩写,其功能是用于查看系统的磁盘使用情况。
语法格式:lsblk [参数]
2.常用参数
-a | 显示所有设备 |
---|---|
-b | 以字节单位显示设备大小 |
-d | 不显示 slaves 或 holders |
-e | 排除设备 |
-f | 显示文件系统信息 |
-h | 显示帮助信息 |
-i | 仅使用字符 |
-m | 显示权限信息 |
-l | 使用列表格式显示 |
-n | 不显示标题 |
-o | 输出列 |
-P | 使用key=”value”格式显示 |
-r | 使用原始格式显示 |
-t | 显示拓扑结构信息 |
3.常见示例
显示系统中所有磁盘设备的使用情况信息
[root@jindada ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 198.4M 0 rom
vda 253:0 0 100G 0 disk
└─vda1 253:1 0 100G 0 part /
vdb 253:16 0 300G 0 disk /mnt/datadisk0
[root@jindada ~]# lsblk -a
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 198.4M 0 rom
vda 253:0 0 100G 0 disk
└─vda1 253:1 0 100G 0 part /
vdb 253:16 0 300G 0 disk /mnt/datadisk0
显示系统中磁盘设备的归属及权限信息
[root@jindada ~]# lsblk -m
NAME SIZE OWNER GROUP MODE
sr0 198.4M root cdrom brw-rw----
vda 100G root disk brw-rw----
└─vda1 100G root disk brw-rw----
vdb 300G root disk brw-rw----
显示系统中所有SCSI类型的磁盘设备信息
[root@jindada ~]# lsblk -S
NAME HCTL TYPE VENDOR MODEL REV TRAN
sr0 0:0:1:0 rom QEMU QEMU DVD-ROM 2.5+ ata
以列表格式显示磁盘设备信息,并且不显示标题
[root@jindada ~]# lsblk -nl
sr0 11:0 1 198.4M 0 rom
vda 253:0 0 100G 0 disk
vda1 253:1 0 100G 0 part /
vdb 253:16 0 300G 0 disk /mnt/datadisk0
五、磁盘分区管理-fdisk
1.含义
fdisk命令来自于英文词组“Partition table manipulator for Linux”的缩写,其功能是用于管理磁盘的分区信息。如果一套几百平米的房子内部没有墙壁,虽然看起来会很敞亮,但是各种声音、气味、物品会随意充斥在整个房子内,让人极不舒适,因此需要用墙壁按照功能进行划分,例如卧室、厕所、厨房、阳台等等。
fdisk命令可以用于对磁盘进行分区操作,用户可以根据实际情况进行合理划分,这样后期挂载和使用时会方便很多。
语法格式:fdisk [参数] [设备]
2.常用参数
-b | 指定每个分区的大小 |
---|---|
-l | 列出指定的外围设备的分区表状况 |
-s | 将指定的分区大小输出到标准输出上,单位为区块 |
-u | 搭配”-l”参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址 |
-v | 显示版本信息 |
3.常用示例
显示磁盘的分区信息
[root@jindada ~]# ll /dev/sd*
brw-rw---- 1 root disk 8, 0 Aug 3 09:34 /dev/sda
brw-rw---- 1 root disk 8, 1 Aug 3 09:34 /dev/sda1
brw-rw---- 1 root disk 8, 2 Aug 3 09:34 /dev/sda2
brw-rw---- 1 root disk 8, 3 Aug 3 09:34 /dev/sda3
[root@jindada ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 97.5G 0 part /
sdb 8:16 0 100G 0 disk
sdc 8:32 0 3T 0 disk
sr0 11:0 1 4.3G 0 rom
[root@jindada ~]# ll /dev/sd*
brw-rw---- 1 root disk 8, 0 Aug 3 17:38 /dev/sda
brw-rw---- 1 root disk 8, 1 Aug 3 17:38 /dev/sda1
brw-rw---- 1 root disk 8, 2 Aug 3 17:38 /dev/sda2
brw-rw---- 1 root disk 8, 3 Aug 3 17:38 /dev/sda3
brw-rw---- 1 root disk 8, 16 Aug 3 17:38 /dev/sdb
brw-rw---- 1 root disk 8, 32 Aug 3 17:38 /dev/sdc
[root@jindada ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@jindada ~]# fdisk -l /dev/sda
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000ae9a7
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 5220351 2097152 82 Linux swap / Solaris
/dev/sda3 5220352 209715199 102247424 83 Linux
进行磁盘分区
#1. 进行分区 创建分区
[root@jindada ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x5b8d3e75.
Command (m for help): 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) #拓展功能
Command (m for help):
Command (m for help): l
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 80 Old Minix
Command (m for help): n #创建分区 #主分区的编号是1-4 逻辑分区从5开始
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #创建主分区
Partition number (1-4, default 1): 1 #主分区的编号
First sector (2048-209715199, default 2048): #扇区的起始位置
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199): +10G #扇区的结束位置
Partition 1 of type Linux and of size 10 GiB is set
Command (m for help): p
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b8d3e75
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
Command (m for help): n #再次创建一个分区
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):
Using default response p
Partition number (2-4, default 2):
First sector (20973568-209715199, default 20973568):
Using default value 20973568
Last sector, +sectors or +size{K,M,G} (20973568-209715199, default 209715199): +10G
Partition 2 of type Linux and of size 10 GiB is set
Command (m for help): p
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b8d3e75
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
/dev/sdb2 20973568 41945087 10485760 83 Linux
Command (m for help): d #删除分区
Partition number (1,2, default 2): 2 #指定分区编号
Partition 2 is deleted
Command (m for help): p
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b8d3e75
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
#创建扩展分区
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): e
Partition number (2-4, default 2):
First sector (20973568-209715199, default 20973568):
Using default value 20973568
Last sector, +sectors or +size{K,M,G} (20973568-209715199, default 209715199): +50G
Partition 2 of type Extended and of size 50 GiB is set
Command (m for help): p
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b8d3e75
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
/dev/sdb2 20973568 125831167 52428800 5 Extended
#创建一个逻辑分区
Command (m for help): n
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (20975616-125831167, default 20975616):
Using default value 20975616
Last sector, +sectors or +size{K,M,G} (20975616-125831167, default 125831167): +20G
Partition 5 of type Linux and of size 20 GiB is set
Command (m for help): p
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b8d3e75
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
/dev/sdb2 20973568 125831167 52428800 5 Extended
/dev/sdb5 20975616 62918655 20971520 83 Linux
Command (m for help): w #保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
检查分区状况
[root@jindada ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 97.5G 0 part /
sdb 8:16 0 100G 0 disk
├─sdb1 8:17 0 10G 0 part
├─sdb2 8:18 0 1K 0 part
└─sdb5 8:21 0 20G 0 part
sdc 8:32 0 3T 0 disk
sr0 11:0 1 4.3G 0 rom
[root@jindada ~]# ll /dev/sd*
brw-rw---- 1 root disk 8, 0 Aug 3 2020 /dev/sda
brw-rw---- 1 root disk 8, 1 Aug 3 2020 /dev/sda1
brw-rw---- 1 root disk 8, 2 Aug 3 2020 /dev/sda2
brw-rw---- 1 root disk 8, 3 Aug 3 2020 /dev/sda3
brw-rw---- 1 root disk 8, 16 Aug 3 09:53 /dev/sdb
brw-rw---- 1 root disk 8, 17 Aug 3 09:53 /dev/sdb1
brw-rw---- 1 root disk 8, 18 Aug 3 09:53 /dev/sdb2
brw-rw---- 1 root disk 8, 21 Aug 3 09:53 /dev/sdb5
brw-rw---- 1 root disk 8, 32 Aug 3 2020 /dev/sdc
格式化文件系统
[root@jindada ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, 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
创建挂载点
[root@jindada ~]# mkdir /fdisk01
挂载使用
[root@jindada ~]# mount /dev/sdb1 /fdisk01
[root@jindada ~]# df -h | grep '/fdisk01'
/dev/sdb1 10G 33M 10G 1% /fdisk01
#测试是否可用
[root@jindada ~]# dd if=/dev/zero of=/fdisk01/test.log bs=10M count=100
100+0 records in
100+0 records out
1048576000 bytes (1.0 GB) copied, 10.8088 s, 97.0 MB/s
[root@jindada ~]# df -h | grep '/fdisk01'
/dev/sdb1 10G 1.1G 9.0G 11% /fdisk01
实现永久挂载
[root@jindada ~]# tail -1 /etc/fstab
/dev/sdb1 /fdisk01 xfs defaults 0 0
[root@jindada ~]#
[root@jindada ~]# mount -a #重新挂载/etc/fstab文件中的挂载列表
卸载重新挂载测试
# 数据是跟着设备走的 目录只是一个挂载点 就是入口
[root@jindada ~]# ll /fdisk01/
total 1024000
-rw-r--r-- 1 root root 1048576000 Aug 3 09:59 test.log
[root@jindada ~]# umount /dev/sdb1
[root@jindada ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 98G 5.5G 92G 6% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.5M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 199M 0 199M 0% /run/user/0
[root@jindada ~]# ll /fdisk01/
total 0
[root@jindada ~]# mount -a
[root@jindada ~]# ll /fdisk01/
total 1024000
-rw-r--r-- 1 root root 1048576000 Aug 3 09:59 test.log
六、磁盘分区管理-gdisk
1.含义
gdisk 是一个命令界面的用于创建和操作分区表的工具。 它会自动将MBR分区表转换为较新的GPT分区表格式,或者加载GUID分区表。 与-l命令行选项一起使用时,程序将显示当前分区表。
语法格式:gdisk [参数]
2.安装
[root@jindada ~]# yum install -y gdisk
3.常用参数
参数 | 含义 |
---|---|
-l | 列出指定的设备的分区表状况 |
4.常见示例
显示磁盘的分区信息
[root@jindada ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 97.5G 0 part /
sdb 8:16 0 100G 0 disk
├─sdb1 8:17 0 10G 0 part /fdisk01
├─sdb2 8:18 0 1K 0 part
└─sdb5 8:21 0 20G 0 part
sdc 8:32 0 3T 0 disk
sr0 11:0 1 4.3G 0 rom
[root@jindada ~]# gdisk -l /dev/sdc
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
Disk /dev/sdc: 6442450944 sectors, 3.0 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 2BF39D49-315B-42C3-9C9C-C5A98D1EBB71
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 6442450910
Partitions will be aligned on 2048-sector boundaries
Total free space is 6442450877 sectors (3.0 TiB)
Number Start (sector) End (sector) Size Code Name
进行磁盘分区
#2. 创建分区
[root@jindada ~]# gdisk /dev/sdc
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
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 #打印菜单
Command (? for help):
Command (? for help): n #创建分区
Partition number (1-128, default 1): #分区编号
First sector (34-6442450910, default = 2048) or {+-}size{KMGTP}: #扇区起始位置
Last sector (2048-6442450910, default = 6442450910) or {+-}size{KMGTP}: #扇区结束位置
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): #选择分区类型
Changed type of partition to 'Linux filesystem'
Command (? for help): p #打印分区表信息
Disk /dev/sdc: 6442450944 sectors, 3.0 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 2E58E6D9-4971-4B2F-A455-16D3A5115002
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 6442450910
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 6442450910 3.0 TiB 8300 Linux filesystem
Command (? for help):
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 #是否确认
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.
[root@jindada ~]#
检查分区状况
[root@jindada ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 97.5G 0 part /
sdb 8:16 0 100G 0 disk
├─sdb1 8:17 0 10G 0 part /fdisk01
├─sdb2 8:18 0 1K 0 part
└─sdb5 8:21 0 20G 0 part
sdc 8:32 0 3T 0 disk
└─sdc1 8:33 0 3T 0 part
sr0 11:0 1 4.3G 0 rom
格式化文件系统
[root@jindada ~]# mkfs.xfs /dev/sdc1
meta-data=/dev/sdc1 isize=512 agcount=4, agsize=201326527 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=805306107, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=393215, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
创建挂载点
[root@jindada ~]# mkdir /gdisk01
[root@jindada ~]# mount /dev/sdc1 /gdisk01
[root@jindada ~]# df -h | grep '/gdisk01'
/dev/sdc1 3.0T 33M 3.0T 1% /gdisk01
[root@jindada ~]# cp /fdisk01/test.log /gdisk01/
[root@jindada ~]# df -h | grep '/gdisk01'
/dev/sdc1 3.0T 1.1G 3.0T 1% /gdisk01
实现永久挂载
[root@jindada ~]# tail -1 /etc/fstab
/dev/sdc1 /gdisk01 xfs defaults 0 0
[root@jindada ~]# mount -a
六、显示关于可用块设备的信息-blkid
1.含义
blkid命令对查询设备上所采用文件系统类型进行查询。主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询。
语法格式:blkid [参数]
2.常用参数
-s | 显示指定信息 |
---|---|
-v | 显示版本信息 |
-g | 收集blkid缓存 |
-i | 收集有关i/o限制的信息 |
-p | 低级超级块探测(旁路缓存) |
3.常见示例
显示指定设备 UUID
[root@jindada ~]# blkid -s UUID /dev/vda1
/dev/vda1: UUID="4b499d76-769a-40a0-93dc-4a31a59add28"
显示所有设备 LABEL
[root@jindada ~]# blkid -s LABEL
/dev/sr0: LABEL="config-2"
以列表方式查看详细信息
[root@jindada ~]# blkid -o list
device fs_type label mount point UUID
-----------------------------------------------------------------------------------------------
/dev/sr0 iso9660 config-2 (not mounted) 2022-10-15-15-14-41-00
/dev/vda1 ext4 / 4b499d76-769a-40a0-93dc-4a31a59add28
/dev/vdb ext4 /mnt/datadisk0 50d2600b-0c27-4cf7-8bf4-dd31c4c87647
显示所有设备
[root@jindada ~]# blkid -o device
/dev/sr0
/dev/vda1
/dev/vdb
显示所有设备文件系统
[root@jindada ~]# blkid -s TYPE
/dev/sr0: TYPE="iso9660"
/dev/vda1: TYPE="ext4"
/dev/vdb: TYPE="ext4"
七、文件系统挂载到目录-mount
1.含义
mount命令的功能是用于把文件系统挂载到目录,文件系统指的是被格式化过的硬盘或分区设备,进行挂载操作后,用户便可以在挂载目录中使用硬盘资源了。
默认情况下Linux系统并不会像Windows系统那样自动的挂载光盘和U盘设备,需要自行完成。
语法格式:mount [参数] [设备] [挂载点]
2.常用参数
-t | 指定文件系统 网络协议 nfs |
---|---|
-l | 显示已加载的文件系统列表 |
-h | 显示帮助信息并退出 |
-V | 显示程序版本 |
-n | 加载没有写入文件“/etc/mtab”中的文件系统 |
-r | 将文件系统加载为只读模式 |
-a | 加载文件“/etc/fstab”中描述的所有文件系统 |
-o | 指定挂载的参数 |
3.常用示例
强制以xfs文件系统挂载硬盘设备到指定目录
[root@jindada ~]# mount -t xfs /dev/sdb1 /fdisk01/
[root@jindada ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 98G 5.5G 92G 6% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.5M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/sdb1 10G 1.1G 9.0G 11% /fdisk01
[root@jindada ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 97.5G 0 part /
sdb 8:16 0 100G 0 disk
├─sdb1 8:17 0 10G 0 part /fdisk01
├─sdb2 8:18 0 1K 0 part
└─sdb5 8:21 0 20G 0 part
sdc 8:32 0 3T 0 disk
└─sdc1 8:33 0 3T 0 part
sr0 11:0 1 4.3G 0 rom
[root@jindada ~]# blkid
/dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sda1: UUID="70df4a5b-091c-4aaa-9cc7-d745201ec394" TYPE="xfs"
/dev/sda2: UUID="6aefd444-30dc-4c0e-9a8d-75a8b1d9856b" TYPE="swap"
/dev/sda3: UUID="4aa02e85-ffe1-4783-9886-a328f923bee8" TYPE="xfs"
/dev/sdb1: UUID="0668e9f1-7d37-42eb-9e79-980f6352c342" TYPE="xfs"
/dev/sdc1: UUID="60d9a87f-fa86-4fdc-a1c9-2a88df756a24" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="71869797-d467-4293-807e-7c6f917c7422"
[root@jindada ~]#
指定以ro权限挂载文件系统到指定目录
[root@jindada ~]# mount -o ro /dev/sdb1 /fdisk01/
[root@jindada ~]# cp /etc/hosts /fdisk01/
cp: cannot create regular file ‘/fdisk01/hosts’: Read-only file system
查看当前系统中已有的文件系统信息(可结合管道符与grep命令进行过滤)
[root@jindada ~]# 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=99130k,nr_inodes=27835,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
………………省略部分输出信息………………
挂载/etc/fstab文件中所有已定义的设备文件
[root@jindada ~]# mount -a
将光盘设备挂载到指定目录
[root@jindada ~]# mount /dev/cdrom /media/cdrom
mount: /media/cdrom: WARNING: device write-protected, mounted read-only.
4.通过UUID进行挂载
[root@jindada ~]# blkid
/dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sda1: UUID="70df4a5b-091c-4aaa-9cc7-d745201ec394" TYPE="xfs"
/dev/sda2: UUID="6aefd444-30dc-4c0e-9a8d-75a8b1d9856b" TYPE="swap"
/dev/sda3: UUID="4aa02e85-ffe1-4783-9886-a328f923bee8" TYPE="xfs"
/dev/sdb1: UUID="0668e9f1-7d37-42eb-9e79-980f6352c342" TYPE="xfs"
/dev/sdc1: UUID="60d9a87f-fa86-4fdc-a1c9-2a88df756a24" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="71869797-d467-4293-807e-7c6f917c7422"
[root@jindada ~]# mount UUID="0668e9f1-7d37-42eb-9e79-980f6352c342" /fdisk01/
[root@jindada ~]# df -h | grep 'fdisk'
/dev/sdb1 10G 1.1G 9.0G 11% /fdisk01
[root@jindada ~]# tail -1 /etc/fstab
UUID=0668e9f1-7d37-42eb-9e79-980f6352c342 /fdisk01/ xfs defaults 0 0
[root@jindada ~]# mount -a
[root@jindada ~]# tail -4 /etc/fstab
UUID=4aa02e85-ffe1-4783-9886-a328f923bee8 / xfs defaults 0 0
UUID=70df4a5b-091c-4aaa-9cc7-d745201ec394 /boot xfs defaults 0 0
UUID=6aefd444-30dc-4c0e-9a8d-75a8b1d9856b swap swap defaults 0 0
UUID=0668e9f1-7d37-42eb-9e79-980f6352c342 /fdisk01/ xfs defaults 0 0
八、永久挂载文件详解
1.文件详解
#以空白字符为分隔符,分为6列:
[root@jindada ~]# cat /etc/fstab
#设备名称 挂载的位置 文件系统类型 挂载的参数 是否备份 是否检查
/dev/sdb1 /data xfs defaults 0 0
第一列: 挂载的设备 挂载的地址 网络设备地址
第二列: 挂载点 挂载的目录 空目录
第三列: 文件系统的类型 xfs 7默认的 ext4 6默认的 nfs gfs
第四列: 挂载的参数 defaults
第五列: 是否允许dump进行备份
0 #不备份
1 #每天备份
2 #不定期备份
第六列: 是否通过fsck命令检查磁盘
0 #不检查
1 #检查 检查顺序 先检查 /
2 #检查顺序
2.建议挂载时使用UUID
# 1.怎样获取磁盘分区的UUID,使用blkid命令获取
[root@jindada ~]# blkid|grep sdc1
/dev/sdc1: UUID="c7c940b3-277b-49fa-960b-eef5ed6e9b1b"
# 2.手动测试是否能正常的挂载
[root@jindada ~]# mount UUID="c7c940b3-277b-49fa-960b-eef5ed6e9b1b" /datac
# 3.将信息写入到/etc/fstab文件中,保证下次启动系统自动挂载
UUID="c7c940b3-277b-49fa-960b-eef5ed6e9b1b" /datac xfs defaults 0 0
# 4.卸载/datac挂载信息, 然后使用mount -a检查/etc/fstab文件是否ok
[root@jindada ~]# mount -a
ps: 如果不检查写错了直接重启, 会导致系统无法启动.
九、卸载文件系统-umount
1.含义
umount命令来自于英文单词unmount的缩写,其功能是用于卸载文件系统。与mount挂载命令需要同时提供设备名与挂载目录不同,umount卸载命令只需要提供设备名或挂载目录之一即可。
语法格式:umount [参数] [设备/挂载目录]
2.常用参数:
-a | 卸载/etc/mtab中记录的所有文件系统 |
---|---|
-h | 显示帮助 |
-n | 卸载时不要将信息存入/etc/mtab文件中 |
-r | 尝试以只读的方式重新挂入文件系统 |
-t | 仅卸载选项中所指定的文件系统 |
-l | 强制卸载 |
-v | 执行时显示详细的信息 |
-V | 显示版本信息 |
3.常见示例
卸载指定的文件系统
[root@jindada ~]# umount /dev/sdb1
[root@jindada ~]# df -h | grep '/dev/sdb1'
卸载指定的文件系统并显示过程
[root@linuxcool ~]# umount -v /dev/cdrom
umount: /media/cdrom (/dev/sr0) unmounted
强制卸载文件系统
[root@jindada ~]# mount /dev/sdb1 /fdisk01/
[root@jindada ~]# cd /fdisk01/
[root@jindada fdisk01]# umount /fdisk01 #不能在挂载的目录中进行卸载
umount: /fdisk01: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@jindada fdisk01]# umount /dev/sdb1
umount: /fdisk01: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@jindada fdisk01]# umount -l /dev/sdb1
[root@jindada fdisk01]# cd
[root@jindada ~]# mount /dev/sdb1 /fdisk01/
[root@jindada ~]# umount /fdisk01/
[root@jindada ~]# df -h | grep '/dev/sdb1'
十、显示磁盘空间使用情况-df
1.含义
df命令来自于英文词组”Disk Free“的缩写,其功能是用于显示系统上磁盘空间的使用量情况。df命令显示的磁盘使用量情况含可用、已有及使用率等信息,默认单位为Kb,建议使用-h参数进行单位换算,毕竟135M比138240Kb更利于阅读对吧~
语法格式: df [参数] [对象磁盘/分区]
2.常用参数
-a | 显示所有系统文件 |
---|---|
-B <块大小> | 指定显示时的块大小 |
-h | 以容易阅读的方式显示 |
-H | 以1000字节为换算单位来显示 |
-i | 显示索引字节信息 |
-k | 指定块大小为1KB |
-l | 只显示本地文件系统 |
-t <文件系统类型> | 只显示指定类型的文件系统 |
-T | 输出时显示文件系统类型 |
-- -sync | 在取得磁盘使用信息前,先执行sync命令 |
3.常见示例
带有容量单位的显示系统全部磁盘使用量情况
[root@jindada ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 969M 0 969M 0% /dev
tmpfs 984M 0 984M 0% /dev/shm
tmpfs 984M 9.6M 974M 1% /run
tmpfs 984M 0 984M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 3.9G 14G 23% /
/dev/sr0 6.7G 6.7G 0 100% /media/cdrom
/dev/sda1 1014M 152M 863M 15% /boot
tmpfs 197M 16K 197M 1% /run/user/42
tmpfs 197M 3.5M 194M 2% /run/user/0
带有容量单位的显示指定磁盘分区使用量情况
[root@jindada ~]# df -h /boot
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 1014M 152M 863M 15% /boot
显示系统中所有文件系统格式为xfs的磁盘分区使用量情况
[root@jindada ~]# df -t xfs
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/rhel-root 17811456 4041320 13770136 23% /
/dev/sda1 1038336 155556 882780 15% /boot
十一、查看文件或目录的大小-du
1.含义
du命令来自于英文词组“Disk Usage”的缩写,其功能是用于查看文件或目录的大小。人们经常会把df和du命令混淆,df是用于查看磁盘或分区使用情况的命令,而du命令则是用于按照指定容量单位来查看文件或目录在磁盘中的占用情况。
语法格式:du [参数] 文件
2.常用参数
-a | 显示目录中所有文件大小 |
---|---|
-k | 以KB为单位显示文件大小 |
-m | 以MB为单位显示文件大小 |
-g | 以GB为单位显示文件大小 |
-h | 以易读方式显示文件大小 |
-s | 仅显示总计 |
3.常见示例
以易读的容量格式显示指定目录内各个文件的大小信息
[root@jindada ~]# du -h /etc
28K /etc/dnf/modules.d
20K /etc/dnf/plugins
12K /etc/dnf/protected.d
64K /etc/dnf
16K /etc/fonts/conf.d
20K /etc/fonts
………………省略部分输出信息………………
以易读的容量格式显示指定目录内总文件的大小信息
[root@jindada ~]# du -sh /etc
29M /etc
显示指定文件的大小信息(默认单位为K)
[root@jindada ~]# du anaconda-ks.cfg
4 anaconda-ks.cfg
十二、RAID基本介绍
1.含义
RAID是英文(Redundant Array of Independent Disks)的缩写,翻译成中文是“独立磁盘冗余阵列”, 简称磁盘阵列(Disk Array)。
简单的说,RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术。
组成磁盘阵列的不同方式称为RAID级别(RAID Levels),现在已拥有了从 RAID 0 到 6 七种基本的RAID 级别。另外,还有一些基本RAID级别的组合形式,如RAID 10(RAID 0与RAID 1的组合)等等.
RAID技术的两大特点:一是速度、二是安全
2.磁盘阵列的优点
1. 获得更高的容量
2. 获得更高的性能
3. 让数据更安全 冗余
3.如何做RAID
1.软件实现 软RAID 不推荐 mdadm
2.硬件RAID RAID卡实现的 推荐
4.什么时候做RAID
在装系统之前做
5.标准RAID
最为常用的是下面的几种RAID形式: RAID 0、RAID 1、RAID 5、RAID 10
5.1 RAID 0(称为带区卷,性能最佳)
RAID 0技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据一次写入到各个物理硬盘中。这样硬盘设备的读写性能会提升数倍,但是若任意一块硬盘发生故障将导致整个系统的数据都受到破坏。
![156a3eaafcb244cca9f8b4d457ca462d.png](第二十八章 Linux系统磁盘管理详解.assets/156a3eaafcb244cca9f8b4d457ca462d.png)
优点:使用 n 颗硬盘,即可拥有将近 n 倍的读写效能,读写性能是所有RAID级别中最高的。
缺点:不提供数据冗余,因此一旦用户数据损坏,损坏的数据将无法得到恢复,RAID0运行时只要其中任一块硬盘出现问题就会导致整个数据的故障。
硬盘数量:最少 2 个。
5.2 RAID 1 (称为镜像卷,完整备份)
RAID1是将一个两块硬盘所构成RAID磁盘阵列,其容量仅等于一块硬盘的容量,因为另一块只是当作数据“镜像”
![9d5143bd99ae41a48210da5e725708d1.png](第二十八章 Linux系统磁盘管理详解.assets/9d5143bd99ae41a48210da5e725708d1.png)
优点:安全性依照数组里的实体硬盘数量倍数成长。
缺点:空间利用率是所有 RAID 中最没有效率的。
硬盘数量:最少 2 个,磁盘空间使用率:50%,故成本最高
5.3 RAID 5 (性能与数据备份的均衡考虑)
RAID 5技术把多块硬盘设备(至少三块)的数据奇偶校验信息保存到其他硬盘设备中。RAID 5磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上,这样的好处是其中任何一设备损坏后不至于出现致命缺陷;
RAID5不对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。
![c5fa8862092d4e37be1c3d4a342bd2e8.png](第二十八章 Linux系统磁盘管理详解.assets/c5fa8862092d4e37be1c3d4a342bd2e8.png)
优点:兼顾空间利用率与安全性。
缺点:需要额外的运算资源,仅能忍受 1 个硬盘损毁。
硬盘数量:至少 3 个。
5.4 RAID 10
RAID 10技术是RAID1+RAID0技术的一个组合体。如下图,RAID 10技术需要至少四块硬盘来组建,其中先分别两两制作成RAID 1磁盘阵列,以保证数据的安全性;然后再对两个RAID 1磁盘阵列实施RAID 0技术,进一步提高硬盘设备的读写速度。这样子从理论上讲,只要坏的不是同一组中的所有硬盘,那么最多可以损坏50%的硬盘设备而不丢失数据。RAID 10技术继承了RAID 0的高读写速度和RAID 1的数据安全性。
![54a5079e77fc40e99560ce1d3adf7ce2.png](第二十八章 Linux系统磁盘管理详解.assets/54a5079e77fc40e99560ce1d3adf7ce2.png)
6.RAID容错对比
级别 | 别名 | 硬盘数量 | 容量 | 性能 | 容错性 |
---|---|---|---|---|---|
RAID0 | 条带卷 | 至少两块 | N*单块 | 读写最快 | 0 |
RAID1 | 镜像卷 | 只能两块 | 损失一半 | 写慢 读一般 | 50% |
RAID5 | 校验卷 | 至少3块 | 浪费一块 | 读写一般 | N分之一 只能坏一块 |
RAID10 | 镜像阵列条带卷 | 至少4块 | 浪费一半 | 读写很快 | 50% |
十三、LVM基本介绍
1.LVM含义
LVM是Logical Volume Manager (逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。又译为逻辑卷宗管理器、逻辑扇区管理器、逻辑磁盘管理器,是Linux核心所提供的逻辑卷管理(Logical volume management)功能。它在硬盘的分区之上,又创建一个逻辑层,以方便系统管理硬盘分区系统。
最先由IBM开发,在AIX系统上实现,OS/2 操作系统与 HP-UX也支持这个功能。在1998年,Heinz Mauelshagen 根据在 HP-UX 上的逻辑卷管理器,写作出第一个 Linux 版本的逻辑卷管理器。
2.LVM解决了什么问题
当我们刚开始安装Linux操作系统是遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。
普通的磁盘分区好之后就无法改变其大小,而遇到出现某个分区空间耗尽时,解决的方法可以是符号链接,或者调整分区大小的工具,但这只是暂时解决方法,没有从根本上解决问题。
随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户可以在无需停机的请款下可以方便的调整各个分区大小。
3.LVM基本概念
物理卷(PV):(physical volume),把常规的磁盘设备通过pvcreate命令对其进行初始化,形成了物理卷。其实就是硬盘或分区。(面粉)
卷组(VG):(volume group),把多个物理卷组成一个逻辑的整体,这样卷组的大小就是多个硬盘之和。或者理解就是由一个或多个PV组成的整体。(面团)
逻辑卷(LV):(logical volume),从卷组中划分需要的空间大小出来。用户仅需对其格式化然后即可挂载使用。从VG中切割出的空间用于创建文件系统。(切成馒头)
基本单元(PE):(physical extend),分配的逻辑大小的最小单元,默认为4MB的基本块。(假设分配100MB逻辑空间,则需要创建25个PE)
4.逻辑卷实践
4.1 需求1
01.小需求:
1)创建物理卷,将普通磁盘转换为物理卷。
2)创建卷组,将物理卷加入到卷组中。
3)在卷组中划分逻辑卷,然后挂载使用。
4.2 实践
# 1. 准备物理磁盘,如果是虚拟机需要关闭添加磁盘,以便更好的实验
[root@jindada ~]# lsblk
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
# 2. 将磁盘转换为物理卷,下载安装软件包
[root@jindada ~]# yum install -y lvm2
[root@jindada ~]# pvcreate /dev/sdb
# 3. 将/dev/sdb物理卷加入卷组(资源池)-->名字lvm_test
[root@jindada ~]# vgcreate lvm_test /dev/sdb
# 检查卷组
[root@jindada ~]# vgs
# 4. 创建逻辑卷,分配名称,以及大小,指定卷组
选项:
-L #逻辑卷大小
-n #逻辑卷名字
[root@jindada ~]# lvcreate -L 100M -n lv1 lvm_test ##将lvm_test分配給lv1
# 5. 格式化逻辑卷
[root@jindada ~]# mkfs.xfs /dev/lvm_test/lv1
# 6. 挂载使用
[root@jindada ~]# mkdir /lv1
[root@jindada ~]# mount /dev/lvm_test/lv1 /lv1/
[root@jindada ~]# cp /etc/services /lv1/
4.3 需求2
02.卷组管理,如何扩展卷组大小,如何删除卷组
4.4 实践
1. 如何扩大VG卷组
#1.新硬盘加入pv
[root@jindada ~]# pvcreate /dev/sdc
#2.先检查当前的vg卷组大小
[root@oldboyedu ~]# vgs
VG #PV #LV #SN Attr VSize VFree
lvm_test 1 1 0 wz--n- 1020.00m 920.00m
#3.使用vgextend扩展卷组
[root@jindada ~]# vgextend lvm_test /dev/sdc
Volume group "lvm_test" successfully extended
#4.再次检查,发现卷组已经扩大
[root@oldboyedu ~]# vgs
VG #PV #LV #SN Attr VSize VFree
lvm_test 2 1 0 wz--n- 1.99g 1.89g
2. 假设想移除/dev/sdb磁盘,建议先将sdb磁盘数据先迁移到sdc磁盘,然后在移除。(同一卷组的磁盘才可以进行在线迁移),(注意卷组的名称---)
#1.检查当前逻辑卷VG中PV使用情况
[root@jindada ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb vg1 lvm2 a -- 2.00g 1.76g
/dev/sdc vg1 lvm2 a -- 2.00g 2.00g
#2.pvmove在线数据迁移,将sdb的数据迁移至sdc
[root@jindada ~]# pvmove /dev/sdb
/dev/sdb: Moved: 100.00%
#3.检查是否将sdb数据迁移至sdc
[root@jindada ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb vg1 lvm2 a -- 2.00g 2.00g
/dev/sdc vg1 lvm2 a -- 2.00g 1.76g
#4.从卷组中移除sdb磁盘
[root@jindada ~]# vgreduce lvm_test /dev/sdb
Removed "/dev/sdb" from volume group "lvm_test"
3. 逻辑卷管理,动态的调整逻辑卷大小
01. 逻辑卷的扩展,是取决于vg卷中是否还有剩余的容量,注意扩展逻辑卷不能超过卷组VG的总大小
[root@jindada ~]# vgs
VG #PV #LV #SN Attr VSize VFree
datavg 1 1 0 wz--n- 1020.00m 920.00m
#1.扩展lv逻辑卷,增加800M分配给逻辑卷 {注意: 800M +800M 不一样}
[root@jindada ~]# lvextend -L +800M /dev/lvm_test/lv1
#或者可以选择分配磁盘池中多少百分比给逻辑卷
[root@jindada ~]# lvextend -l +50%FREE /dev/lvm_test/lv1
#2.扩展逻辑卷后需要更新fs文件系统
[root@jindada ~]# xfs_growfs /dev/lvm_testvg/lv1 #xfs文件格式扩容
02. 缩小逻辑卷,不要去操作,因为线上在使用的磁盘真的敢操作吗?
03. 删除逻辑卷,如果不想使用逻辑卷可以选择删除。
[root@jindada ~]# umount /dev/lvm_test/lv1
[root@jindada ~]# lvremove /dev/lvm_test/lv1
Do you really want to remove active logical volume lvm_test/lv1?
Logical volume "lv1" successfully removed
注意:LVM如果有一个磁盘损坏,整个lvm都坏了, lvm只有动态扩展作用,底层用RAID + 上层LVM = 既有冗余又有动态扩展
十四、常见磁盘故障
1.磁盘block满故障
[root@jindada ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
Partition type:
p primary (2 primary, 1 extended, 1 free)
l logical (numbered from 5)
Select (default p):
Using default response p
Selected partition 4
First sector (127928320-209715199, default 127928320):
Using default value 127928320
Last sector, +sectors or +size{K,M,G} (127928320-209715199, default 209715199): +2G
Partition 4 of type Linux and of size 2 GiB is set
Command (m for help): p
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b8d3e75
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
/dev/sdb2 20973568 125831167 52428800 5 Extended
/dev/sdb3 125831168 127928319 1048576 83 Linux
/dev/sdb4 127928320 132122623 2097152 83 Linux
/dev/sdb5 20975616 62918655 20971520 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[root@jindada ~]#
#准备2G的分区
[root@jindada ~]# dd if=/dev/zero of=/opt/test.log bs=100M count=21
dd: error writing ‘/opt/test.log’: No space left on device
21+0 records in
20+0 records out
2099183616 bytes (2.1 GB) copied, 3.34918 s, 627 MB/s
[root@jindada ~]# echo "123" >> /opt/file.txt
-bash: echo: write error: No space left on device #磁盘空间不足
#解决:
检查磁盘空间
[root@jindada ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 98G 6.4G 92G 7% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.6M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/sdb1 10G 1.1G 9.0G 11% /fdisk01
/dev/sdb4 2.0G 2.0G 20K 100% /opt
#找到这个大文件 确认好之后在删
[root@jindada ~]# du -sh /opt/* | grep 'G'
2.0G /opt/test.log
一级一级往下找
注意:如果该文件存在硬链接,一定要把硬链接文件删除。
2.磁盘inode满故障
[root@jindada ~]# echo "123" >>/opt/test.txt
-bash: /opt/test.txt: No space left on device
[root@jindada ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 98G 6.4G 92G 7% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.6M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/sdb1 10G 1.1G 9.0G 11% /fdisk01
/dev/sdb4 2.0G 582M 1.5G 29% /opt
[root@jindada ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 51123712 46093 51077619 1% /
devtmpfs 250786 417 250369 1% /dev
tmpfs 253511 1 253510 1% /dev/shm
tmpfs 253511 774 252737 1% /run
tmpfs 253511 16 253495 1% /sys/fs/cgroup
/dev/sda1 256000 326 255674 1% /boot
tmpfs 253511 1 253510 1% /run/user/0
/dev/sdb1 5242880 4 5242876 1% /fdisk01
/dev/sdb4 1048576 1048576 0 100% /opt
[root@jindada ~]# find /opt/ -type d -size +2M | xargs ls -lhd
drwxr-xr-x 2 root root 3.8M Aug 3 12:27 /opt/test/test01
drwxr-xr-x 2 root root 3.8M Aug 3 12:27 /opt/test/test02
drwxr-xr-x 2 root root 3.8M Aug 3 12:27 /opt/test/test03
drwxr-xr-x 2 root root 3.8M Aug 3 12:27 /opt/test/test04
drwxr-xr-x 2 root root 3.7M Aug 3 12:27 /opt/test/test05
[root@jindada ~]# find /opt/ -type d -size +1M | xargs ls -lhd
drwxr-xr-x 2 root root 1.2M Aug 3 12:25 /opt/test/data01
drwxr-xr-x 2 root root 1.2M Aug 3 12:25 /opt/test/data02
drwxr-xr-x 2 root root 1.2M Aug 3 12:25 /opt/test/data03
drwxr-xr-x 2 root root 1.2M Aug 3 12:25 /opt/test/data04
drwxr-xr-x 2 root root 1.2M Aug 3 12:25 /opt/test/data05
drwxr-xr-x 2 root root 3.8M Aug 3 12:27 /opt/test/test01
drwxr-xr-x 2 root root 3.8M Aug 3 12:27 /opt/test/test02
drwxr-xr-x 2 root root 3.8M Aug 3 12:27 /opt/test/test03
drwxr-xr-x 2 root root 3.8M Aug 3 12:27 /opt/test/test04
drwxr-xr-x 2 root root 3.7M Aug 3 12:27 /opt/test/test05
[root@jindada ~]# ll /opt/test/data01 | wc -l
50001
#找到之后,确认在删除
[root@jindada ~]# find /opt/test/data01 -type f -delete
[root@jindada ~]# rm -f /opt/test/test01/*
-bash: /usr/bin/rm: Argument list too long
[root@jindada ~]# ll /opt/test/test01/ | wc -l
150001