文章目录
- 基本分区
- 磁盘简介
- 磁盘分类
- linux的磁盘命名
- 磁盘的分区方式
- 管理磁盘
- 虚拟机添加硬盘
- 查看磁盘信息
- 磁盘分区流程
- 创建分区
- 创建文件系统
- 挂载mount
- 查看挂载信息
- 剩余空间继续分区
- MBR如何划分更多的分区
- 为什么只能有4个主分区
- 扩展分区的引入
- 逻辑卷LVM
- 是什么
- 特点
- 术语
- 创建LVM
- VG卷组扩容
- PV,VG,LV的查看方式
- LV扩容
- 交换分区管理Swap
- swap简介
- 查看当前交换分区
- 设置交换分区
- 准备分区
- 格式化
- 挂载
- 验证
- 文件系统
- 文件系统的作用是
- 文件系统的类型
- EXT3/4文件系统
- 磁盘文件碎片
- 确定系统有几个文件系统
- 文件链接
- 符号链接
- 硬链接
- RAID
- 什么是RAID
- RAID的类型
- RAID0
- RAID1
- RAID5
- RAID的分类
- 软RAID创建示例
- 补充:挂载和卸载问题
- 补充:电脑重启命令
- 补充:写满一个磁盘
- 补充:卸载分区
基本分区
磁盘简介
磁盘,硬盘,disk都是指一个东西,和内存的区别是容量比较大。
磁盘的作用是存储数据。
普通用户用来存储音乐文件,视频文件,文本文件,游戏,目录。
工程师负责存储企业的数据:用户账号,用户头像,用户视频,用户信息。
磁盘分类
磁盘可以分为机械磁盘和固态磁盘:
机械磁盘的构成有磁头,磁臂,盘片,扇区,磁道,扇区等。
固态磁盘的组成是芯片。
固态磁盘的价格更贵一些。
linux的磁盘命名
linux查看磁盘名称的路径:/dev/sda 、 /dev/sdb …
- /dev : 表示设备文件目录
- s:表示磁盘的连接方式sata串口的方式
- d:表示磁盘
- a:表示第一块(b:就表示第二块, c表示第三块…)
磁盘的命名时计算机自动命名的,把磁盘插到计算机上,计算机自动命名。
跟过磁盘的概念可以查看:https://blog.csdn.net/mantou_riji/article/details/135649323
磁盘的分区方式
磁盘的分区就是指我们系统中的 C盘,D盘 这种概念。
常见的磁盘分区方式有MBR
、GPT
:
MBR:
- MBR是:主引导记录,是在磁盘
分区时
,在驱动器最前端的一段引导扇区
。MBR的大小固定为512字节,其中引导代码占据了前446字节
,而接下来的64字节被用于存储分区表
,最后2个字节是结束标记。分区表包含了硬盘分区的起始扇区和结束扇区,以及分区类型等信息。 - MBR支持最大的磁盘容量是<2TB
- 在MBR中,最多可以定义四个分区,每个分区的起始扇区被存储在分区表中。如果硬盘上只有一个分区,则分区表的四个分区项中的三个将被标记为未使用。
- 如果希望超过四个分区,需放弃主分区改为扩展分区和逻辑分区
GPT:
- GPT是:全局唯一标识分区表。它和MBR分区的区别就是
引导方式和分区结构
的不同;支持硬盘分区的容量不同。 - MBR分区直接存储数据和引导记录,GPT分区的数据和引导记录是分开存储的
- GPT支持大于2T的硬盘,可以支持128个分区
管理磁盘
虚拟机添加硬盘
- 关闭虚拟机:添加硬盘的时候必须要关闭电源
- 编辑虚拟机设置 ==> 虚拟机设置 ==> 添加 ==> 下一步(一直点下一步就可以了)
添加成功之后记得点击确认。
开机的时候会有如下显示
查看磁盘信息
法一:查看磁盘的命令:ll /dev/sd*
(是ls -l /dev/sd*
的简写)
eg:
brw-rw----. 1 root disk 8, 0 1月 19 23:30 /dev/sda
brw-rw----. 1 root disk 8, 1 1月 19 23:30 /dev/sda1
brw-rw----. 1 root disk 8, 2 1月 19 23:30 /dev/sda2
brw-rw----. 1 root disk 8, 16 1月 19 23:30 /dev/sdb
brw-rw----. 1 root disk 8, 32 1月 19 23:30 /dev/sdc
brw-rw----. 1 root disk 8, 48 1月 19 23:30 /dev/sdd
brw-rw----. 1 root disk 8, 64 1月 19 23:30 /dev/sde
brw-rw----. 1 root disk 8, 80 1月 19 23:30 /dev/sdf
brw-rw----. 1 root disk 8, 96 1月 19 23:30 /dev/sdg
- 开头的b: 是block的简写,表示是硬盘文件
- disk:是磁盘组,用来管理磁盘的
- 从上面的信息可以看出此计算机有7块硬盘,编号从a到g,注意
sda1
和sda2
是磁盘sda
的分区,表示的都是sda
这块磁盘,磁盘分区后才能存储数据
法二:查看磁盘的命令:lsblk
eg:
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 5G 0 disk
sdc 8:32 0 5G 0 disk
sdd 8:48 0 5G 0 disk
sde 8:64 0 5G 0 disk
sdf 8:80 0 5G 0 disk
sdg 8:96 0 5G 0 disk
sr0 11:0 1 4.4G 0 rom /run/media/root/CentOS 7 x86_64
- NAME:磁盘名称
- SIZE:表示磁盘大小
上述信息:
sda分区为sda1和sda2,sda1的大小是1G,sda2的大小是2G,sda2再进行分卷,分为centos-root
和centos-swap
。
磁盘分区流程
硬盘光添加完是不能使用的,还需要进行一系列的操作才能存储数据被我们使用。
需要进行如下操作:分区(MBR或者GPT)⇒ 格式化文件系统 ⇒ 挂载mount
创建分区
这里使用MBR
分区为例:
(MBR的分区命令就是fdisk
, GPT的分区命令是gdisk
其他操作是一样的)
- 启动分区工具:
fdisk /dev/硬盘名称
[root@localhost ~]# fdisk /dev/sdb
- 进入会话模式
(1)输入命令之后提示如下信息:
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x74b42328 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):
提示你,是否开始磁盘分区,此时按n
表示开始分区。
(2)按n
之后显示如下内容
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
选择分区类型:
p:主分区(MBR模式最多划分4个主分区)
e:扩展分区
此时按p
表示选择主分区。
(3)按p
后显示如下信息:
Select (default p): p
分区号 (1-4,默认 1):
选择当前主分区分区的分区号,一般从1编号开始分区。
(4)输入1
后显示如下信息:
分区号 (1-4,默认 1):1
起始 扇区 (2048-10485759,默认为 2048):
选择第一个分区的起始扇区的标号位置,默认位置是上一个分区的结束位置,如果没有上一个分区,默认从2048开始。一般直接输入回车
就可以了。
10485759的计算方式:
已知当前硬盘的大小是5G, 5GB = 5120MB = 5242880KB = 5368709120B, 一个扇区的大小固定式512B,所以扇区的个数是:5368709120/512 = 10485760, 编号是从0开始的。前面四个扇区存储的是MBR分区的方式,记录每个分区的大小和起始节点。
(5)输入回车之后显示
起始 扇区 (2048-10485759,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759):
选择第一个分区的结束位置的扇区编号,但是也可以直接写改分区需要分配多大的内存,如果想要分配2个G的内存直接输入+2G
即可。
(6)输入+2G
后显示
Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759):+2G
分区 1 已设置为 Linux 类型,大小设为 2 GiB
命令(输入 m 获取帮助):
目前是分好区了,但还没通知磁盘,我们需要输入w
,将该分区信息写入磁盘。
此时也可以输入n
,继续进行分区,所有空间都分配好之后再按 w
进行保存。
(7)输入w
保存分区信息,自动退出分区工具
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
- 刷新分区表
partprobe /dev/硬盘名称
按上述案例我们执行
partprobe /dev/sdb
- 查看分区结果
输入命令之后fdisk -l /dev/硬盘名称
[root@localhost ~]# fdisk -l /dev/sdb
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x74b42328
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
fdisk -l /dev/硬盘名称
表示查看磁盘的具体信息,磁盘的大小,字节数,扇区数,以及磁盘的分区大小。
创建文件系统
磁盘分区之后不能直接使用,还需要创建对应的文件系统才能使用。 文件系统的作用是给存储空间分块和编号
,便于数据的存储和管理。
创建文件系统的命令:mkfs.ext4 /dev/硬盘分区名
等价于 mkfs -t ext4 /dev/硬盘分区名
- mkfs.ext4 是 make(创造)、file(文件)、system(系统)、extend4(扩展文件系统第四代。是文件系统的类型)
- /dev/硬盘分区名:表示的是需要创建文件系统的分区,需要格式化的分区。
[root@localhost ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
- 块大小=4096 (log=2) 表示每个分块的大小
挂载mount
磁盘是一个文件,文件里面不能放文件夹,这个时候就需要对文件进行挂载,给磁盘找个文件夹 。
语法:mount -t 文件系统类型 需要挂载的磁盘 挂载的目标文件夹
挂载完成之后,该文件夹就相当于是新磁盘分区的空间,在里面存储内容占取的是新磁盘分区的空间
,这就是磁盘的挂载。
磁盘分区可以挂载在任意文件夹下。
挂载就是为磁盘存储数据信息提供一个访问入口,为访问磁盘提供一个门
eg:
[root@localhost mnt]# mkdir /mnt/disk1
[root@localhost mnt]# mount -t ext4 /dev/sdb1 /mnt/disk1
取消挂载的语法:unmount 需要卸载的磁盘
注意: monut的挂载命令是临时挂载,重启后是不会显示挂载信息的,想要实现永久挂载,需要把挂载命令放到文件/etc/fstab文件中。/etc/fstab文件存储的是所有硬盘的挂载信息
查看挂载信息
法一:df -hT
[root@localhost mnt]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 974M 0 974M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /dev/shm
tmpfs tmpfs 991M 11M 980M 2% /run
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 5.2G 12G 31% /
/dev/sda1 xfs 1014M 172M 843M 17% /boot
tmpfs tmpfs 199M 44K 198M 1% /run/user/0
/dev/sr0 iso9660 4.4G 4.4G 0 100% /run/media/root/CentOS 7 x86_64
/dev/sdb1 ext4 2.0G 6.0M 1.8G 1% /mnt/disk1
最后一行是我们刚才挂载的磁盘信息:
- 文件系统: 挂载的磁盘分区
- 类型:文件系统类型
- 容量:分区的容量
- 已用:分区已经使用的容量,当前有内容是文件系统所占取的空间
- 挂载点: 磁盘分区挂载的文件
上面几行的信息显示的都是第一块磁盘的挂载信息。
法二:使用mount
[root@localhost mnt]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
...
(rw,nosuid,nodev,relatime,user_id=0,group_id=0)
/dev/sr0 on /run/media/root/CentOS 7 x86_64 type iso9660 (ro,nosuid,nodev,relatime,uid=0,gid=0,iocharset=utf8,dmode=0500,mode=0400,uhelper=udisks2)
/dev/sdb1 on /mnt/disk1 type ext4 (rw,relatime,seclabel,data=ordered)
最后一行就是刚才设置的挂载信息。
注意:没有被分区的空间仍然不可用,只有已经进行分区的空间才可用。
剩余空间继续分区
继续执行一遍上面的 磁盘分区流程
即可。
- 划分分区时,p命令是查看当前磁盘的分区情况:
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x74b42328
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 4605951 204800 83 Linux
/dev/sdb3 4605952 5015551 204800 83 Linux
/dev/sdb4 5015552 10485759 2735104 83 Linux
MBR如何划分更多的分区
MBR最多划分4个分区,如果还要继续划分第5个分区就会显示如下内容:
命令(输入 m 获取帮助):n
If you want to create more than four partitions, you must replace a
primary partition with an extended partition first.
就是:如果你想要创建更多的分区就必须使用扩展分区。
扩展分区的主分区的区别:
- 如果单纯用来存储文件,主分区和扩展分区没有任何区别
- 区别在于
主分区
可以用来装操作系统
为什么只能有4个主分区
MBR分区前面的512个字节是主引导记录,其中有64字节被用于存储分区表
,这64个字节被平均分成4份,一份16个字节,用来存储每个主分区的起始位置和结束位置。这64个字节能且只能分四个部分,所以只能划分为4个主分区。
扩展分区的引入
扩展分区的原理是:放弃一个主分区,把它设置为扩展分区,扩展分区可以继续进行划分,划分为逻辑分区,想划成多少个逻辑分区就划分成多少个逻辑分区。
注意:扩展分区相当于一个容器,他容纳的是逻辑分区,所以无法在扩展分区存放数据,只能在逻辑分区存放数据,不划分逻辑分区是无法存放数据的。
操作:
- 删除一个主分区
命令(输入 m 获取帮助):d
分区号 (1-4,默认 4):4
分区 4 已删除
命令(输入 m 获取帮助):
- 创建扩展分区
常规的创建分区的流程只不过分区类型选择e(扩展分区):
命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): e
已选择分区 4
起始 扇区 (5015552-10485759,默认为 5015552):
将使用默认值 5015552
Last 扇区, +扇区 or +size{K,M,G} (5015552-10485759,默认为 10485759):
将使用默认值 10485759
分区 4 已设置为 Extended 类型,大小设为 2.6 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x74b42328
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 4605951 204800 83 Linux
/dev/sdb3 4605952 5015551 204800 83 Linux
/dev/sdb4 5015552 10485759 2735104 5 Extended
/dev/sdb4就是扩展分区
- 创建逻辑分区
直接输入n即可,继续创建逻辑分区,其他操作和创建主分区一样
命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 5
起始 扇区 (5017600-10485759,默认为 5017600):
将使用默认值 5017600
Last 扇区, +扇区 or +size{K,M,G} (5017600-10485759,默认为 10485759):+200M
分区 5 已设置为 Linux 类型,大小设为 200 MiB
命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 6
起始 扇区 (5429248-10485759,默认为 5429248):
将使用默认值 5429248
Last 扇区, +扇区 or +size{K,M,G} (5429248-10485759,默认为 10485759):+200M
分区 6 已设置为 Linux 类型,大小设为 200 MiB
命令(输入 m 获取帮助):N
All primary partitions are in use
添加逻辑分区 7
起始 扇区 (5840896-10485759,默认为 5840896):
将使用默认值 5840896
Last 扇区, +扇区 or +size{K,M,G} (5840896-10485759,默认为 10485759):
将使用默认值 10485759
分区 7 已设置为 Linux 类型,大小设为 2.2 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# partprobe /dev/sdb
- 查看分区结果
lsblk
命令:
- 逻辑分区的格式化和挂载和主分区的操作是一样的不再赘述,这里以挂载sdb5为例,查看一下结果:
[root@localhost ~]# mkfs.ext4 /dev/sdb5
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
51200 inodes, 204800 blocks
10240 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=33816576
25 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@localhost ~]# mkdir /mnt/disk5
[root@localhost ~]# mount -t ext4 /dev/sdb5 /mnt/disk5
[root@localhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 974M 0 974M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /dev/shm
tmpfs tmpfs 991M 11M 980M 2% /run
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 5.2G 12G 31% /
/dev/sda1 xfs 1014M 172M 843M 17% /boot
tmpfs tmpfs 199M 32K 199M 1% /run/user/0
/dev/sr0 iso9660 4.4G 4.4G 0 100% /run/media/root/CentOS 7 x86_64
/dev/sdb5 ext4 190M 1.6M 175M 1% /mnt/disk5
可以看到逻辑分区sdb5已经挂载到文件夹/mnt/disk5
上。
逻辑卷LVM
物理空间是限定的,当过一个文件非常大,需要放在多个磁盘进行存储,这种存储方式是不便于管理(拷贝、删除、授权)的。所以说我们不会将一个文件分储在多个磁盘上的。单靠物理磁盘是解决不了空间增长的问题的。
我们可以使用逻辑卷扩充一个磁盘分区的大小。
是什么
逻辑卷管理是一种高级的分区方式 。是管理磁盘的一种方式,性质与基本磁盘无异。
特点
使用逻辑卷可以随意扩张磁盘的大小。
术语
- PV:物理卷
- VG:卷组
- LV:逻辑卷
创建LVM
- 准备物理磁盘
按虚拟机添加硬盘的方式添加几块物理磁盘 - pv
将物理磁盘,转换成物理卷PV
。
命令:pvcreate 硬盘名
[root@localhost mnt]# pvcreate /dev/sdf
Physical volume "/dev/sdf" successfully created.
- vg
创建卷组VG
,将物理卷作为组成员创建卷组
命令:vgcreate 卷组名 卷组成员
[root@localhost mnt]# vgcreate vg1 /dev/sdf
Volume group "vg1" successfully created
- lv
创建逻辑卷LV
,从卷组中分出部分空间创建逻辑卷
命令:lvcreate -L 逻辑卷大小 -n 逻辑卷名 卷组VG名
eg:lvcreate -L 4G -n lv1 vg1
[root@localhost ~]# lvcreate -L 4G -n lv1 vg1
Logical volume "lv1" created.
- 创建文件系统并挂载
(和磁盘分区的操作一样)
创建文件系统:mkfs.ext4 /dev/卷组名/逻辑卷名
创建挂载点:mkdir /mnt/lv1
(临时挂载,开机会消失)
挂载:mount /dev/卷组名/逻辑卷名 挂载点
上述三条命令是:
mkfs.ext4 /dev/vg1/lv1
mkdir /mnt/lv1
mount /dev/vg1/lv1 /mnt/lv1
查看挂载信息:
[root@localhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg1-lv1 ext4 3.9G 16M 3.6G 1% /mnt/lv1
注意:逻辑卷的定位是 /dev/卷组名/逻辑卷名
此时查看硬盘信息:
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdf 8:80 0 5G 0 disk
└─vg1-lv1 253:2 0 4G 0 lvm /mnt/lv1
VG卷组扩容
卷组的空间也可能被占满,比如所有空间都分给了逻辑卷,此时就需要对卷组扩容。
卷组扩容只需要新建物理卷,然后把物理卷放到卷组中就可以了。
- 新建物理卷:
pvcreate /dev/硬盘名
- 物理卷放到卷组中:
vgextend 卷组名 刚才创建的物理卷
卷组中物理卷的空间总和就是该卷组的空间。
实际操作:
[root@localhost ~]# pvcreate /dev/sdg
Physical volume "/dev/sdg" successfully created.
[root@localhost ~]# vgextend vg1 /dev/sdg
Volume group "vg1" successfully extended
这样就扩充成功了,使用vgs
查看物理卷
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
vg1 2 1 0 wz--n- 9.99g 5.99g
原本的vg的大小是5G,扩容之后是10G
PV,VG,LV的查看方式
- 物理卷的查看方式:
pvs
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdf vg1 lvm2 a-- <5.00g 1020.00m
/dev/sdg vg1 lvm2 a-- <5.00g <5.00g
PSize:物理卷的大小
PFree :物理卷的空余空间
- 卷组的查看方式:
vgs
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
vg1 2 1 0 wz--n- 9.99g 5.99g
VG:卷组名
PV:卷组包含的物理卷个数
LV:化了一个逻辑卷
VSize:卷组的大小
VFree:卷组的空余方式
- 逻辑卷卷的查看方式:
lvs
LV扩容
LV的扩容本质上就是扩展逻辑卷
的容量。
占满lv逻辑卷空间
dd if=/dev/zero of=/mnt/lv1/1.txt bs=1M count=5000
查看剩余空间
[root@localhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg1-lv1 ext4 3.9G 3.8G 0 100% /mnt/lv1
lv扩容
lv扩容需要先查看对应的卷组是否还有空间,如果没有空间需要先对卷组扩容,如果有空间就可以对lv直接扩容。
- 查看卷组是否有空间命令:
vgs
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
vg1 2 1 0 wz--n- 9.99g 5.99g
- lv扩容:
lv的扩容命令是:lvextend -L +扩充的大小 /dev/卷组名/逻辑卷名
如:lvextend -L +200M /dev/vg1/lv1
[root@localhost ~]# lvextend -L +200M /dev/vg1/lv1
Size of logical volume vg1/lv1 changed from 4.00 GiB (1024 extents) to <4.20 GiB (1074 extents).
Logical volume vg1/lv1 successfully resized.
[root@localhost ~]# lvextend -L +4G /dev/vg1/lv1
Size of logical volume vg1/lv1 changed from <4.20 GiB (1074 extents) to <8.20 GiB (2098 extents).
Logical volume vg1/lv1 successfully resized.
- 查看扩容结果:
lvs
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.00g
swap centos -wi-ao---- 2.00g
lv1 vg1 -wi-a----- <8.20g
我们可以看到逻辑卷lv1已经扩容到8.2g
了。
刷新文件系统
上述命令是为lv扩容了,但是还没有同步到文件系统上:
[root@localhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg1-lv1 ext4 3.9G 3.8G 0 100% /mnt/lv1
可以看到逻辑卷lv1的容量仍然是4G,不是扩容后的大小,这是因为我们需要将逻辑卷的更新告知文件系统,就需要进行FS扩容。
FS扩容:resize2fs /dev/卷组名/逻辑卷
[root@localhost ~]# resize2fs /dev/vg1/lv1
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg1/lv1 is mounted on /mnt/lv1; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/vg1/lv1 is now 2148352 blocks long.
[root@localhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/vg1-lv1 ext4 8.0G 3.8G 3.8G 51% /mnt/lv1
此时就完成了LV扩容
交换分区管理Swap
swap简介
交换分区swap
其实就是一个普通的分区,任何一个分区都可以当做交换分区。
swap的作用:‘提升内存’的容量,防止内存溢出(OOM
)
交换分区swap是一块普通的分区,是硬盘上的一块存储空间,当内存的空间不够用的时候可以存储在交换分区swap
中,swap中存储的是热点数据,可以提高读取速度。
(在linux中叫交换分区swap,对应的在windows中叫虚拟内存)
swap的大小:
swap交换分区的推荐大小是内存的2倍。
但是在实际使用时:
- 大于4GB而小于16GB内存的系统,最小需要4GB交换空间;
- 大于16GB而小于64GB内存的系统,最小需要8GB交换空间;
- 大于64GB而小于256GB内存的系统,最小需要16GB交换空间。
查看当前交换分区
查看命令:free -m
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1980 821 72 19 1086 974
Swap: 2047 0 2047
可以看到swap的交换分区的大小是2G
。
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
...
我们通过lsblk
可以看出swap交换分区是从sda
硬盘的sda2分区中,并且大小是2G。
设置交换分区
准备分区
- 准备/dev/sde磁盘,划分2G分区
fdisk /dev/sde
过程略
- 划分分区后,按t,将类型设置为82
命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”
82表示的是交换分区的类型,按l命令可以查看分区的所有类型
命令(输入 m 获取帮助):l
0 空 24 NEC DOS 81 Minix / 旧 Linu bf Solaris
1 FAT12 27 隐藏的 NTFS Win 82 Linux 交换 / 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 隐藏的 C: c6 DRDOS/sec (FAT-
...
可以看到82表示的是交换分区swap
- 按
w
进行保存 - 刷新分区表
partprobe /dev/sde
刷硬盘
[root@localhost ~]# partprobe /dev/sde
[root@localhost ~]# ll /dev/sde*
brw-rw----. 1 root disk 8, 64 1月 21 14:19 /dev/sde
brw-rw----. 1 root disk 8, 65 1月 21 14:19 /dev/sde1
格式化
格式化交换分区:mkswap /dev/硬盘分区
[root@localhost ~]# mkswap /dev/sde1
正在设置交换空间版本 1,大小 = 2097148 KiB
无标签,UUID=b5b89581-4449-42c3-ae23-d02c98437efb
UUID是磁盘的身份证号
挂载
挂载分区:swapon /dev/磁盘分区
此时 /dev/sde1
就表示是交换分区,但是我们还需要挂载一下。
[root@localhost ~]# swapon /dev/sde1
取消挂载的命令是swaoff /dev/磁盘分区
验证
查看交换分区
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1980 808 93 19 1078 987
Swap: 4095 0 4095
可以看到当前的交换分区是4G,有2G是刚才我们手动设置的
文件系统
划分一个磁盘基本分为三大步:分区、格式化和挂载,其中最重要的就是格式化,格式化就是将存储空间划分成小块的过程,格式化的过程是创建文件系统的过程
。
文件系统的作用是
- 将文件准确地放到磁盘的某个位置
- 快速定位文件在磁盘的位置的位置
文件系统的类型
windows常见的文件系统:FAT16、FAT32、NTFS
Linux常见的文件系统:EXT3、EXT4、XFS
现在Linux常用的文件系统就是EXT3、4。
EXT3/4文件系统
类型: EXT3/4 文件系统的类型是索引文件系统
索引文件系统组成:索引文件系统由文件索引值(inode)和存储块(block)
组成,不同的文件有自己的索引值(inode),同时索引值又存储着对应的块信息:
- inode: 记录各个
文件
的属性,记录文件的元数据metadata。运输局是指文件的属性、大小、权限、属主属组、连接数、块数量
、块编号
。一个文件占用一个inode
,一个inode
的大小是128bytes。 - block:是存储文件的实际空间。每一个block的大小默认为4096b,即4K。block是存储数据最基本的单元:如果文件小于4k,那么该文件就会占取一个块空间,且无论该块是否还剩余空间,下一个文件都是从下一个块开始存储;如果文件大于4K,那么该文件就会占取多个快空间。如:一个5K的文件后面是一个2K的文件,那么存储方式就是,5k的文件占取第1、2个块,2K的文件占取第三个块。
- superblock:block与inode的总量,显示未使用和已使用的inode和block的数量。
查看文件的inode:
命令:ls -l -i 文件名
(即ls命令添加 -i参数就可以查看文件的inode)
[root@localhost disk1]# touch 1.txt
[root@localhost disk1]# ls -l -i 1.txt
12 -rw-r--r--. 1 root root 2023567360 1月 30 22:46 1.txt
其中第一个数据12
就是该文件的inode。
查看一个磁盘可以存储多少个文件:
即查看文件的inode
数量,
命令:df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb1 131072 12 131060 1% /mnt/disk1
可以看到sdb1分区有 131072 个Inode,即最多可以存储131072 个文件。
eg:
[root@localhost disk1]# rm -rf *.txt
[root@localhost disk1]# touch file{1..65527}
[root@localhost disk1]# touch file{65528..131061}
[root@localhost disk1]# ls -l | wc -l
131063
[root@localhost disk1]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb1 131072 131072 0 100% /mnt/disk1
ls -l | wc -l
:用于查询磁盘文件个数
总共有131063个文件,因为里面还有个系统文件夹,所以文件个数和inode个数不一样。但是此时sdb1分区已经满了,再往sdb1分区写文件就写不进去了。
[root@localhost disk1]# touch file{131062..131070}
touch: 无法创建"file131062": 设备上没有空间
touch: 无法创建"file131063": 设备上没有空间
touch: 无法创建"file131064": 设备上没有空间
touch: 无法创建"file131065": 设备上没有空间
touch: 无法创建"file131066": 设备上没有空间
touch: 无法创建"file131067": 设备上没有空间
touch: 无法创建"file131068": 设备上没有空间
touch: 无法创建"file131069": 设备上没有空间
touch: 无法创建"file131070": 设备上没有空间
此时只是不能创建文件了,但是文件都还是空文件。即inode满了,但是block都还是空的。我们可以在文件中编写内容,填充block。
[root@localhost disk1]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sdb1 ext4 2.0G 9.7M 1.8G 1% /mnt/disk1
可以看到可用空间还有1.8G呢。
占取block空间:
[root@localhost disk1]# dd if=/dev/zero of=./file1 bs=1M count=3000
dd: 写入"./file1" 出错: 设备上没有空间
记录了1927+0 的读入
记录了1926+0 的写出
2019708928字节(2.0 GB)已复制,12.5855 秒,160 MB/秒
[root@localhost disk1]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sdb1 ext4 2.0G 1.9G 0 100% /mnt/disk1
此时sdb1分区的空间已经被占满。
我们发现:一个文件可以占取磁盘分区的所有空间,限制文件大小的是磁盘分区的大小,而不是block块(4096kb)的大小
此时再向file2中写内容,会报错:
[root@localhost disk1]# dd if=/dev/zero of=./file2 bs=1k count=3000
dd: 写入"./file2" 出错: 设备上没有空间
记录了1+0 的读入
记录了0+0 的写出
0字节(0 B)已复制,0.000398932 秒,0.0 kB/秒
系统限制:
- EXT3:文件系统最大16TB
- EXT4:文件系统最大16TB
- XFS:文件系统最大100TB
磁盘文件碎片
- 是指一个文件可能不会被存储在连续的空间里。如:A文件占取块1,2,3;B文件展示4、5;C文件占取6、7。如果此时删除了文件B,并且存储需要占取4个block的文件D,那么文件D所占取的块就是4,5,8,9。这就是文件碎片。文件碎片的产生是不可避免的,不影响使用,只影响读取速度
确定系统有几个文件系统
系统文件系统的数量是根据格式化的次数决定的,格式化了几次就有几个文件系统。即执行了几次mkfs.ext4
命令就有几个文件系统。
文件链接
文件链接就是快捷方式。
符号链接
符号链接就是软链接,可以通过软链接快速访问文件。
软链接的创建方式:
- 创建一个文件并输入内容
[root@localhost disk1]# echo 111 > /file1
[root@localhost disk1]# cat /file1
111
- 创建文件的软链接
ln -s 文件的实际位置 创建软链接的位置
[root@localhost disk1]# ln -s /file1 /root/桌面/file11
[root@localhost disk1]# ls -l /root/桌面/file11
lrwxrwxrwx. 1 root root 6 1月 30 23:42 /root/桌面/file11 -> /file1
第一个字母l表示是link,快捷键。
/root/桌面/file11
就是 /file1
的软连接,删除源文件,软连接闪烁,不可用。
软链接的特点:
- 软链接像快捷方式,可以对
文件和目录
做软连接。 - 软链接记录的只是源文件的绝对路径。
- 软链接失去源文件不可用。如果源文件删除,或改名,或移动位置软链接都不可用,因为软连接存储的是文件的绝对路径。
硬链接
硬链接和软连接很像,但是硬链接只能在一个分区里面做。
硬链接的创建方式:
- 创建文件
[root@localhost disk1]# echo 222 > /file2
[root@localhost disk1]# cat /file2
222
- 创建文件的硬链接
ln 文件的实际位置 创建软链接的位置
[root@localhost disk1]# ln /file2 /file2-h1
[root@localhost disk1]# ls -l /file2 /file2-h1
-rw-r--r--. 2 root root 4 1月 30 23:57 /file2
-rw-r--r--. 2 root root 4 1月 30 23:57 /file2-h1
其中的2表示的是文件的硬链接数
,文件本身算一个硬链接。
硬链接的特点:
- 硬链接
只能在同分区
做。创建同分区硬链接成功,创建不同分区硬链接失败。 - 硬链接只能针对文件做。不能对目录做。
- 硬链接失去源文件仍然可用。如果源文件删除,访问硬链接,还是可以访问的,硬链接相当于备份。
RAID
RAID的作用:
- 容错,保障数据的安全性:备份数据,当磁盘损坏的时候,可以保证数据不丢失
- 提升磁盘的读写速度
什么是RAID
RAID:廉价磁盘冗余阵列
就是将磁盘的数据备份到廉价的磁盘上,这种策略就叫做RAID。
RAID的类型
常见的RAID类型有RAID0
,RAID1
,RAID5
。
- 操作系统一般做成
RAID1
- 对于重要的数据做成
RAID5
RAID0
RAID0又叫条带集
,2块及以上磁盘,如果磁盘数是n,那么读写速度比原来快n倍,但是不能容错。
- 读写速度比原来快n倍,n磁盘同时读写,速度自然是之前的n倍
- 由于没有备份盘,所以不容错
RAID1
RAID1俗称镜像集
,包含2块磁盘,容量是50%,读写速度一般,容错
。
- 包含2块磁盘,容量是50%:一块磁盘存储数据,一块磁盘用来备份,所以实际上只有一半的空间可以使用。
- 容错: RAID1备份磁盘数据,可以容错。
RAID5
RAID5包含3块及以上磁盘,并且所有磁盘大小一样,利用率(n-1)/n
,读写速度快。容错。
- 最少包含3块磁盘,其中有一块磁盘是
校验盘
做数据备份用,其余盘都是数据盘,用来存储数据的,所以利用率是(n-1)/n
。RAID5备份的原理是:三块盘其中有两块是数据盘,一块是校验盘,存储数据的时候,将数据拆成两份,两块数据盘各一份,再将两份数据经过某种运算得到的结果存储在校验盘中。这样计时其中一个数据盘坏了,通过逆运算还可以获取到损坏的数据盘。 - 如果多余3块盘,假设总共有n块盘,那么n-1块磁盘用来存储数据,数据将被分成n-1份,n-1份数据的计算结果被存储在校验盘上。
- 读写速度快:是因为一个数据被存储在n-1块盘上,这n-1块盘同时读写,速度当然快。如果n-1=2,速度就比原来快2倍;如果n-1=4,速度就比原来快4倍
热备盘
,RAID5种可能会有热备盘的存在,热备盘的作用是
当3块盘其中的任意一块盘损坏之后,热备盘就能够及时的充当损坏的那块盘的角色。
RAID的分类
- 硬RAID:需要
RAID卡
(硬件),有自己的CPU,处理速度快。 - 软RAID:通过操作系统实现,比如
Windows、Linux
软RAID创建示例
使用软RAID(以RAID5为例),分为如下几步:
- 准备4块硬盘 :3块数据盘+1块热备盘
在虚拟机上创建4块虚拟硬盘
[root@localhost ~]# ls /dev/sd* -l
brw-rw----. 1 root disk 8, 112 2月 2 21:35 /dev/sdh
brw-rw----. 1 root disk 8, 128 2月 2 21:35 /dev/sdi
brw-rw----. 1 root disk 8, 144 2月 2 21:35 /dev/sdj
brw-rw----. 1 root disk 8, 160 2月 2 21:35 /dev/sdk
- 创建RAID
命令:mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd{h,i,j,k}
-C: 创建
/dev/md0: 给RAID命名,/dev/RAID的名字
-l5:等级是5,代表RAID5
-n3:表示的是数据盘的数量
-x1:表示热备盘的数量
/dev/sd{h,i,j,k}:对哪些磁盘做
创建示例
[root@localhost ~]# mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd{h,i,j,k}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
如果机器上没有mdadm
命令,需要手动安装一下
yum -y install mdadm
- 格式化挂载
RAID本质上就是一块磁盘,我们可以将其进行挂载。
[root@localhost ~]# mkfs.ext4 /dev/md0
[root@localhost ~]# mkdir /mnt/raid5
[root@localhost ~]# mount /dev/md0 /mnt/raid5/
[root@localhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/md0 ext4 2.0G 52M 1.8G 3% /mnt/raid5
只有2G空间是因为:4块盘,2块存数据,一块校验盘,一块热备盘。
- 查看RAID信息
mdadm -D RAID盘
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Feb 2 22:14:19 2024
Raid Level : raid5
Array Size : 2093056 (2044.00 MiB 2143.29 MB)
Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
...
Number Major Minor RaidDevice State
0 8 112 0 active sync /dev/sdh
1 8 128 1 active sync /dev/sdi
4 8 144 2 active sync /dev/sdj
3 8 160 - spare /dev/sdk
- 模拟一块硬盘损坏并移除
损坏磁盘mdadm /dev/md0 -f /dev/sdh -r /dev/sdh
,表示强制删除h盘。
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdh -r /dev/sdh
mdadm: set /dev/sdh faulty in /dev/md0
mdadm: hot removed /dev/sdh from /dev/md0
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Feb 2 22:14:19 2024
Raid Level : raid5
Array Size : 2093056 (2044.00 MiB 2143.29 MB)
Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
...
Number Major Minor RaidDevice State
3 8 160 0 active sync /dev/sdk
1 8 128 1 active sync /dev/sdi
4 8 144 2 active sync /dev/sdj
可以看到热备盘sdk现在被作为数据盘使用
补充:挂载和卸载问题
- 如果一个分区挂载在一个文件夹上,该分区卸载时候,原挂载分区的内容会移到
sda
分区上。 - 如果一个分区挂载在一个有内容的文件夹上,那么挂载的分区的内容会覆盖文件夹的内容,如果在卸载该分区,文件夹的内容还是之前存储的内容。简单来说,未挂载时,文件夹存储的是
sda
的内容,挂载后文件存储的是新分区的内容。 - 注意挂载是临时的,当计算机重启之前挂载的内容会消失,也可以永久挂载但是可能会影响操作系统的启动。
- 永久挂载的方式是将挂载命令编写在一个系统启动文件中。
补充:电脑重启命令
reboot
init 6
补充:写满一个磁盘
dd if=/dev/zero of=/mnt/disk4/1.txt bs=1M count=1000
是一个抄写命令
- dd: 抄写命令
- if=/dev/zero:抄写的位置
- of=/mnt/disk4/1.txt:抄写的目标位置
- bs =1M :抄写的大小
- count:抄写的次数
上述命令就是表示抄写/dev/zero中的内容到/mnt/disk4/1.txt中,每次抄写1MB的大小,总共抄写1000次。
eg:
[root@localhost mnt]# dd if=/dev/zero of=/mnt/disk1/1.txt bs=1M count=2000
dd: 写入"/mnt/disk1/1.txt" 出错: 设备上没有空间
记录了1930+0 的读入
记录了1929+0 的写出
2023567360字节(2.0 GB)已复制,8.16791 秒,248 MB/秒
[root@localhost mnt]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 974M 0 974M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /dev/shm
tmpfs tmpfs 991M 11M 980M 2% /run
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 5.2G 12G 31% /
/dev/sda1 xfs 1014M 172M 843M 17% /boot
tmpfs tmpfs 199M 28K 199M 1% /run/user/0
/dev/sr0 iso9660 4.4G 4.4G 0 100% /run/media/root/CentOS 7 x86_64
/dev/sdb1 ext4 2.0G 1.9G 0 100% /mnt/disk1
可以看到磁盘分区空间已满
补充:卸载分区
如果一个分区不想使用了,一定要先卸载umount
,再删除分区。
删除分区的命令是:fdisk -d