跨行学Linux运维 磁盘结构体系知识

磁盘物理结构

外部结构
机械
固态
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

字母英文翻译
ddelete a partition# 删除分区
gcreate a new empty GPT partition table# 创建GPT分区
llist known partition types# 显示分区类型
mprint this menu# 显示帮助菜单
nadd a new partition# 创建一个新的分区
pprint the partition table# 打印分区表
qquit without saving changes# 退出不保存
tchange a partition’s system id# 改变分区类型
wwrite 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问题

  1. 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 			# 查看磁盘被释放

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值