当前位置: 首页 > news >正文

Linux磁盘管理

磁盘基础

分类

运行方式与原理

详细信息

机械硬盘(HDD)-家用

电机带动磁盘高速旋转,读取数据;速度可以达到5400,7200 rpm(round per minute-转/分钟)

固态硬盘(SSD)

集成电路与芯片,存储芯片

磁盘接口

类似于水壶的壶嘴,表示磁盘的读写速度。不同类型的磁盘接口有不同的读写速度

接口分类

说明

SATA

一般家用,一般用于机械硬盘,也有固态硬盘,容量大,价格较低

SAS

给企业环境使用,一般用于机械硬盘,也有固态硬盘

PCI-E

企业级使用,固态硬盘用

U.2

企业级固态硬盘使用,类似PCI-E

磁盘选型

此建议基于物理服务器,如果是公有云,一般不用考虑过多

磁盘选型

应用建议

一般情况的数据备份

SATA硬盘,10k rpm,4TB、8TB存放备份

网站服务器

使用SAS接口,15k rpm,300G 、600G、900G

高并发网站服务器

可以选择固态硬盘PCI-E,SAS,SATA

机械VS固态

机械VS固态

机械硬盘

固态硬盘

性价比

容量大、价格低

容量小、价格高

稳定

抗击打能力弱

抗击打能力强

速度

IO读写速度稍慢

IO读写速度很快

数据安全

数据恢复易

数据恢复难

寿命

几乎无限寿命

1~2W次寿命

固态硬盘存储颗粒:SLC,TLC,MLC,3D Nand

磁盘内部结构

机械硬盘内部组成

说明

盘片

实际存放数据地方

磁头

贴近盘片,读写数据

磁道

磁盘中的圆环形区域,从0开始

扇区

磁盘上最小存储单位,默认512字节

柱面

不同盘面上相同的磁道组成的形状

RAID

概述

独立磁盘冗余阵列,Redundant Array of Independent Disks,管理磁盘方式

将物理服务器的多个物理磁盘通过raid卡组合成一个逻辑单元统一进行管理的技术,旨在提升数据存储的性能、可靠性

特点

根据用户所设置的Raid级别可以获取如下一个或多个特点:①可获取更高的容量;②可获取更高的性能;③可获取更高的冗余(安全)

温馨提示:上面三个特点会根据选用的raid方式(raid级别)而所有区别,一般无法同时都满足以上三点

raid级别

至少需要几块硬盘

安全冗余

可用容量

性能

使用场景

举例

Raid 0

1

最低

所有硬盘容量和

读写最快

不要求安全,只要求速度

数据库从库;存储服务;Web服务器

Raid 1

只能有两块

100%

(两块硬盘容量之和)的一半

写入速度慢,读取OK

只追求安全性,对于速度没有要求

系统盘,监控服务器

Raid 5

3

最多损坏一块

损失一块盘的容量

写入性能不好,读取速度OK

对于速度安全要求不高

普遍数据库;存储访问量不高

Raid 10

4

可以损坏一半

损失所有硬盘一半的容量

读写很快

对于安全和性能都要

数据库主库,存储;高并发或高访问量

Raid 0条带串联;Raid 1镜像

原理

RAID 5

采用奇偶校验的条带化技术,数据被分块并分步到多快磁盘上(条带化),每个条带中除了数据块外,还会存储一个通过XOR(异或)运算生成的奇偶校验块;奇偶校验块分步在所有磁盘上,而非集中在一块磁盘上;因此若有一块磁盘出现故障,则可以通过剩余磁盘上的数据和奇偶校验信息重建丢失数据(相当于空出一块盘的容量)

RAID 10

结合RAID 1和RAID 0,先分布式生成条带,将每个条带镜像到另一组磁盘上;每组镜像磁盘存储相同的数据,若一块磁盘产生故障,镜像中的另一块磁盘可以继续提供服务,数据不会丢失

物理机使用流程

分类

机架式服务器;塔式服务器;刀片式服务器

每个服务器高度单位是U,1U为4.45cm,常用有2U,1U,4U,更多U数的服务器一般为小型机,大型机

