linux之磁盘管理
磁盘管理
1.磁盘分类
- 机械硬盘: 盘片 主轴 传动手臂 做机械运动 类似 DVD
- 固态硬盘:内部是主板和U盘类似
2.硬盘大小
- 3.5英寸:台式机
- 2.5英寸:笔记本服务器
3.硬盘接口
-
IDE接口 过时
-
scsi接口 过时
-
sata接口 台式机 3.0
-
nvme接口 固态硬盘
-
SAS接口 企业级
4.硬盘存储和传输速度
- sata 3.0接口硬盘 传输速度600MB/s 1T 2T 4T 8T 20T
- NVMe接口硬盘 专为高性能SSD设计,基于PCIe总线
- SAS接口硬盘 300G 600G 900G 转速5400 7200 10K 15K
5.磁盘阵列
- 就是把多块硬盘组合起来使用,通过硬件或软件技术对数据存储空间、性能、速度、安全,稳定等特点,发挥特性。
- 磁盘阵列的核心技术是 RAID,(Redundant Array of Independent Disks,独立磁盘冗余阵列),通过不同的配置方式平衡性能、可靠性和存储容量。
raid概念
- 冗余:通过数据备份或校验机制,在硬盘故障时保护数据。
- 切割:将数据分成小块分散存储在多块硬盘上,以提升读写速度。
- 镜像:将数据完整复制到另一块硬盘上,增加数据冗余性。
磁盘阵列raid卡组合
作用:
获得更大的容量 # 将多块磁盘逻辑的组合成一块磁盘
获得更高的性能 # 写入服务器 写两块磁盘比写一块磁盘速度快
获得更好的安全性 # 可以同时将数据写入两块盘 一块盘做备份
RAID级别 | 硬盘数量 | 可用容量 | 安全性 | 性能 | 使用场景 |
---|---|---|---|---|---|
0 | 至少1块 | 磁盘综合 | 低 | 读写速度块 | 要求速度 |
1 | 只能2块 | 50% | 可坏一块 | 写最慢,读还行 | 要求安全与速度 |
5 | 至少3块 | n-1(硬盘数量-1) | 坏一块 | 0和1的折中 | 业务流量较稳定 |
10 | 至少4块 | 50% | 坏50% | 读写速度快 | 高并发场景 |
6.磁盘分区
- windows磁盘默认的是MBR格式
- MBR格式最多支持4个主分区 C D E F
- MBR格式支持3个主分支+1个扩展分区
6.1 Linux磁盘分区fdisk
#磁盘表示
sda # 表示第一块磁盘
sda1 # 表示第一块磁盘的第一个分区
sda2 # 表示第一块磁盘的第二个分区
sdb # 表示第二块磁盘
sdb1 # 表示第2块磁盘的第1个分区
sdb5 # 表示第2块磁盘的第1个逻辑分区
#Linux磁盘分区
1.系统分区
第一种分区: 标准分区 300G磁盘
/boot 200M # 存放系统内核的位置 引导程序所在的位置
/ 剩余空间 # 存放系统
第二种分区: swap分区
/boot 200M
swap 2G # 当内存空间不够用时,临时使用磁盘空间充当内存来使用 速度慢 解决OOM问题 内存溢出。
# linux内存如果达到最大限制,则自动杀死占用最高内存的进程来让系统正常运行
# swap 对用户的服务器需要增加物理内存
# 比较着急,或者公司内部测试服务器 自己使用的。
/ 剩余空间
第三种分区: 企业
/boot 200M
swap 2G
/ 50G # 系统
/data 1.8T # 数据分区
2.磁盘分区格式
MBR格式 小于2T的磁盘使用fdisk分区
GPT格式 大于2T的磁盘使用parted分区
vmare 磁盘分区
#在虚拟机新添加一块磁盘 fdisk 查看刚添加的硬盘nvme0n2: 20 GiB
[root@localhost ~]# fdisk -l
#目前虚拟机有两块 1块50G 2个分区
Disco /dev/nvme0n1: 50 GiB, 53687091200 bytes, 104857600 sectores
Disposit. Inicio Comienzo Final Sectores Tamaño Id Tipo
/dev/nvme0n1p1 * 2048 2099199 2097152 1G 83 Linux
/dev/nvme0n1p2 2099200 104857599 102758400 49G 8e Linux LVM
#新添加的 1块硬盘 20G
Disco /dev/nvme0n2: 20 GiB, 21474836480 bytes, 41943040 sectores
#fdisk命令帮助
d delete a partition # 删除一个分区
l list known partition types # 显示分区类型
n add a new partition # 创建新的分区
p print the partition table # 输出分好的分区表
m print this menu # 打印菜单
w write table to disk and exit #保存并且推出
q quit without saving changes # 退出不保存
#对nvme0n2: 20 GiB 硬盘分区
[root@localhost ~]# fdisk /dev/nvme0n2
Welcome to fdisk (util-linux 2.35.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x1d7843e7.
# 输入n新建分区 primary主分区,只能4个,第4个为扩展分区 在扩展分区 新建逻辑分区
Command (m for help): n
Partition type
p primary (2 primary, 0 extended, 2 free)
e extended (container for logical partitions)
Select (default p): p #选择主分区
Partition number (3,4, default 3):
First sector (20973568-41943039, default 20973568):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (20973568-41943039, default 41943039): +2G #给分区设置多少G容量
Created a new partition 3 of type 'Linux' and of size 2 GiB.
Command (m for help): p #打印已经分割的分区
Disk /dev/nvme0n2: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual NVMe Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x1d7843e7
#共分3块主分区,1个扩展分区 下两个逻辑分区
Command (m for help): p
Disk /dev/nvme0n2: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual NVMe Disk
Device Boot Start End Sectors Size Id Type
/dev/nvme0n2p1 2048 10487807 10485760 5G 83 Linux
/dev/nvme0n2p2 10487808 20973567 10485760 5G 83 Linux
/dev/nvme0n2p3 20973568 25167871 4194304 2G 83 Linux
/dev/nvme0n2p4 25167872 41943039 16775168 8G 5 Extended
/dev/nvme0n2p5 25169920 33558527 8388608 4G 83 Linux
/dev/nvme0n2p6 33560576 41943039 8382464 4G 83 Linux
3.查看系统中的分区并格式化
[root@localhost ~]# ll /dev/nvme*
crw------- 1 root root 242, 0 Nov 21 09:07 /dev/nvme0
brw-rw---- 1 root disk 259, 0 Nov 21 09:07 /dev/nvme0n1
brw-rw---- 1 root disk 259, 1 Nov 21 09:07 /dev/nvme0n1p1
brw-rw---- 1 root disk 259, 2 Nov 21 09:07 /dev/nvme0n1p2
brw-rw---- 1 root disk 259, 3 Nov 21 11:12 /dev/nvme0n2
brw-rw---- 1 root disk 259, 10 Nov 21 11:12 /dev/nvme0n2p1
brw-rw---- 1 root disk 259, 11 Nov 21 11:12 /dev/nvme0n2p2
brw-rw---- 1 root disk 259, 12 Nov 21 11:12 /dev/nvme0n2p3
brw-rw---- 1 root disk 259, 13 Nov 21 11:12 /dev/nvme0n2p4
brw-rw---- 1 root disk 259, 14 Nov 21 11:12 /dev/nvme0n2p5
brw-rw---- 1 root disk 259, 15 Nov 21 11:12 /dev/nvme0n2p6
#使用mkfs.xfs 格式化分区
[root@localhost ~]# mkfs.xfs /dev/nvme0n2p1
4.创建挂载点 并挂载/dev/nvme0n2p1
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/nvme0n2p1 /data/
#df -h 查看 已成功挂载
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n2p1 5.0G 68M 5.0G 2% /data
#测试使用
[root@localhost ~]# cat /data/hello.txt
hello
#卸载挂载
[root@localhost ~]# umount /data
5.开机自动挂载
[root@localhost ~]# vi /etc/rc.d/rc.local
[root@localhost ~]# vi /etc/fstab
[root@localhost ~]# tail -1 /etc/fstab
/dev/nvme0n2p1 /data xfs deafaults 0 0
6.2 Linux磁盘分区parted
# 基于麒麟系统 vmare scsi硬盘 新插入一块4T硬盘 parted分区至少是2T以上
# fdisk -l 查看新加入的硬盘
[root@kylin-sp3v10 ~]# fdisk -l
##Linux系统
Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 104857599 102758400 49G 8e Linux LVM
1.加入4T硬盘
#新加入的4T硬盘
Disk /dev/sdb: 3.91 TiB, 4294967296000 bytes, 8388608000 sectors
#parted相关命令
help [COMMAND]
mklabel,mktable LABEL-TYPE # 创建分区表类型
mkpart PART-TYPE [FS-TYPE] START END # 创建分区
print # 打印分区
quit # 退出即保存
rm NUMBER # 删除分区
2.使用parted分区 格式化
#对4T硬盘分区
[root@kylin-sp3v10 ~]# parted /dev/sdb
(parted) mklabel gpt #将修改磁盘分区表类型为gpt模式(默认为msdos格式,最大支持2T)
#查看
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
#创建分区
parted) mkpart
Partition name? []? primary #分区为主分区
File system type? [ext2]? xfs #文件系统为xfs
Start? 0 #分区大小的起始 (开始1% 结尾30%)
End? 500G #分区大小的结束 (单位K,M,G,T)
Warning: The resulting partition is not properly aligned for best performance: 34s % 2048s != 0s
Ignore/Cancel? I #默认不是从2048开始 是否忽略写入 是 按I
(parted) print #查看已创建的分区
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 500GB 500GB xfs primary
#无交互式创建分区
(parted) mkpart primary xfs 500G 4295G #一行写完 500G 100%
(parted) print #查看
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 500GB 500GB xfs primary
2 500GB 4295GB 3795GB xfs primary
#删除分区
Number Start End Size File system Name Flags
1 17.4kB 500GB 500GB xfs primary
2 500GB 4295GB 3795GB xfs primary
(parted) rm 1 #rm 加编号即可
(parted) print #打印查看已删除primary 1
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
2 500GB 4295GB 3795GB xfs primary
#新建分区 从0% 500G
(parted) mkpart primary xfs 0% 500G
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 500GB 500GB xfs primary
2 500GB 4295GB 3795GB xfs primary
#quit(创建分区即生效,已经写入系统)
3.格式化分区
[root@kylin-sp3v10 ~]# mkfs.xfs -f /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=30517568 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=122070272, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=59604, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
4.挂载使用
[root@kylin-sp3v10 ~]# mount /dev/sdb1 /data/
5.永久挂载 写入/etc/fstab
[root@kylin-sp3v10 ~]# vi /etc/fstab
/dev/sdb1 /data xfs defaults 0 0
6.reboot 并查看
[root@kylin-sp3v10 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 451M 0 451M 0% /dev
tmpfs 467M 0 467M 0% /dev/shm
tmpfs 467M 6.8M 460M 2% /run
tmpfs 467M 0 467M 0% /sys/fs/cgroup
/dev/mapper/klas-root 47G 3.8G 44G 8% /
tmpfs 467M 0 467M 0% /tmp
/dev/sdb1 466G 3.3G 463G 1% /data
9.ext3、ext4、xfs对比
特性 | ext3 | ext4 | xfs |
---|---|---|---|
日志功能 | 支持 | 支持 | 支持 |
最大文件尺寸 | 2TB | 1EB | 8EB |
最大文件系统尺寸 | 32TB | 1EB | 8EB |
性能 | 中 | 高 | 高 |
适用场景 | 通用 | 通用,尤其优化了大文件处理 | 大数据量处理,数据库应用 |
特殊功能 | 文件系统压缩 | Extents, 持久预分配 | 并行I/O, 实时碎片整理 |
10.磁盘相关案例
10.1 服务占大量内存,临时创建交换分区,来充当内存使用
swap磁盘分区: 大小是内存的1-1.5倍 如果内存大于8G,则最多swap给8G即可。
什么情况下使用swap:
测试服务器
内部服务器
自己用的虚拟机
流量波动的业务
线上服务器,业务服务器禁止使用swap,增加内存的方式解决OOM问题。OOM(内存溢出)
创建swap分区的方式:
方法1: 安装操作系统的时候
方法2: 安装完成操作系统
# 测试服务器上测试软件内存不够用,也无法添加内存,为了正常让测试业务正常运行,临时创建swap分区。
第一步: 生成一个1G的设备文件。
[root@kylin-sp3v10 ~]# dd if=/dev/zero of=/opt/1g bs=1M count=1000
第二步: 格式化成swap类型 # 磁盘是使用 mkfs.xfs /dev/sdb1
[root@kylin-sp3v10 ~]# mkswap /opt/1g
mkswap: /opt/1g: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 1000 MiB (1048571904 bytes)
no label, UUID=0f956b74-3121-4949-9d98-11ecea5b08c5
第三步: 挂载使用swap 直接增加到原有的swap空间上。
#查看原有 是2G
[root@kylin-sp3v10 ~]# free -h
total used free shared buff/cache available
Mem: 932Mi 215Mi 71Mi 1.0Mi 645Mi 571Mi
Swap: 2.0Gi 6.0Mi 2.0Gi
#swapon 再增加1G
[root@kylin-sp3v10 ~]# swapon /opt/1g
swapon: /opt/1g: insecure permissions 0644, 0600 suggested.
[root@kylin-sp3v10 ~]# free -h
total used free shared buff/cache available
Mem: 932Mi 215Mi 69Mi 1.0Mi 646Mi 570Mi
Swap: 3.0Gi 6.0Mi 3.0Gi
#查看swap分区的组成
[root@kylin-sp3v10 ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2138108 6412 -2
/opt/1g file 1023996 0 -3
第四步: 写入开机自动挂载
vi /etc/fstab
/opt/1g swap /opt/1g defaults 0 0
10.2 查找磁盘中的大文件
#第一种情况:磁盘空间满
find / -type f -size +1G
#第二种情况: inode号满
find / -type d -size +1M #目录大于1M,可以目录下有上万个小文件(3-5w) 大量占用inode
10.3 解决磁盘不够用的问题
#购买新的硬盘,分区,格式化,挂载使用,做软连接,日志的路径不能变,解决磁盘不够用的问题
#现日志文件超过1T,把现有日志文件,mv到/data目录下, data是4T硬盘,然后做软连接 ln -s /var/log/logs /data
#创建日志
[root@kylin-sp3v10 ~]# dd if=/dev/zero of=/var/log/1g.log bs=1M count=1000
#把原有日志文件 移动到4T硬盘中
[root@kylin-sp3v10 ~]# mv /var/log/1g.log /data/
#做软连接 原有日志文件映射到4T硬盘中的日志文件
[root@kylin-sp3v10 ~]# ln -s /data/1g.log /var/log/1g.log
#查看
[root@kylin-sp3v10 ~]# ll /var/log/1g.log /data/1g.log
-rw-r--r-- 1 root root 1048576000 Nov 24 14:17 /data/1g.log
lrwxrwxrwx 1 root root 12 Nov 24 14:19 /var/log/1g.log -> /data/1g.log
[root@kylin-sp3v10 ~]#
10.4 删除文件文件后发现磁盘空间还没释放
磁盘上有个一39G的文件,删除后发现磁盘没有释放。
文件如果被进程所占用,会出现删除文件磁盘没有释放的问题。
查看当前的文件被哪个进程所占用:
#进程占用
[root@kylin-sp3v10 ~]# tail -f /var/log/1g.log
#删除之后磁盘空间并未释放
#使用lsof 查找
[root@kylin-sp3v10 ~]# lsof |grep 1g
tail 4428 root 3r REG 253,0 1048576000 69099039 /var/log/1g.log (deleted)
#kill 4428 结束进程即可
Never try,never know