文章目录
磁盘物理结构
外部结构
机械
固态
PCI-E
大小分类:
3.5英寸
2.5英寸
服务器2U的最大磁盘个数:
16块2.5
8块3.5
内部结构
主轴:决定了磁盘的转速 rpm 存储越大转速越低
企业级标配:15000rpm 1000rpm
家庭标配:7200rpm
最大的磁盘存储15000rpm的是900G
磁盘盘片:存储数据
磁头:读写数据(磁力感应)盘面的数量等于磁头的数量 3个盘片 6个磁头
传动手臂
传动轴
磁盘接口:连接主板
磁盘接口类型分类:
SCSI 淘汰
IDE 淘汰
SATA 家用 公司内部测试 存储 不要求读写速度
SAS 企业 标配常用300G 600G 900G
PCI-E 较少
磁道:从外面到里面
扇区:磁道上面最小的单位 默认大小512字节
柱面:磁盘以柱面的方式往磁盘中读写数据
每块盘片上相同的磁道组合在一起称为柱面
磁盘阵列(RAID)
把磁盘以不同的方式组合在一起
1.更大的容量
2.更高的性能
3.更好的安全
常用的RAID级别 | 磁盘数量 | 可用容量 | 冗余 | 性能 | 使用场景 |
---|---|---|---|---|---|
RAID0 | 最少1块 | 所有磁盘总和 | 无冗余 一块坏则全部坏 | 读写最快 | 要求读写快,对安全无要求 数据库和存储的从库 |
RAID1 | 只能2块磁盘 | 损失50%的容量 | 百分百冗余 | 写慢读快 | 要求安全,不要求速度 系统盘 监控服务器 |
RAID5 | 至少3块 | 损失一块磁盘 | 最多只能损失一块盘 | 写慢读块 | 数据安全 流量不高 数据库 存储等 |
RAID10 | 至少4块 | 可以损失一半 | 损失所有硬盘一半的容量 | 读写很快 | 对于安全和性能都要 |
PS:
高并发不能使用raid5
安全要求高也不能使用raid5
磁盘分区
系统启动引导记录
MBR引导 引导小于2T的磁盘 fdisk
GPT引导 引导大于2T的磁盘 parted
MBR格式:最大支持4个主分区 sda1 sda2 sda3 sda4
支持1个主分区+1个扩展分区+多个逻辑分区
sda1 sda5 sda6 sda7
支持3个主分区+1个扩展分区
sda1 sda2 sda3 sda5 sda6
GPT格式:最大支持128个主分区
PS:扩展分区无法直接使用,需要设置逻辑分区进行使用
磁盘分区的明命名格式:
第一块 sda
第二块 sdb
以此类推
第一块第一个分区:sda1
第一块磁盘的第一个逻辑分区:sda5
第二块磁盘的第三个分区:sdb3
第一块sas硬盘的第一个主分区:/dev/sda1
第二块sata硬盘的第2个主分区:/dev/sdb2
第三块sata硬盘的第1个逻辑分区:/dev/sdc5
主分区
扩展分区
逻辑分区
分区命令:
fdisk:主要针对小于2T的磁盘
parted:主要针对大于2T的磁盘
fdisk分区
小于2T的磁盘使用MBR引导记录
fdisk 对小于2T的磁盘进行分区
6块磁盘 可以把其中两块做成RAID1 来安装操作系统
第一步:添加一块新的磁盘 100M大小 虚拟机添加 云平台购买磁盘 物理机购买磁盘直接插 支持热插拔
第二部:检查添加是否成功 使用fdisk进行查看所有磁盘信息
检查没有发现第二块磁盘 虚拟机需要重启
第三步:使用fdisk进行小于2T的磁盘分区
Command (m for help): m
Command action
字母 | 英文 | 翻译 |
---|---|---|
d | delete a partition | # 删除分区 |
g | create a new empty GPT partition table | # 创建GPT分区 |
l | list known partition types | # 显示分区类型 |
m | print this menu | # 显示帮助菜单 |
n | add a new partition | # 创建一个新的分区 |
p | print the partition table | # 打印分区表 |
q | quit without saving changes | # 退出不保存 |
t | change a partition’s system id | # 改变分区类型 |
w | write table to disk and exit | # 保存并退出 生效 |
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
First sector (2048-208895, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-208895, default 208895): +20M
Partition 1 of type Linux and of size 20 MiB is set
Command (m for help): p
Disk /dev/sdb: 106 MB, 106954752 bytes, 208896 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: 0x04dcce63
Device Boot Start End Blocks Id System
/dev/sdb1 2048 43007 20480 83 Linux
Command (m for help): d # 删除分区使用d参数
Partition number (1-4, default 4): # 选择分区编号 默认从最后一个分区开始删除
Partition 4 is deleted
磁盘格式化(创建文件系统)
centos7.x 默认的分区类型 xfs
[root@oldboyedu ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=1, agsize=5120 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5120, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@oldboyedu ~]# blkid
/dev/sda1: UUID="ee5d448c-5268-45ae-ac35-c692675b2961" TYPE="xfs"
/dev/sda2: UUID="1e7e26b2-2b49-4be5-ab9a-9d552006c9ae" TYPE="swap"
/dev/sda3: UUID="4dd632e0-05bf-41ef-8784-ee0f63cc9d84" TYPE="xfs"
/dev/sdb1: UUID="118183fd-dee9-4bf0-90ba-384184f0e05f" TYPE="xfs"
磁盘挂载 使用
mkdir /data
mount /dev/sdb1 /data
df -h
加入开机自启动 /etc/fstab
mount -a 生效
企业级磁盘使用方法
直接对磁盘进行格式化挂载使用
第一步:添加磁盘
1云平台直接购买
2物理机购买硬盘
第二步:直接格式化整块磁盘
mkfs.xfs -f /dev/sdb
第三步:挂载使用
mount /dev/sdb /data
df -h
第四步:写入开机自动加载
/dev/sdb /data xfs defaultas 0 0
parted 分区
gpt引导记录 对大于2T的磁盘进行分区
parted -l # 查看磁盘详细信息
第一步:添加一块大于3T的磁盘 虚拟机需要重启 云服务器和物理机不需要
第二步:分区
[root@mingyu ~]# parted
(parted) mklabel gpt # 修改为gpt格式
(parted) print # 查看分区表
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
------------类似fdisk交互式分区------------------------
(parted) mkpart # 分区命令 可tab键补全
Partition name? []? primary # 分区名称
File system type? [ext2]? xfs # 文件系统类型指定为xfs
Start? 0 # 开始默认以M为单位
End? 1000 # 结束默认以M为单位
Warning: The resulting partition is not properly aligned for best performance. # 警告忽略
Ignore/Cancel? I # 输入I
(parted) print # 打印分区表
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 1000MB 1000MB primary
(parted) mkpart primary 1000 2000 # 非交互式进行分区
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 1000MB 1000MB primary
2 1000MB 2000MB 999MB primary
删除分区使用rm
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 1000MB 1000MB primary
2 1000MB 2000MB 999MB primary
(parted) rm 2
[root@oldboyedu ~]# parted /dev/sdb mkpart primary 1000 3000 # 在命令行直接分区 命令不支持自动补全
[root@oldboyedu ~]# parted /dev/sdb print # 打印分区表
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 1000MB 1000MB primary
2 1000MB 3000MB 2000MB primary
[root@oldboyedu ~]# parted /dev/sdb rm 2 # 命令行直接删除分区
第三步:格式化
[root@oldboyedu ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=61034 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=244136, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
第四步:磁盘挂载
[root@oldboyedu ~]# mount /dev/sdb1 /data # 分区1 挂载到/data下使用
[root@oldboyedu ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.6G 18G 9% /
devtmpfs 477M 0 477M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.7M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 197M 102M 95M 52% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb1 951M 33M 919M 4% /data
PS: partprobe # 通知内核重读分区表信息
磁盘案例
企业使用方式
1.添加磁盘
2.直接格式化
3.挂载使用
4.写入开机自动挂载
[root@oldboyedu ~]# mkfs.xfs -f /dev/sdb
meta-data=/dev/sdb isize=512 agcount=4, agsize=196608000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=786432000, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=384000, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@oldboyedu ~]# mount /dev/sdb /data
[root@oldboyedu ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.6G 18G 9% /
devtmpfs 477M 0 477M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.7M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 197M 102M 95M 52% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb 3.0T 33M 3.0T 1% /data
磁盘案例1:如何解决oom问题
-
java环境内存不够用,占用大量的swap空间
java占用内存较大
如果系统内存不够用 会出现oom
Linux内核有个机制叫oom会在系统及服务的日志中有提示
什么会消耗我们服务器的内存?
服务:给用户提供访问的
内部测试:软件 服务 程序
解决oom问题:
1.增加真实的物理内存(真实流量较高导致内存不够用)
2.java程序问题 高峰期的某个时间点 内存使用率较高
实际物理内存4G 一个月总有那么几次会飙升到12G 几分钟会恢复
使用swap分区解决
使用swap会导致用户访问速度变慢 因为swap是磁盘空间 临时充当内存使用
swap:
1.在安装系统进行分区的时候进行划分 swap内存1.5倍 大于8G 最大给swap 8G即可
2.安装完操作系统后进行划分 进行扩充
分区:/boot / swap 上服务后需要的话 我们在创建swap(内部测试不用swap直接运行)
创建swap
第一步:生成一个200M的文件 使用dd命令
[root@oldboyedu ~]# dd if=/dev/zero of=/tmp/200m bs=1M count=200
[root@oldboyedu ~]# ll -h /tmp/
total 200M
-rw-r--r-- 1 root root 200M Feb 24 10:13 200m
第二步:格式化swap分区
[root@oldboyedu ~]# mkswap /tmp/200m
Setting up swapspace version 1, size = 204796 KiB
no label, UUID=4d521b60-67e8-4a57-933d-cd4a17b750cd
第三步:挂载swap分区 激活swap
[root@oldboyedu ~]# swapon /tmp/200m
swapon: /tmp/200m: insecure permissions 0644, 0600 suggested.
[root@oldboyedu ~]# free -h
total used free shared buff/cache available
Mem: 974M 82M 571M 7.6M 320M 728M
Swap: 1.2G 0B 1.2G
[root@oldboyedu ~]# blkid /tmp/200m # 查看设备的UUID
/tmp/200m: UUID="4d521b60-67e8-4a57-933d-cd4a17b750cd" TYPE="swap"
第四步:加入开机自动启动
/tmp/200m swap swap defaults 0 0
[root@oldboyedu ~]# swapon -s # 查看swap分区的组成
Filename Type Size Used Priority
/tmp/200m file 204796 0 -1
/dev/sda2 partition 1048572 0 -2
卸载swap分区
[root@oldboyedu ~]# free -h
total used free shared buff/cache available
Mem: 974M 79M 788M 7.6M 107M 758M
Swap: 1.2G 0B 1.2G
[root@oldboyedu ~]# swapoff /tmp/200m
[root@oldboyedu ~]# free -h
total used free shared buff/cache available
Mem: 974M 78M 788M 7.6M 107M 758M
Swap: 1.0G 0B 1.0G
磁盘案例2:系统中存在大文件磁盘不够使用怎么办?
如何查找系统中的大文件 确认后删除 解决磁盘不够用
模拟环境:
在/var/log下模拟创建一个10G的文件
[root@oldboyedu ~]# dd if=/dev/zero of=/var/log/10g bs=1M count=10000
[root@oldboyedu ~]# ll -h /var/log/10g
-rw-r--r-- 1 root root 9.8G Feb 24 10:31 /var/log/10g
第一步:使用find查找
[root@oldboyedu ~]# find / -type f -size +1G
第二步:使用du进行查找
du -h 查看目录的大小
[root@oldboyedu ~]# du -h /
[root@oldboyedu ~]# du -h /|awk '$1 ~ /G$/'
[root@oldboyedu ~]# du -h /var|awk '$1 ~ /G$/'
[root@oldboyedu ~]# du -h /var/log/*|grep G
9.8G /var/log/10g
解决磁盘不够用 增加磁盘
第一步:
环境部署
生成10G的文件在/var/log下 名称为10G
假如/下面存储已满
10G文件当前正在被程序调用着 日志文件实时往里面输入日志
服务------>输出内容到--------->/var/log/10g文件中
第二步:
添加磁盘
格式化
挂载
假如开机自动挂载
[root@oldboyedu ~]# mount /dev/sdb /data
[root@oldboyedu ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 12G 7.3G 62% /
devtmpfs 477M 0 477M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.7M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 197M 102M 95M 52% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb 3.0T 33M 3.0T 1% /data
第三步:
把大文件移动到新的磁盘中
但是还要保证我的服务------>输出日志到--------->/var/log/10g文件中
输出的新日志不能占用/的存储 实际存储到/data 第二块磁盘
1.暂停服务 不允许服务生成日志(没有流量的时间)
2.把10g文件移动到新的磁盘
[root@oldboyedu ~]# mv /var/log/10g /data
[root@oldboyedu ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.8G 18G 10% /
devtmpfs 477M 0 477M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.7M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 197M 102M 95M 52% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb 3.0T 9.8G 3.0T 1% /data
[root@oldboyedu ~]# ll -h /data/
total 9.8G
-rw-r--r-- 1 root root 9.8G Feb 24 10:40 10g
PS:同一个磁盘中移动的速度最快,跨磁盘移动速度慢,重新写入内容到第二块磁盘的block
同一个磁盘中cp的速度慢 相当于占用新的inode和block 做日志切割的时候尽量使用mv
3.保证服务继续输出日志到/var/log/10g文件中
并且实际存储到了/data 第二块磁盘中 使用软链接
[root@oldboyedu ~]# ln -s /data/10g /var/log/10g
[root@oldboyedu ~]# ll /var/log/10g
lrwxrwxrwx 1 root root 9 Feb 24 10:51 /var/log/10g -> /data/10g
4.服务开启日志打开 测试
[root@oldboyedu ~]# ll /var/log/10g
lrwxrwxrwx 1 root root 9 Feb 24 10:51 /var/log/10g -> /data/10g
[root@oldboyedu ~]#
[root@oldboyedu ~]# ll /data/10g
-rw-r--r-- 1 root root 10485760014 Feb 24 10:40 /data/10g
[root@oldboyedu ~]# du -sh /var/log
7.9M /var/log
[root@oldboyedu ~]# du -sh /data
9.8G /data
[root@oldboyedu ~]# cat /etc/services /etc/services /etc/services /etc/services >>/var/log/10g
[root@oldboyedu ~]# ll /data/10g
-rw-r--r-- 1 root root 10488441186 Feb 24 10:54 /data/10g
[root@oldboyedu ~]# du -sh /var/log
7.9M /var/log
磁盘案例3:系统中大量的小文件如何处理?
显示 no space left on device ,df -h 查看磁盘有剩余
目录本身越大 下面的小文件就越多,目录中存着目录下的文件名称?(目录的block中存放的是所有下级的文件名称)文件的大小不决定目录本身的大小
inode满了 查找出系统中比较大的目录1M目录下会有大量小文件 使用find命令
查找出系统中大量的小文件? 查看目录本身的方式
[root@oldboyedu ~]# find / -type d -size +1M
/root/test
[root@oldboyedu ~]# find /root/test/ -type f|xargs rm
磁盘案例4:文件如何才能真正被删除?
文件删除后空间没有被释放
文件如何才能被真正删除:
1.硬链接数和inode为0
2.文件没有被程序占用
第一步:模拟文件被程序调用
[root@oldboyedu ~]# tailf /data/log
第二步:删除大文件
[root@oldboyedu ~]# rm -f /data/10g
[root@oldboyedu ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.8G 18G 10% /
devtmpfs 477M 0 477M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.7M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 197M 102M 95M 52% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb 3.0T 9.8G 3.0T 1% /data # 删除大文件后空间没有被释放
第三步:使用lsof命令查看被占用的文件进程
安装lsof命令
[root@oldboyedu ~]# yum -y install lsof
[root@oldboyedu ~]# lsof |grep 10g
vim 4210 root 3r REG 8,16 10485760000 67 /data/10g (deleted)
vim 4210 root 4u REG 8,16 4096 68 /data/.10g.swp
第四步:
1.如果只是进程不是服务 则kill kill后继续运行进程
2.如果是服务比如是ssh服务
systemctl restart | reload ssh
[root@oldboyedu ~]# kill -9 4210
[root@oldboyedu ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.8G 17G 10% /
devtmpfs 477M 0 477M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.7M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 197M 102M 95M 52% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb 3.0T 33M 3.0T 1% /data # 查看磁盘被释放