路数:两路表示此服务器有两颗CPU

机柜:存放物理服务器(大多为19英寸机柜)

机房:存放机柜的房间

新服务器使用流程

拆包装;插电,联网;开机并配置远程控制卡;配置Raid卡实现Raid(系统一般配置Raid 1,剩余空间一般配置Raid 5);U盘安装系统,如果大量服务器装机,可通过Cobbler等软件进行批量装机;根据要求部署服务;关闭并上架(放在机柜上)物理服务器

详细视频: 老男孩教育-李导-手把手带你玩转物理服务器_哔哩哔哩_bilibili

配置远程控制卡

适用于物理机故障,远程连接失败

Dell(戴尔):iDrac

IBM:imm

hp(惠普):ilo

华为:iBMC

磁盘分区

基础

MBR:每一块硬盘上存放磁盘引导程序,在磁盘开头部分,用于引导系统启动。一般不太关注,安装系统时候自动安装

位置:磁盘分区表 磁盘的开始部分:0磁头,0磁道,1扇区(512字节)

这512字节存放了引导程序MBR(446字节);四个磁盘分区表(64字节);结束标记55

AA(2字节)

磁盘分区表为64字节,最多有四个分区,每个分区占用16字节,这四个分区叫做主分区

主分区若只划分一个分区使用所有空间,将无法继续划分分区;若划分了四个分区,但是磁盘空间还有剩余,剩余空间将无法继续使用

扩展分区用于解决主分区数量主分区只能有四个的问题,扩展分区无法直接使用,需要在扩展分区下面创建逻辑分区,存放数据(只能有一个)

逻辑分区在扩展分区中,由扩展分区创建,用于存放数据

主分区-扩展分区-逻辑分区关系

未来使用基本为创建主分区就够了;安装系统的时候自动创建主分区、创建扩展分区、创建逻辑分区

传统MBR分区表有主分区、拓展分区和逻辑分区的限制;现代GPT分区表没有这些限制,支持最多128个分区并且所有分区都是主分区

磁盘分区命名

根据接口类型命名原则有所不同,例如IDE接口一般以hd开头,SAS/SATA/SCSI等接口的硬盘一般以sd开头;若以vd开头的硬盘,则表示为虚拟磁盘设备,一般常见于公有云、虚拟机(kvm);通过字母来表示是第几块硬盘(从字母a开始依次递推),如第一块硬盘以a表示,第二块硬盘则用b表示;通过数字来表示分区,区号1~4表示主分区或者拓展分区,从5开始的区号表示逻辑分区。

例:/dev/sdb1表示第二块SATA硬盘的第一个主分区

/dev/sdc6表示第三块SAS硬盘第二个逻辑分区

/dev/vde3表示第五块公有云云盘第三个主分区

磁盘分区

一块硬盘分区三部曲

①打隔断:分区操作

②装修,格式化:创建文件系统

③安装门窗:通过命令,配置文件方式挂载(给设备设置个入口,如果不挂载,这个设备无法访问,类似于没有门窗的监狱)

查看磁盘使用情况和磁盘分区

命令:fdisk

它采用传统的问答式界面,而非类似DOS fdisk的cfdisk互动式操作界面,因此在使用上较为不便,但功能却丝毫不打折扣。

例:

在设备上创建Linux文件系统

命令:mkfs 全拼:make filesystem

选项:-c:在制做档案系统前,检查该partition是否有坏轨

