第六章 存储管理1
1 基本分区
磁盘简介
名词:磁盘/硬盘/disk是同一个东东,不同于内存的是容量比较大。
类型:
-
从工作原理区分
机械: 机械硬盘即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。
固态: 固态驱动器(Solid State Disk或Solid State Drive,简称SSD),俗称固态硬盘,固态硬盘是用固态电子存储芯片阵列而制成的硬盘
图示:
-
尺寸:3.5英寸 2.5英寸 1.8英寸
-
-
接口 :
早期IDE
现在SATA I/II/III
-
转速: 5400rpm、7200rpm、10000rpm、15000rpm
-
厂商:西部数据、希捷、三星日立金士顿
-
术语:
盘片 ---- 一块硬盘有若干盘片,每个盘片有可以存储数据的上、下两盘面(Side)。这些盘面堆叠在主轴上高速旋转,它们从上至下从“0”开始依次编号。
磁道 ---- 每个盘面被划分成许多同心圆,这些同心圆轨迹叫做磁道;磁道从外向内从0开始顺序编号。
扇区 ---- 将一个盘面划分为若干内角相同的扇形,这样盘面上的每个磁道就被分为若干段圆弧,每段圆弧叫做一个扇区。每个扇区中的数据作为一个单元同时读出或写入。硬盘的第一个扇区,叫做引导扇区。
柱面 ---- 所有盘面上的同一磁道构成一个圆柱,称作柱面
-
命名 kernel对不同接口硬盘命名方式
IDE(并口)
/dev/hda 和 /dev/hdb
SATA(串口)
/dev/sda 其中:/dev设备文件目录 sda是一个文件 s代表sata就是串口 d代表磁盘 a第一块
/dev/sdb
-
分区方式
MBR
主引导记录(MBR,Master Boot Record)是位于磁盘最前边的一段引导
MBR支持最大的磁盘容量是 <2TB。设计时分配4个分区
如果希望超过4个分区,需放弃主分区,改为扩展分区和逻辑分区。
使用sfdisk命令
GPT
全局唯一标识分区表(GUIDPartition Table,缩写:GPT)是一个实体硬盘的分区表的结构布局的标准。
GPT 支持大于2T的硬盘,支持128个分区
管理磁盘
首先我们要在 VMWARE 增加磁盘 ,先关闭虚拟机电源,编辑虚拟机设置。
增加磁盘
* 管理磁盘流程三部曲
新硬盘:分区(MBR或者GPT) ---->格式化/文件系统 Filesystem ----> 挂载mount
就像我们管理毛坯房:隔间-----------> 放家具/打造格子柜----------------> 加个门/目录
示例:
#查看磁盘信息 方法1
[root@localhost ~]# ll /dev/sd*
brw-rw----. 1 root disk 8, 0 1月 25 09:35 /dev/sda
brw-rw----. 1 root disk 8, 1 1月 25 09:35 /dev/sda1
brw-rw----. 1 root disk 8, 2 1月 25 09:35 /dev/sda2
brw-rw----. 1 root disk 8, 16 1月 25 09:35 /dev/sdb
brw-rw----. 1 root disk 8, 32 1月 25 09:35 /dev/sdc
brw-rw----. 1 root disk 8, 48 1月 25 09:35 /dev/sdd
#sdb sdc sdd相当于新磁盘
#方法2 (了解)
[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
sdh 8:112 0 5G 0 disk
sdi 8:128 0 5G 0 disk
sdj 8:144 0 5G 0 disk
sr0 11:0 1 4.4G 0 rom
#名称 设备类型 序号 是否可移动设备 大小 是否只读 磁盘或分区 挂载点
创建分区
MBR:把房子分成卧室和客厅
#启动分区工具:
[root@localhost ~]# fdisk /dev/sdb
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x4667b127 创建新的 DOS 磁盘标签。
#敲击字母n键 新建分区(欢迎界面,输入帮助指令或操作指令。)
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
#敲击字母“p”键(请选择主分区,或扩展分区)
Select (default p): p
#敲击数字“1”键(选择分区号)
分区号 (1-4,默认 1):1
起始 扇区 (2048-10485759,默认为 2048):
# 敲击回车键(选择磁盘开始的扇区)
将使用默认值 2048
#输入分区大小“+2G” 后回车,选择磁盘分区结束的扇区,即分区大小
#(实际环境根据磁盘划分,如4T磁盘,可以500G 一个分区。此处2G)
Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759):+2G
分区 1 已设置为 Linux 类型,大小设为 2 GiB
#此时已经完成 2G 大小分区记录。但未生效
命令(输入 m 获取帮助):w
#输入w保存分区信息,自动退出分区工具
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]#
#刷新分区表
[root@localhost ~]# partprobe /dev/sdb
#查看分区结果(或者使用lsblk)
[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
磁盘标识符:0x5bd82af9
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
[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
└─sdb1 8:17 0 2G 0 part #划分磁盘完毕!
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
sdh 8:112 0 5G 0 disk
sdi 8:128 0 5G 0 disk
sdj 8:144 0 5G 0 disk
sr0 11:0 1 4.4G 0 rom
创建文件系统(格式化)
#文件系统就像房子里的格子柜
[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
# 创建挂载点,一个分区一个挂载点
[root@localhost ~]# mkdir /mnt/disk1
[root@localhost ~]#mount -t ext4 /dev/sdb1 /mnt/disk1
#查看挂载信息
#方法1 df-Th
[root@server0 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb1 ext4 2G 6M 1.9G 3% /mnt/disk1
分区 文件系统 大小 占用 空闲 占比 挂载点
#方法2 mount
[root@server0 ~]# mount
/dev/sdb1 on /mysql_data type xfs (rw,relatime,seclabel,attr2,inode64,noquoa)
/dev/sdb3 on /mnt/disk1/disk2/disk3/disk4 type ext4 (rw,relatime,seclabel,dta=ordered)
#mount 看的是磁盘有没有特殊属性,具体属性在后续讲解。
磁盘分区的数量可以超过4吗
如果我们想要分4个以上的分区,我们需要放弃一个主分区,选择创建扩展分区。
分两种情况:
- 主分区已创建并使用
#先卸载
[root@localhost ~]# umount /dev/sdc4
[root@localhost ~]# df -hT | tail -5
/dev/sdc1 ext4 1008M 1.3M 956M 1% /mnt/disk1
/dev/sdc3 ext4 1008M 1.3M 956M 1% /mnt/disk3
/dev/sdc2 ext4 1008M 1.3M 956M 1% /mnt/disk2
/dev/sda1 xfs 1014M 150M 865M 15% /boot
tmpfs tmpfs 182M 0 182M 0% /run/user/0
#此时sdc4已经被卸载,但fidsk -l /dev/sdc分区4还在
#删除主分区
[root@localhost ~]# fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):d
分区号 (1-4,默认 4):4
分区 4 已删除
命令(输入 m 获取帮助):p
磁盘 /dev/sdc:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xe11bb74f
设备 Boot Start End Blocks Id System
/dev/sdc1 2048 2099199 1048576 83 Linux
/dev/sdc2 2099200 4196351 1048576 83 Linux
/dev/sdc3 4196352 6293503 1048576 83 Linux
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
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)
正在同步磁盘。
#创建扩展分区
[root@localhost ~]# fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): e
已选择分区 4
起始 扇区 (6293504-10485759,默认为 6293504):
将使用默认值 6293504
Last 扇区, +扇区 or +size{K,M,G} (6293504-10485759,默认为 10485759):
将使用默认值 10485759
分区 4 已设置为 Extended 类型,大小设为 2 GiB
#创建两个逻辑分区
命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 5
起始 扇区 (6295552-10485759,默认为 6295552): 将使用默认值 6295552
Last 扇区, +扇区 or +size{K,M,G} (6295552-10485759,默认为 10485759):+200M
分区 5 已设置为 Linux 类型,大小设为 200 MiB
命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 6
起始 扇区 (6707200-10485759,默认为 6707200):
将使用默认值 6707200
Last 扇区, +扇区 or +size{K,M,G} (6707200-10485759,默认为 10485759):+200M
分区 6 已设置为 Linux 类型,大小设为 200 MiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdc:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xe11bb74f
设备 Boot Start End Blocks Id System
/dev/sdc1 2048 2099199 1048576 83 Linux
/dev/sdc2 2099200 4196351 1048576 83 Linux
/dev/sdc3 4196352 6293503 1048576 83 Linux
/dev/sdc4 6293504 10485759 2096128 5 Extended
/dev/sdc5 6295552 6705151 204800 83 Linux
/dev/sdc6 6707200 7116799 204800 83 Linux
#主分区创建但是未使用 (未挂载)
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): e
分区号 (2-4,默认 2):
起始 扇区 (4196352-10485759,默认为 4196352):
将使用默认值 4196352
Last 扇区, +扇区 or +size{K,M,G} (4196352-10485759,默认为 10485759):+1G
分区 2 已设置为 Extended 类型,大小设为 1 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x5bd82af9
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 6293503 1048576 5 Extended
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
-
重启后的影响
重启后mount临时挂载就消失了,需要使用永久挂载
#永久挂载 [root@localhost ~]# vim /etc/fstab /dev/sdc5 /mnt/disk5 ext4 defaults 0 0 /dev/sdc6 /mnt/disk6 ext4 defaults 0 0 #磁盘 挂载点 文件系统类型 默认选项 优先级 优先级 [root@localhost ~]# mount -a
2 逻辑卷LVM
写满一个磁盘需要几步?
dd if=/dev/zero of=/mnt/disk4/1.txt bs= 1M count=1000
基本磁盘,缺点就是无法调整大小。
LVM目的:管理磁盘的一种方式,性质与基本磁盘无异。
特点:可以随意扩张大小
LVM是 Logical Volume Manager(逻辑卷管理)
PV:物理卷(Physical volume):一块硬盘,或多块硬盘
VG:卷组(Volume Group):一堆磁盘的统称
LV:逻辑卷(Logical Volume):一个逻辑分区,一个分区
-
创建LVM
1.准备好物理磁盘
[root@localhost ~]# ll /dev/sd* brw-rw----. 1 root disk 8, 48 8月 1 09:32 /dev/sdd brw-rw----. 1 root disk 8, 64 8月 1 09:32 /dev/sde brw-rw----. 1 root disk 8, 80 8月 1 09:32 /dev/sdf
2.将准备好的物理磁盘转换成物理卷-PV
[root@localhost ~]# pvcreate /dev/sdd Physical volume "/dev/sdd" successfully created. [root@localhost ~]# pvscan PV /dev/sda2 VG centos lvm2 [<19.00 GiB / 0 free] PV /dev/sde lvm2 [5.00 GiB] PV /dev/sdd lvm2 [5.00 GiB] Total: 3 [<29.00 GiB] / in use: 1 [<19.00 GiB] / in no VG: 2 [10.00 GiB] #创建卷组 [root@localhost ~]# vgcreate vg1 /dev/sdd Volume group "vg1" successfully created #查看卷组信息 法1 查看卷组的摘要信息。卷组名,物理卷数量,逻辑卷数量,大小等。 [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- <19.00g 0 vg1 1 0 0 wz--n- <5.00g <5.00g #第二种方法,扫描卷组信息。 [root@localhost ~]# vgscan Reading volume groups from cache. Found volume group "centos" using metadata type lvm2 Found volume group "vg1" using metadata type lvm2 #第三种方法。显示卷组详细信息。 [root@localhost ~]# vgdisplay VG Name vg1 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size <5.00 GiB PE Size 4.00 MiB Total PE 1279 Alloc PE / Size 0 / 0 Free PE / Size 1279 / <5.00 GiB VG UUID v3otGU-GdiK-21sc-2EYV-yQr0-Q3aA-ohCoja
3.创建逻辑卷
[root@localhost ~]# lvcreate -L 200M -n lv1 vg1 Logical volume "lv1" created. [root@localhost ~]# lvscan ACTIVE '/dev/centos/swap' [2.00 GiB] inherit ACTIVE '/dev/centos/root' [<17.00 GiB] inherit ACTIVE '/dev/vg1/lv1' [200.00 MiB] inherit
4.创建文件系统并挂载
#格式化 : mkfs.ext4 /dev/卷组名/逻辑卷名 [root@localhost ~]# mkfs.ext4 /dev/vg1/lv1 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/lv1 [root@localhost ~]# mount /dev/vg1/lv1 /mnt/lv1 # 查看挂载结果 [root@localhost ~]# df 文件系统 1K-块 已用 可用 已用% 挂载点 /dev/mapper/vg1-lv1 194235 1550 178349 1% /mnt/lv1 #逻辑卷管理完毕,就可以向挂载点写入数据了。
-
VG管理 == 扩大VG vgextend ==
环境: /dev/vg1 容量由5G扩容到10G
#步骤1 创建PV 使用第二步将PV增加到VG中 [root@localhost ~]# pvcreate /dev/sde #步骤2:扩展VG,同时包含方法1. [root@localhost ~]# vgextend vg1 /dev/sde Volume group "vg1" successfully extended #查看VG [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 <9.80g
-
LV扩容
扩大LV lvextend 依赖于VG是否有剩余空间
#1.查看VG空间 [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 <9.80g #2。如果VG的空间满足LV的情况下,LV扩容方式如下 [root@localhost ~]# lvextend -L +200M /dev/vg1/lv1 Size of logical volume vg1/lv1 changed from 200.00 MiB (50 extents) to 400.00 MiB (100 extents). Logical volume vg1/lv1 successfully resized. [root@localhost ~]# df -Th 文件系统 类型 容量 已用 可用 已用% 挂载点 devtmpfs devtmpfs 898M 0 898M 0% /dev tmpfs tmpfs 910M 0 910M 0% /dev/shm tmpfs tmpfs 910M 9.7M 901M 2% /run tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup /dev/mapper/centos-root xfs 17G 1.7G 16G 10% / /dev/sdc5 ext4 190M 102M 75M 58% /mnt/disk5 /dev/sdc2 ext4 1008M 1.3M 956M 1% /mnt/disk2 /dev/sdc1 ext4 1008M 1.3M 956M 1% /mnt/disk1 /dev/sdc6 ext4 190M 1.6M 175M 1% /mnt/disk6 /dev/sdc3 ext4 1008M 1.3M 956M 1% /mnt/disk3 /dev/sda1 xfs 1014M 150M 865M 15% /boot tmpfs tmpfs 182M 0 182M 0% /run/user/0 /dev/mapper/vg1-lv1 ext4 190M 1.6M 175M 1% /mnt/lv1 [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 = 2, new_desc_blocks = 4 The filesystem on /dev/vg1/lv1 is now 409600 blocks long. [root@localhost ~]# df -Th 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/vg1-lv1 ext4 384M 2.3M 360M 1% /mnt/lv1 #文件系统的大小发生了改变.
- 命令总结
- 命令总结
-
3 交换分区管理 Swap
简介:
作用:‘提升’内存的容量,防止OOM(Out of Memory)
swap大小:推荐设置交换分区的大小为内存的两倍
生产:
1.大于4GB小于16GB的内存的系统,最小需要4GB交换空间;
2.大于16GB而小于64GB的内存的系统,最小需要8GB的交换空间;
3.大于64GB而小于256GB内存的系统,最小需要16GB的交换空间。
查看当前的交换分区:
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1819 198 1370 9 251 1467
Swap: 2047 0 2047
增加交换分区
#准备将/dev/sde磁盘,划分为1G分区为例
[root@localhost ~]# fdisk /dev/sde
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xe791906a 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-10485759,默认为 2048):
Last 扇区, +扇区 or +size{K,M,G} (2097152-10485759,默认为 10485759):
将使用默认值 10485759
分区 1 已设置为 Linux 类型,大小设为 4 GiB
命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
#更新分区表
[root@localhost ~]# partprobe /dev/sde
#查看分区
[root@localhost ~]# ll /dev/sde*
brw-rw----. 1 root disk 8, 64 8月 1 14:28 /dev/sde
brw-rw----. 1 root disk 8, 65 8月 1 14:28 /dev/sde1
#格式化交换分区
[root@localhost ~]# mkswap /dev/sde1
正在设置交换空间版本 1,大小 = 4194300 KiB
无标签,UUID=744c360e-215d-49f8-bf03-3f590e33b851
#挂载
[root@localhost ~]# swapon /dev/sde1
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1819 201 1370 9 247 1463
Swap: 6143 0 6143