磁盘,硬盘,disk都是指一个东西,和内存的区别是容量比较大。
磁盘的作用是存储数据。
普通用户用来存储音乐文件,视频文件,文本文件,游戏,目录。
工程师负责存储企业的数据:用户账号,用户头像,用户视频,用户信息。
磁盘可以分为机械磁盘和固态磁盘:
机械磁盘的构成有磁头,磁臂,盘片,扇区,磁道,扇区等。
固态磁盘的组成是芯片。
固态磁盘的价格更贵一些。
linux查看磁盘名称的路径:/dev/sda 、 /dev/sdb …
跟过磁盘的概念可以查看:https://blog.csdn.net/mantou_riji/article/details/135649323
磁盘的分区就是指我们系统中的 C盘,D盘 这种概念。
常见的磁盘分区方式有MBR
、GPT
:
MBR:
分区时
,在驱动器最前端的一段引导扇区
。MBR的大小固定为512字节,其中引导代码占据了前446字节
,而接下来的64字节被用于存储分区表
,最后2个字节是结束标记。分区表包含了硬盘分区的起始扇区和结束扇区,以及分区类型等信息。GPT:
引导方式和分区结构
的不同;支持硬盘分区的容量不同。法一:查看磁盘的命令: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
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
centos-root
和centos-swap
。硬盘光添加完是不能使用的,还需要进行一系列的操作才能存储数据被我们使用。
需要进行如下操作:分区(MBR或者GPT)⇒ 格式化文件系统 ⇒ 挂载mount
这里使用MBR
分区为例:
(MBR的分区命令就是fdisk
, GPT的分区命令是gdisk
其他操作是一样的)
fdisk /dev/硬盘名称
[root@localhost ~]# fdisk /dev/sdb
[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/硬盘分区名
[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: 完成
磁盘是一个文件,文件里面不能放文件夹,这个时候就需要对文件进行挂载,给磁盘找个文件夹 。
语法: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)
最后一行就是刚才设置的挂载信息。
注意:没有被分区的空间仍然不可用,只有已经进行分区的空间才可用。
继续执行一遍上面的 磁盘分区流程
即可。
命令(输入 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最多划分4个分区,如果还要继续划分第5个分区就会显示如下内容:
命令(输入 m 获取帮助):n
If you want to create more than four partitions, you must replace a
primary partition with an extended partition first.
就是:如果你想要创建更多的分区就必须使用扩展分区。
扩展分区的主分区的区别:
主分区
可以用来装操作系统MBR分区前面的512个字节是主引导记录,其中有64字节被用于存储分区表
,这64个字节被平均分成4份,一份16个字节,用来存储每个主分区的起始位置和结束位置。这64个字节能且只能分四个部分,所以只能划分为4个主分区。
扩展分区的原理是:放弃一个主分区,把它设置为扩展分区,扩展分区可以继续进行划分,划分为逻辑分区,想划成多少个逻辑分区就划分成多少个逻辑分区。
注意:扩展分区相当于一个容器,他容纳的是逻辑分区,所以无法在扩展分区存放数据,只能在逻辑分区存放数据,不划分逻辑分区是无法存放数据的。
操作:
命令(输入 m 获取帮助):d
分区号 (1-4,默认 4):4
分区 4 已删除
命令(输入 m 获取帮助):
命令(输入 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就是扩展分区
命令(输入 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
[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
上。
物理空间是限定的,当过一个文件非常大,需要放在多个磁盘进行存储,这种存储方式是不便于管理(拷贝、删除、授权)的。所以说我们不会将一个文件分储在多个磁盘上的。单靠物理磁盘是解决不了空间增长的问题的。
我们可以使用逻辑卷扩充一个磁盘分区的大小。
逻辑卷管理是一种高级的分区方式 。是管理磁盘的一种方式,性质与基本磁盘无异。
使用逻辑卷可以随意扩张磁盘的大小。
物理卷PV
。pvcreate 硬盘名
[root@localhost mnt]# pvcreate /dev/sdf
Physical volume "/dev/sdf" successfully created.
卷组VG
,将物理卷作为组成员创建卷组vgcreate 卷组名 卷组成员
[root@localhost mnt]# vgcreate vg1 /dev/sdf
Volume group "vg1" successfully created
逻辑卷LV
,从卷组中分出部分空间创建逻辑卷lvcreate -L 逻辑卷大小 -n 逻辑卷名 卷组VG名
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
卷组的空间也可能被占满,比如所有空间都分给了逻辑卷,此时就需要对卷组扩容。
卷组扩容只需要新建物理卷,然后把物理卷放到卷组中就可以了。
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
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逻辑卷空间
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
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的作用:‘提升内存’的容量,防止内存溢出(OOM
)
交换分区swap是一块普通的分区,是硬盘上的一块存储空间,当内存的空间不够用的时候可以存储在交换分区swap
中,swap中存储的是热点数据,可以提高读取速度。
(在linux中叫交换分区swap,对应的在windows中叫虚拟内存)
swap的大小:
swap交换分区的推荐大小是内存的2倍。
但是在实际使用时:
查看命令: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。
fdisk /dev/sde
过程略
命令(输入 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 文件系统的类型是索引文件系统
索引文件系统组成:索引文件系统由文件索引值(inode)和存储块(block)
组成,不同的文件有自己的索引值(inode),同时索引值又存储着对应的块信息:
文件
的属性,记录文件的元数据metadata。运输局是指文件的属性、大小、权限、属主属组、连接数、块数量
、块编号
。一个文件占用一个inode
,一个inode
的大小是128bytes。查看文件的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/秒
系统限制:
系统文件系统的数量是根据格式化的次数决定的,格式化了几次就有几个文件系统。即执行了几次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类型有RAID0
,RAID1
,RAID5
。
RAID1
RAID5
RAID0又叫条带集
,2块及以上磁盘,如果磁盘数是n,那么读写速度比原来快n倍,但是不能容错。
RAID1俗称镜像集
,包含2块磁盘,容量是50%,读写速度一般,容错
。
RAID5包含3块及以上磁盘,并且所有磁盘大小一样,利用率(n-1)/n
,读写速度快。容错。
校验盘
做数据备份用,其余盘都是数据盘,用来存储数据的,所以利用率是(n-1)/n
。RAID5备份的原理是:三块盘其中有两块是数据盘,一块是校验盘,存储数据的时候,将数据拆成两份,两块数据盘各一份,再将两份数据经过某种运算得到的结果存储在校验盘中。这样计时其中一个数据盘坏了,通过逆运算还可以获取到损坏的数据盘。热备盘
,RAID5种可能会有热备盘的存在, 热备盘的作用是
当3块盘其中的任意一块盘损坏之后,热备盘就能够及时的充当损坏的那块盘的角色。RAID卡
(硬件),有自己的CPU,处理速度快。Windows、Linux
使用软RAID(以RAID5为例),分为如下几步:
[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
mdadm -C /dev/md0 -l5 -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
[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块存数据,一块校验盘,一块热备盘。
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
是一个抄写命令
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