思路:
选择地皮(硬盘参数) -》 整合空间(阵列配置或磁盘弹性管理) -》 划分区域(分区) -》 装修(文件系统、挂载) -》 入住使用(检查、监控)
一块硬盘 -> 多块硬盘(Raid、LVM)
磁盘内外结构:
1、SATA《SCSI《SAS(主流),硬盘接口类型
2、RAID,磁盘管理阵列技术,将多块独立的物理磁盘整合成一个大的逻辑磁盘(物理硬件:磁盘阵列卡)。
提高磁盘容量、存储效率(拆分后并行存储)和存储安全(有冗余)。
Raid0 不损失容量,容易坏,存储效率高(一份数据并行写入)
Raid1 总容量减半,提升存储安全,存储效率不高(有镜像,两个镜像同时写,一份数据同时两次写入)
Raid5 整合0和1,企业用的最多,总容量-1块容量,有效率也有镜像(一份数据只写一次,写到多个硬盘里,有校验位,用于恢复数据),只允许坏一块盘(一般会配一块热备盘,随时能顶上,多一重保险)
Raid10 先做0再做1,或者先做1再做0,允许同时两块盘出现故障,总容量减半(容量损失大)
raid配置方法:
按照现有物理硬盘个数进行配置(将多个物理硬盘配置成一块逻辑磁盘),然后手工选择raid级别。
分区:
磁盘引导记录
(0磁头0磁道1扇区512字节的引导数据,保证系统正常的启动):主引导记录MBR(446字节)+磁盘分区表DPT(64字节)+结束标识(2字节)
磁盘分区表:
一块磁盘(可以是raid以后的硬盘,也可以是LVM以后的硬盘)中最多可以划分4个主分区(编号是1-4,不一定全用上),最多可以划分1个扩展分区(主分区中拿出1个),在扩展分区中可以划分多个逻辑分区(逻辑分区的基础是扩展分区,必须先有扩展分区才能有逻辑分区,扩展分区不能直接存放数据,逻辑分区从5开始)
磁盘分区方法和步骤(两种):
centos7以前,小容量分区(小于2T):fdisk
cenos7以后,大容量分区:fdisk parted
方法1:
准备一块硬盘,开始操作:
1、检查磁盘
fdisk -l 列出来所有磁盘信息
磁盘命名规则:sda, sdb, sdc, ...
1.1、磁盘分区规划
举例:2个主分区各100G,1个扩展分区(包含2个50G逻辑分区)
2、分区
>fdisk /dev/sdb 进入界面:
m: 帮助
d:删除指定分区
g:创建GPT类型分区表(大容量分区时用到,GPT是DPT的一种类型,默认是DOS分区表类型)
l:显示系统已知的分区类型
n:创建一个新分区
p:输出显示设置的分区表信息(默认是扇区大小)
u:修改显示输出单位(扇区还是柱面)
q:不保存退出
w:保存退出
分区操作:
n + 回车,选p
选p,回车,回车,+100G(+容量) 主分区1
n + 回车,选p
选p,回车,回车,+100G(+容量) 主分区2
n + 回车,选e
选e,回车,回车,回车(剩余所有容量) 扩展分区3
n + 回车,选l
选l,回车,回车,+50G(+容量) 逻辑分区1
p + 回车,进行查看
w + 回车,保存退出
3、检查磁盘
>fdisk -l /dev/sdb
===================================
方法2:
准备一块硬盘(大于2T),开始操作:
parted命令:
1、检查磁盘
>parted /dev/sdc print
Partition Table:unknow 分区表状态是未知的
2、分区
模式1:交互模式
>parted /dev/sdc 回车
help 回车,查看帮助
常用命令
help/help + 具体指令 帮助
mklabel LABEL-TYPE 创建分区表(这个必须做)
mkpart PART-TYPE [FS-TYPE] START END 创建分区,大容量磁盘的分区表类型都是GPT(因为单个分区的大小就可能超过2T),而且没有主分区数量限制,可以多于4个主分区。
print 显示磁盘分区情况
quit 直接退出(parted命令自动保存分区配置情况)
rm NUMBER 删除指定编号分区
mklabel gpt 回车, 创建分区表
print 回车, 查看
mkpart primary 0 3T 回车, 选择忽略 (可以按照数值划分)
print 回车, 查看
rm 1, 删除第一个分区
mkpart primary 0 50% 回车, 选择忽略 (可以按照百分比划分)
mkpart primary 50% 100% 回车, 选择忽略 (可以按照百分比划分)
rm 1,
rm 2,
mkpart primary 0 -1 回车, 选择忽略(全部分配)
rm 1,
mkpart primary 0 10G,
mkpart primary 10G 20G,
mkpart primary 20G 30G,
mkpart primary 30G 40G,
mkpart primary 40G 50G,可以超过4个主分区,GPT无主分区限制
rm 1, rm 2, rm 3, rm 4, rm 5,
mkpart primary 0 3T 回车,
quit 退出
3、检查磁盘
parted /dev/sdc print
模式2:
免交互,命令模式
parted /dev/sdc rm 1
parted /dev/sdc print
parted /dev/sdc mklabel msdos
parted /dev/sdc print
可以写成脚本执行:cat parted.sh
#/bin/bash
parted /dev/sdc mklabel gpt Yes
parted /dev/sdc mkpart primary 0 3T Ignore
parted /dev/sdc print
直接执行上述脚本即可(fdisk也能写,但是没有这么简单)
fdisk命令:
1、检查磁盘
fdisk /dev/sdd
2、分区
g + 回车,修改好分区表类型(切换)
n + 回车,此时没有了主分区个数限制
主分区编号输入1,大小+3T,回车,建好
w + 回车 保存
3、检查磁盘
fdisk -l /dev/sdd
fdisk -l 查看全部
4、其他
fdisk /dev/sdd
d + 回车,删除分区
o + 回车,恢复磁盘分区表为DOS的,此时主分区个数变为4个。
分区建议:
文件系统
创建文件系统的过程等价于对磁盘进行格式化操作。
Linux的文件系统有数十种,常见的:
ext3(最早期,日志文件系统,把写入动作的细节记录下来),centos5(默认文件系统格式)
ext4(支持1EB容量,目录可以支持无限多的子目录,能够批量分配block块),centos6,rhel6
xfs(高性能的日志文件系统,意外宕机后可以快速恢复,支持18EB容量),centos7,rhel7
创建文件系统操作:
1、小容量分区
parted -l 查看分区情况,此时File System是空的
创建ext4 (命令:mkfs - make file system)
mkfs -t ext4 /dev/sdb1 创建完毕
parted -l 查看分区情况
mkfs -t xfs /dev/sdb2
blkid 查看文件系统
lsblk -f 查看文件系统(树状)
2、大容量分区
mkfs -t ext4 /dev/sdc1 大容量分区速度相对慢 (自学:mkfs.ext4 /dev/sdc1)
mkfs -t xfs /dev/sdd1 xfs相对较快
lsblk -f 查看
磁盘管理维护
文件系统检测修复:
检测(先备份后再进行检测,以防丢失):
fsck [参数] [磁盘分区/目录信息]
-a 自动检测和修复
-r 交互模式
-t 指定文件类型
fsck -t ext4 /dev/sdb1
fsck -t ext4 /dev/sdc1 大容量分区也可以检测
fsck -t xfs -r /dev/sdb2 或者 fsck -t xfs -a /dev/sdd1
xfs_repair 自学
说明:fsck多用于企业中有大量数据存储时,会出现文件系统混乱情况的检测。规避业务和服务器的高峰期再做,否则有性能损失。
挂载,卸载
挂载点 - 入口(目录,磁盘分区的入口,linux没有盘符的概念)
转移挂载 - 同一个目录可以是不同磁盘分区的入口
操作:
mount - 用于挂载文件系统(给指定磁盘分区设置一个入口)
挂载是使用硬盘设备前所执行的最后一步操作。
格式: mount 参数 存储设备 挂载点目录 (挂载点目录最好是一个空目录)
-a 挂载所有在/etc/fstab中定义的文件系统
-t 指定文件系统的类型(用处不大)
举例:
临时挂载(重启后不默认挂载):
#在linux系统中读取光驱中的数据
查看光驱设备是否存在
> ll /dev/cdrom
>mount /dev/cdrom /mnt 说明:/mnt是系统默认的挂载目录 (光驱自身的特点:写保护)
>cd mnt
#创建的分区挂载
>ll /dev/sdb1
> mount /dev/sdb1 /xiaoQ_mount/
> df -h (检查挂载情况)
cd /xiaoQ_mount 即可读写
reboot重启系统后查看是否为临时挂载,检查后发现挂载配置失效。
永久挂载:
方式一:利用/etc/rc.local文件实现永久挂载,系统每次启动或重启都会加载的文件,并且会加载文件中的命令信息。
vim /etc/rc.local
mount /dev/sdb1 /xiaoQ_mount
实体文件必须有执行权限,否则不能生效
reboot 重启
方式二:利用/etc/fstab文件进行永久挂载,该文件会加载的是磁盘存储设备挂载信息(专用文件)
man fstab文件获取帮助信息
04列:权限选项和存储服务的设置有关,自学
06列:用的是fsck命令
vim /etc/fstab
/dev/sdb1 /xiaoQ_mount ext4 defaults 0 0
wq!
改完以后:
(1)本次手工mount,等待重启生效
(2)热加载:
mount -a
(3)reboot重启
卸载:
umount 参数 挂载点目录 卸载文件系统,等价于将存储设备的入口给取消掉。
-l 表示不用进行目录切换,完成挂载点目录的卸载(当前在目录中,可以用这个参数)
-f 表示在挂载点目录中,如果有数据信息服务或系统加载,可以实现强制卸载
umount /xiaoQ_mount/
umount -lf /xiaoQ_mount/ (当前vim打开的)
卸载文件系统要慎用:需要备份(记录)挂载点目录,并且做永久配置(注释掉);文件系统正在使用的情况下不要卸载。
==================
磁盘弹性管理:
LVM技术(逻辑卷管理)
linux系统特有的命令,对磁盘分区进行管理的一种机制,解决的问题是: 初始安装linux操作系统时,无法准确评估各分区的大小,所以难以分配合适的硬盘空间。
不用lvm技术的做法:按照规划分区,待分区空间不足的时候,对数据进行迁移,然后清理完毕后使用。但是数据迁移很可能会出问题,同时增加了运维工作量。(如小房子换大房子,要搬家)
lvm可以让用户在无需停机的情况下可以方便的调整各个分区大小,即动态调整磁盘容量,从而提高磁盘管理的灵活性。
LV是用户真正可以使用的空间(支持弹性扩容、缩容)。
举例:自助餐披萨
PV:整张披萨 PE:小切块 VG:盛盘里的披萨 LV:自己盘子里的披萨
全部命令:
逻辑卷操作环境准备
物理卷创建和删除
1、虚拟机重新创建一个新的磁盘
2、分区
fdisk /dev/sdb
n 回车 回车
p +500M
n 回车 回车
p +500M
w 保存退出
查看 fdisk -l /dev/sdb
ll /dev/sdb* 查看设备文件是否生成
yum install -y lvm2 安装lvm包(默认系统不自带)
自学:https://www.cnblogs.com/kky12345/p/16878761.html
逻辑卷功能基础配置(pvs、vgs、lvs三个查看命令应该结合着看)
pvcreate /dev/sdb1 /dev/sdb2 (注意:PV设置时,对应的磁盘分区默认不要做过文件系统创建,否则会有问题)
pvdisplay 查看(此时未产生PE)
pvs 简单查看
( pvremove /dev/sdb1 /dev/sdb2 移除PV,恢复为正常磁盘分区 )
vgcreate vg1 /dev/sdb1 /dev/sdb2 vg1是vg的名称,自定义
vgs 简单查看
vgdisplay 查看(PE已产生,默认4M一个)
lvcreate -L 200M -n lv1 vg1 创建lv1(-L lv的大小, -n lv的名称, vg1 从哪个vg里分配容量)
lvs 简单查看
lvdisplay 详细查看
mkfs -t ext4 /dev/vg1/lv1 (文件系统名称 /dev/mapper/vg1-lv1)
说明: lv初始化为ext4格式的文件系统,支持动态扩容和缩容;如果初始化为xfs格式的文件系统,仅支持扩容,不支持缩容(即使能缩容,也有可能导致数据丢失,不建议做)
mount /dev/vg1/lv1 /mnt 临时挂载
df -h 查看
cd /mnt 进行读写
逻辑卷扩容过程实践
扩容100M
(1)vgs 查看剩余容量,是否满足需要
(2)lvextend -L +100M /dev/vg1/lv1 (说明:1、扩容多少就+多少; 2、执行完毕以后仅仅是磁盘识别了增加的这部分空间,但文件系统还没有识别,所以df -h的容量不变)
也可以lvextend -L 300M /dev/vg1/lv1 直接扩容到300M
(3)lvs 查看
(4)df -h 查看,容量未变
(5)resize2fs /dev/vg1/lv1 需要执行识别文件系统的命令,适用于ext4格式的文件系统
xfs_growfs /dev/vg1/lv1 适用于xfs格式的文件系统扩容
(6)df -h 查看,容量改变
扩容不需要执行umount和mount操作
逻辑卷缩容过程实践
缩容100M
注意:
缩容是比较危险的操作:
缩容操作可能会对文件系统造成损坏,有可能是不可逆的,不能修复;
缩容过程有可能会直接损坏数据(如:不做检查直接缩容);
虚拟机做缩容可能会报错。(企业中尽量不要做磁盘缩容操作)
(1)卸载存储空间
umount /mnt
df -h
(2)e2fsck -f /dev/vg1/lv1 扫描/检测要缩容的文件系统(必须做:因为如果不做扫描而直接缩容,可能损坏数据)
(3)resize2fs /dev/vg1/lv1 200M 文件系统去扫描识别缩容以后剩余的200M空间(缩容到多少就写多少),等价于缩容
(4)mount /dev/vg1/lv1 /mnt (不严谨的话,此步骤就算结束了,只识别200M)
(5)umount /mnt
(6)lvreduce -L 200M /dev/vg1/lv1 真正缩容(输入y确认)
(7)lvs 简单查看当前容量
(8)mount /dev/vg1/lv1 /mnt
(9)df -h 查看磁盘空间情况
逻辑卷组扩容过程实践
1、vgs 检查是否需要扩容
2、虚拟机关机,添加新的磁盘
3、fdisk -l 发现新磁盘 /dev/sdc
4、分区(可选)
fdisk /dev/sdc
n 回车
p 回车 回车 全盘为一个分区
5、直接创建pv(不做第4步骤)
pvcreate /dev/sdc
pvs 查看结果
6、逻辑卷组扩容
vgextend vg1 /dev/sdc
vgs 查看结果
逻辑卷组缩容过程实践
1、vgs 检查是否需要缩容
2、vgreduce vg1 /dev/sdc 直接缩容出硬盘来
3、vgs 和 pvs 查看结果
4、pvremove /dev/sdc 释放磁盘(sdc恢复成正常的磁盘分区或者存储设备)
lvm逻辑卷知识总结:
lvm逻辑卷管理优势:
1、可以对磁盘的容量进行灵活管理
2、可以避免日后工作中数据迁移问题;
LVM逻辑卷管理劣势:
1、可能会对磁盘的性能造成影响;(物理磁盘的读写很快:分区、格式化后正常使用是最快的)
实际使用中:磁盘01 ---- raid --- lvm --- 使用 (有逻辑层面的软件处理或者操作系统处理过程,磁盘性能会下降)
2、可能会对磁盘的文件系统有损坏。比如:缩容
文件系统损坏等价于对磁盘的数据有损坏
3、如果有条件尽量使用存储设备;(尽量不要使用软件化的存储应用,在大的使用环境下有局限性)
=========================
磁盘管理常用操作:
备份和清理
磁盘管理数据空间释放案例:
两个原因:
i_count 和 i_nlink 两个参数都归0后,空间才真正释放
文件:硬链接和软链接
https://blog.youkuaiyun.com/yaxuan88521/article/details/125216682
文件未被占用的情况(i_nlink不为0的情况):
> ll -i 文件名
> find / -type f -inum "inode号" 查找指定相同inode编码硬链接文件
可能会查到多个文件,如果直接删除大容量的文件,很可能删不干净。
> find / -type f -inum "inode号" -delete 连查带删 (exec 或者 | xargs都可以)
或者 rm -rf 找到的文件名
真正删除文件(含硬链接)
文件被占用的情况(i_count不为0的情况,方案是:清空文件而不是删除):
> ps -ef | grep 文件名
或者
> lsof | grep 文件名 (lsof安装方法: > yum install -y lsof) 查看进程占用文件或目录的情况
磁盘管理文件系统只读案例:
-r 交互方式:
如果记得UUID的值,可以:
> mount -o rw, remount UUID=xxxxxxx /
如果不记得UUID了,可以如下操作:
此时,可以vi /etc/hosts文件了。
然后修复故障点: vi /etc/fstab的UUID修改回去。
磁盘管理系统空间不足案例:
测试环境准备:
sdb1 - 10G
sdc1 - 512M
建好分区,创建好文件系统,并完成挂载。
磁盘空间不足演示 - block不足:
dd命令:
dd if=/dev/zero of=/tmp/5G.txt bs=10M count=500
ll -h /tmp/5G.txt -h 以人类可读的方式
解决办法:先找到大容量的文件
方法1:
df -h 查看容量不足的挂载点
find 目录 -type f -size +1G (目录下查找容量大于1G的文件,1G是预估的值)
然后进行备份,然后迁移或者清理或者扩容。
方法2:
效率比较高的:
du命令,查看文件或目录的存储量
du -sh /etc -s 汇总/etc下文件的大小,-h 以人类可读的方式
du -sh / 统计根目录下所有文件的大小
du -sh /* 显示/开始的一级目录和文件的大小
du -sh /* | sort sort默认以第一列为已经排序(字符排序,不是值排序)
du -sh /* | sort -h 正序
du -sh /* | sort -hr 逆序
du -sh /* | sort -k 1 -hr 逆序(-k,指定某一列)
清理:
磁盘空间不足演示 - inode不足(小文件数据太多):
模拟生成大量的小文件的方法:
报错:
查找原因:
df -i 查看inode的数量情况
解决方法:
报错:清理的文件太多引起
找到小于10k的文件:
find ./ -type f -size -10k > 1.txt
对1.txt里的文件进行分析,看哪些需要留下或者清理
或者直接清理:
交换分区:
磁盘管理交换分区扩容案例
linux系统出现内存不足,不会蓝屏,会出现oom错误(内存溢出情况)
swap分区的大小无需过大,本身效率还是比较低的,不能替代物理内存, 建议1G-8G即可。
swap分区临时扩容的方法:
> fdisk /dev/sdb
n 回车 回车
p 回车 1G
w 保存退出
>fdisk -l /dev/sdb 查看分区情况
> mkswap /dev/sdb1 格式化为swap分区
> lsblk -f 查看分区情况
> swapon /dev/sdb1 扩容
> free -h 查看情况
缩容的方法:
> swapoff /dev/sdb1
或者> swapoff -a 直接取消全部的交换分区,比较危险,慎用!!
系统重启后,自动生效的方法,修改/etc/fstab文件:
说明:swap交换分区只是用于临时缓解内存不足的情况,如果长时间内存出现不足,建议真实扩容内存。