再分区创建完成后,创建文件系统(相当于格式化

例:mkfs.ext4 /dev/sdb1 使用ext4文件系统格式化分区

mkfs.xfs /dev/sdb1 使用xfs文件系统格式化分区

重复格式化错误

LVM动态分区

物理卷

PV,实际硬盘

映射到磁盘上特定的物理分区

卷组

VG,物理硬盘

多个物理卷集中组成的存储池

逻辑卷

LV,物理硬盘分区

从卷组中划分出的逻辑分区

fdisk创建分区后,输入t->8e->w将分区类型转换为物理卷

不重启的情况下重新读取磁盘分区表

命令:partprobe

适用于fdisk已创建的分区,而lsblk看不到新分区的情景

例:partprobe /dev/sdb

将物理硬盘分区初始化为物理卷PV

命令:pvcreate

例:pvcreate /dev/sdb2

显示物理卷信息

命令:pvdisplay

显示物理卷名称、所属卷组、物理卷大小、PE大小和UUID

例:pvdisplay /dev/sdb2

创建LVM卷组

命令:vgcreate

例:vgcreate lvm  /dev/sdb1  /dev/sdb2 创建卷组名为lvm,将物理卷sdb1和sdb2添加

显示LVM卷组信息

命令:vgdisplay

不指定参数则显示所有卷组属性

例:vgdisplay lvm 查看卷组lvm的属性

创建LVM逻辑卷

命令:lvcreate

逻辑卷对应设备文件保存再卷组目录下,如在卷组lvm上创建一个逻辑卷lvol,则逻辑卷对应设备文件为/dev/lvm/lvol

选项:-L:指定逻辑卷大小,或要用逻辑区段的百分比

-n:指定逻辑卷的名称

例:lvcreate -n lvtest -L 1G lvm lvteat从lvm中取出1G空间

显示LVM逻辑卷属性信息

命令:lvdisplay

显示空间大小、读写状态和快照信息等属性

例:lvdisplay lvm 显示逻辑卷创建详细情况

添加物理卷增加卷组容量

命令:vgextend

例:vgextend lvm /dev/adb1 将物理卷/dev/sdb1加入卷组lvm

删除物理卷减少卷组容量

命令:vgreduce

不能删除卷组中剩余的最后一个物理卷

例:vgreduce lvm /dev/adb1 从卷组lvm中移除物理卷/dev/sdb1

在线拓展逻辑卷大小

命令:lvextend

例:lvextend -L +2G /dev/lvm/lvtest 为逻辑卷增加2G空间

减少逻辑卷占用空间

命令:lvreduce

可能会删除逻辑卷已有的数据

例:lvreduce -L -2G /dev/lvm/lvtest

删除指定逻辑卷

命令:lvremove

若使用mount挂载,则必须使用umount取消挂载

例:lvremove /dev/lvm/lvtest

删除LVM卷组

命令:vgremove

当要删除卷组中已创建逻辑卷,需要确认是否删除

例:vgremove lvm 删除卷组lvm

LVM使用建议

优点:可以动态调整分区大小;缺点:软件实现,其效率较低

未来可以搭配RAID+LVM使用,或者直接RAID部署系统,不使用LVM

预测:未来3-5年的增长情况

磁盘挂载

临时挂载

挂载Linux系统外的文件

命令:mount

格式:mount 源路径目录 挂载目录

具有临时性,重启Linux系统后挂载失败

例:mount /dev/cdrom /mnt 挂载光盘至/mnt目录

mount -o loop /tmp/image.iso /mnt/cdrom 将/tmp/image.iso光碟使用loop模式挂在/mnt/cdrom目录下,不烧录光碟下检视内容

mount -t davfs https://web.dev.com /soft 将网络存储以网络磁盘的形式挂载到系统路径/soft目录下

通过WebDav协议挂载网络磁盘,需要安装必要的组件davfs2

mount /dev/sdb1 /sdb-u 将/dev/sdb1挂载到/sdb-u目录

(图例)挂载前:

挂载后:

卸载已加载的文件系统

命令:umount

选项:-v 执行时显示详细信息

例:umount -v /dev/cdrom 通过设备名卸载

umount -vl /mnt 执行延迟卸载(lazy unmount)会立即卸载目录树里的文件系统,等设备不繁忙时才清理相关资源

常见原因:某个打开shell当前目录为挂载点里的目录,原因不详时可用lsof列出已经打开的文件

退出抽取式设备

命令:eject

允许可移动介质(典型是cd-ROM、软盘、磁带、或者JAZ以及zip磁盘)在软件控制下弹出。该命令也可以控制一些多盘片CD-ROM控制器,控制一些设备支持的自动弹出功能,以及控制一些CD-ROM驱动器磁盘托盘的关闭。若设备已挂入,则eject命令会先将该设备卸除再退出

例:eject /dev/cdrom 卸载并弹出CD

永久挂载

①使用rc.local将挂载命令 mount /dev/sdb1 /data/以绝对路径形式写入到/etc/rc.local(不推荐)

②专业的开机自动挂载的配置文件/etc/fstab,依配置文件格式更改mount命令

/etc/fstab配置文件格式

blkid命令查看设备的UUID(每个设备独一无二)

文件系统类型:ext4、xfs、ntfs-3g、nfs、cifs……

挂载选项:defaults、noatime、rw、_netdev(网络)

创建SWAP交换分区

服务器运行Java程序,占用大量内存,以至于开始占用SWAP

解决方案:为保证网站正常,临时增加SWAP空间,之后联合开发一起排查

内存拓展:内存不足时充当临时内存,占用的磁盘空间。若内存充足且服务对性能要求较高,可关闭内存拓展

swap交换分区:内存不足的时候临时充当内存,.

操作过程

①创建指定大小为1G的文件

命令:dd if=/dev/zero of=/tmp/1G  bs=1M count=1000

if==input file 输入文件,数据从哪里来,一般使用/dev/zero,不断输出空字符

of==ouput file 输出文件,创建用于存放数据的文件

bs==block size 每次读取大小,一般为1MB

count 读取次数

文件大小=bs*count=1M*1000=1000MB=1GB

②把文件转换为swap(格式化)

mkswap /tmp/1G

③激活这个交换分区,把它加入到Linux中

命令:chmod 600 /tmp/1G

swapon /tmp/1G

④配置永久挂载

(1)echo "swapon /tmp/1G">>/etc/rc.local

(2)echo "/tmp/1G    swap    swap    defaults    0    0">>/etc/fstab

⑤关闭swap交换分区文件

命令:swapoff /tmp/1G 关闭swap分区交换文件

swapoff -a>/dev/null 关闭所有交换空间

企业分区方案

存放不重要数据的服务器

分区

作用与大小

补充

/boot/引导分区

引导系统启动与存放引导文件,存放系统内核镜像,推荐1G

swap

根据实际内存配置,实际内存大于8G,swap配置8G即可;

实际内存低于8G,配置1.5倍或2倍,最大8G

公有云可以不配置,但如果是Java建议配置一些

/根分区

所有剩余空间给根

存放重要数据的服务器

分区

作用与大小

补充

/boot/引导分区

引导系统启动与存放引导文件,存放系统内核镜像. 推荐1G

swap

根据实际内存配置,实际内存大于8G,swap配置8G即可;

实际内存低于8G,配置1.5倍或2倍,最大8G

公有云可以不配置,但如果是Java建议配置一些

/根分区

给40G-200G,主要安装一些软件,重要数据单独存放

/data/

剩余所有空间

存放数据重要程度不详的服务器

分区

作用与大小

补充

/boot/引导分区

引导系统启动与存放引导文件,存放系统内核镜像. 推荐1G

swap

根据实际内存配置,实际内存大于8G,swap配置8G即可;

实际内存低于8G,配置1.5倍或2倍,最大8G

公有云可以不配置,但如果是Java建议配置一些

/根分区

给40G-200G,主要安装一些软件,重要数据单独存放

剩余空间

剩余空间不划分,未来谁使用谁划分

MBR vs GPT

分区表

特点

对应的命令

MBR

支持2TB以内的硬盘,大于2TB则只识别2TB,区别主分区、扩展分区、逻辑分区

fdisk/parted

GPT

支持大容量硬盘,主分区一百多个,可无限使用

gdisk/parted

磁盘分区和分区大小调整

命令:parted

该命令配置实时生效

例:创建GPT格式分区大小10MB(/dev/sdc)

磁盘故障案例

显示每个文件和目录的磁盘使用空间

命令:du 全拼:disk usage

命令

作用

du /usr

显示使用情况

du -h /usr --human-readable

用恰当的单位,可读的单位显示

du -h /root --max-depth=1

加上层级限制

du -h --max-depth=1 | sort -hr

降序排列

du -ah /root | sort -hr | head -n 3

查看前三个最大的文件

du -ah /root --exclude="*/.*"

排除隐藏目录

du -kt 10M ./*

找出10M以上的文件

系统运行状态统计工具

命令:sar 全拼:system activity reporter

%user:用于表示用户模式下消耗的CPU时间的比例

%nice:通过 nice 改变了进程调度优先级的进程,在用户模式下消耗的CPU 时间的比例

%system:系统模式下消耗的CPU 时间的比例

%iowait:CPU 等待磁盘 I/O 导致空闲状态消耗的时间比例等待时间越低越好

%steal:利用 Xen 等操作系统虚拟化技术,等待其它虚拟CPU计算占用的时间比例

%idle:CPU 空闲时间比例空闲时间越高越好

显示当前已打开的所有文件列表

命令:lsof

若不存在此命令,需要"yum -y install lsof.x86_64"安装

选项:

-a:列出打开文件存在的进程

-c<进程名>:列出指定进程所打开的文件

-g:列出GID号进程详情

-d <文件号>:列出占用该文件号的进程

+d <目录>:列出目录下被打开的文件

+D <目录>:递归列出目录下被打开的文件

-n <目录>:列出使用NFS的文件

-i <条件>:列出符合条件的进程(协议、:端口、 @ip )

-p <进程号>:列出指定进程号所打开的文件

-u:列出UID号进程详情

例:

lsof -i:9981 -P -t -sTCP:LISTEN 获取端口对应的进程ID=>pid

lsof -i:$port 查看端口占用

lsof -u <username> 查看指定用户打开的文件

lsof +D /path/to/directory 查看正在使用某个目录的进程

lsof -u +L1 查看被删除但仍然被某个进程打开的文件

lsof -F 以列表形式显示结果

lsof -b 显示结果中不包含进程路径

lsof -r 以逆序显示结果

lsof -r <interval> 以特定间隔时间循环显示结果

lsof -t <interval> 以持续模式显示结果

lsof输出各列信息的意义如下:

标识

说明

COMMAND

进程的名称

PID

进程标识符

PPID

父进程标识符(需要指定-R参数)

USER

进程所有者

PGID

进程所属组

FD

文件描述符,应用程序通过它识别该文件

文件描述符

标识

说明

cwd

表示当前工作目录,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改

txt

该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序

lnn

库引用 (AIX);

er

FD 信息错误(参见名称栏)

jld

jail 目录 (FreeBSD);

ltx

共享库文本(代码和数据)

mxx

十六进制内存映射类型编号xx

m86

DOS合并映射文件

mem

内存映射文件

mmap

内存映射设备

pd

父目录

rtd

根目录

tr

内核跟踪文件 (OpenBSD)

v86

VP/ix 映射文件

0

表示标准输出

1

表示标准输入

2

表示标准错误

文件状态模式

一般在标准输出、标准错误、标准输入后

标识

说明

u

表示该文件被打开并处于读取/写入模式

r

表示该文件被打开并处于只读模式

w

表示该文件被打开并处于写入模式

空格

表示该文件的状态模式为 unknow,且没有锁定

-

表示该文件的状态模式为 unknow,且被锁定

相关的锁

一般在文件状态模式后

标识

说明

N

对于未知类型的Solaris NFS锁

r

用于部分文件的读取锁定

R

对整个文件进行读取锁定

w

对文件的一部分进行写锁定(文件的部分写锁)

W

对整个文件进行写锁定(整个文件的写锁)

u

用于任何长度的读写锁

U

对于未知类型的锁

x

对于文件部分的SCO OpenServer Xenix锁

X

对于整个文件的SCO OpenServer Xenix锁

space

如果没有锁

文件类型

标识

说明

DIR

表示目录

CHR

表示字符类型

BLK

块设备类型

UNIX

UNIX 域套接字

FIFO

先进先出 (FIFO) 队列

IPv4

网际协议 (IP) 套接字

DEVICE

指定磁盘的名称

SIZE

文件的大小

NODE

索引节点(文件在磁盘上的标识)

NAME

打开文件的确切名称

REG

常规文件

block占用(经典)

现象:错误提示:no space left on device,而df -h查看某个磁盘分区使用率达到100%

模拟:创建1个大文件

dd if=/dev/zero of=/var/log/nginx.log bs=1M count=2000

排查: df -h 查看哪里空间不足,哪个分区空间不足;du -sh 详细查看目录所占空间,例:du -sh /var/*

解决:找到具体的大文件或大目录,找出后进行确认是否可以进行删除操作

温馨提示:/sys/、/proc/等目录是虚拟目录,不要在里面创建文件,/dev/目录是设备目录,也不要在里面创建文件(详见目录管理)

inode占用

现象:操作时,提示no space left on device,而df -h查看磁盘空间没有满

原因:磁盘空间不足,不是block导致的,还有一种情况是inode数量不足(服务生成大量小文件,导致占用inode速度快于block,inode不足)

模拟:创建多个小文件

echo CK{01……5211314}.txt | xargs touch

排查:df -h 检查磁盘空间没有满;df -i 查看inode使用情况

找出有大量小文件的目录(目录本身大小大于1MB,du -sh目录所占空间):find /ck/ -type d -size +1M #或find /ck/ -type f | xargs dirname | sort | uniq -C

未来工作中可能出现大量小文件,了,也会导致磁盘空间不足

文件未彻底删除

文件彻底删除条件

①删除文件,并且使其硬链接数量为零(使用用rm命令)

②文件调用数为零,文件不被命令、服务使用

常见形式:文件硬链接数为零,但进程调用数

现象:提示no space left on device,df -h提示存储空间已满;du -sh统计总大小未满

模拟(文件被调用中,但是没有入口)

seq 500000000 > big.log 生成一个五亿行数字日志文件(不明显)

dd if=/dev/zero of=/tmp/10G  bs=1M count=10000 生成一个10G空文件

tail -f big.log 通过tail -f调用文件

rm -f big.log

排查

通过du -sh /分析发现实际占用的才7.7GB ,使用lsof | grep delete,查看并结束进程,重启服务

在lsof中delete标记表示这个文件没有入口(硬连接数为0),但是还有进程调用

结束进程

磁盘空间不足故障分类

现象

排查

解决

block

df -h 磁盘空间不足

df -h,du -sh 一层一层找,找出对应的文件或目录

确认后再删除

inode

df -h 磁盘空间有剩余,创建文件,操作服务提示磁盘空间不足

df -h,df -I 找出系统中的大目录

确认后再删除

block 文件未彻底删除

df -h 查看磁盘空间不足,du -sh 查看磁盘空间还有剩余

lsof | grep delete 找出进程或服务

重启服务

相关文章:

  • LazyOwn RedTeam/APT 框架是第一个具有人工智能驱动的 CC 的 RedTeam 框架
  • 吴恩达机器学习笔记(1)—引言
  • PDF 转 HTML5 —— HTML5 填充图形不支持 Even-Odd 奇偶规则?(第一部分)
  • shiro使用详解
  • hook组件-useEffect、useRef
  • new语法
  • 汇编语言学习(二)——寄存器
  • 机器视觉图像处理之图像滤波
  • 2025年主流编程语言全面分析与学习指南
  • Android Studio历史版本下载地址汇总
  • Java JVM 内存模型详解
  • NodeJS全栈WEB3面试题——P2智能合约与 Solidity
  • 【笔记】在 MSYS2 MINGW64 环境中安装构建工具链(CMake、GCC、Make)
  • 【数据分析】第三章 numpy(2)
  • 精读92页《数据资产入表全流程指南》【附全文阅读】
  • SQL进阶之旅 Day 11:复杂JOIN查询优化
  • vue-13(延迟加载路由)
  • 【看到哪里写到哪里】在C里面怎么传递二维数组呢?
  • Python实例题:自联想器的Python实现
  • 腾讯位置商业授权沿途搜索服务开发指南
  • 怎么跳转网站/网络营销方式有哪几种
  • 罗湖网站建设费用/推广软件
  • 新疆建设兵团建工集团官方网站/seo管理
  • 做证书的网站/黄页推广引流
  • 天津建网站/企业关键词优化推荐
  • 做翻页电子书的网站/深圳网站seo优化公司