Linux下的磁盘管理
前言:
磁盘存储是Linux服务器运行的基础支撑,磁盘空间异常是运维工作中高频遇到的问题。本章将带领大家系统认识Linux磁盘架构,详细讲解磁盘分区、挂载、扩容等管理操作,同时介绍实时查看磁盘占用的常用方式,帮助大家解决日常存储相关问题。
一,了解磁盘
1,磁盘简介

(此图片来源网上侵权必删)
2,概念
1,硬盘是由一片或多篇带有磁性的铝合金制的盘片构成,是一种大容量、永久性的外部存储设备
2,组成:盘片、马达驱动、缓存、控制电路、接口
3,逻辑结构
磁道:由内到外的同心圆
扇区:半径组成的扇形磁道存储区
柱面:多个盘片的统一磁道

(此图片来源网上侵权必删)
4,物理设备命名
|
硬件设备 |
文件名称 |
| IDE设备 | /dev/hd[a-d] |
| SCSI/SATA/U盘 | /dev/sd[a-p] |
| 软驱 | /dev/fd[0-1] |
| 打印机 | /dev/lp[0-15] |
| 光驱 |
/dev/cdrorm |
| 鼠标 | /dev/mouse |
| 磁带机 | /dev/st0或/ht0(IDE设备) |
| 固态硬盘 | nvmen磁盘号[p1-10] |
5,给虚拟机添加新的硬盘







以上述方法再添加3块硬盘
6,硬盘分区概述
1,MBR分区
概念
MBR(Master Boot Record,主引导记录)包含硬盘一系列参数和一段引导程序,硬盘引导程序的主 要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系 统,并将控制权交给启动程序
MBR是由分区程序(如Fdisk.exe)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可 以改变的,从而实现多系统共存
MBR位于整个硬盘的0磁道0柱面1扇区
主引导扇区512B MBR=446B DPT(Disk Partition Table硬盘分区表)=64B
最后两个字节“55,AA”是分区的结束标志
MBR分区类型
主分区(primary):最多四个,可以直接用来安装系统,引导启动
扩展分区(Extended):占用1个主分区名额,本身不能直接格式化使用,只是一个容器
逻辑分区:(Logical):在扩展分区内部划分,分区数量不受4个限制,Linux里IDE硬盘hd5以后都是逻辑分区
(支持的分区数量:4个主分区或者3个主分区1个扩展分区)
MBR最多只能有4个主分区: 因为分区表占据64个字节,其中每个分区的信息占用16个字节, 分区表里面可以记录四个分区信息描述。
2,GPT分区
出现的原因:
MBR分区表中最高支持磁盘容量为2.2TB
MBR分区表中,没有备份机制,分区表被干掉则磁盘全部死光光
MBR中存储开机管理程序的容量只有446B,无法存储较多内容
概念:
GPT(GUID Partition Table,全局唯一标识分区表)是一种比MBR分区更先进、更灵活的磁盘分区模式
GPT分区表使用LBA(Logical Block Address)逻辑区块地址来记录磁盘引导、分区的相关信息
LAB区块大小(512B-4KB),默认为512B
LAB区块共68个,前34个记录分区信息,后34个进行备份
不在区分主分区与其它分区,默认情况下,GPT最多可支持128个分区
支持大于2.2TB的总容量及大于2.2TB的分区,最大支持 18EB(1EB=1024PB,1PB=1024TB,1TB=1024GB)
GPT分区机制在较老的BIOS中不能识别,则提供了一个UEFI (Unified Extensible Firmware Interface)统一的可扩展固件接口,来取代传统的BISO,又称为UEFI BIOS,UEFI使用C语言编写, 支持较多的平台
二,查看磁盘使用情况
1,lsblk指令的使用
参数
-d :仅列出硬盘本身信息,不显示分区信息
-f :列出磁盘的内的文件系统名称
-i : 使用ASCII码格式输出信息
-t :显示磁盘的详细信息
-p :显示设备完整名称
# lsblk

# lsblk -d

# lsblk -f

# lsblk -i

# lsblk -t

# lsblk -p

2,划分MBR分区方式
# fdisk /dev/sdb




注意:一定要进行保存 wq

# udevadm settle
# fdisk -l

3,划分GPT分区
# dd if=/dev/zero of=/dev/sdb bs=1M count=1 还原sdb硬盘清除所有数据
# fdisk /dev/sdb



# udevadm settle
4,gdisk管理分区
# dd if=/dev/zero of=/dev/sdb bs=1M count=1
# gdisk /dev/sdb



三,为新建分区制作文件系统
# lsblk -f /dev/sdb

# mkfs -t xfs -V -C /dev/sdb1

# mkfs.xfs /dev/sdb1

# mkfs.xfs -f /dev/sdb1

# lsblk -f /dev/sdb

四,设备的挂载和卸载
1,设备挂载
# mkdir /lei
# mount /dev/sdb1 /lei/ 挂载设备

# mount

# df

2,卸载
当设备闲置时
# umount /dev/sdb1 卸载挂载
# df

当设备忙时
# mount /dev/sdb1 /lei/
#再开启一个设shell
# cd /lei/ 当前shell运行在lei挂载的设备上,所以设备会出现忙情况,如果直接卸载会出现目标忙

# fuser -vm /lei/ 查看占用

# fuser -kvm /lei/ 查看并杀死占用

# umount /dev/sdb1

3,挂载时指定参数
# mount
参数:
-a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来
-t:指定文件系统类型
-o 特殊设备选项:挂载设备时使用
# mount /dev/sdb1 /lei/
# echo hehe > /lei/file

# mount /dev/sdb1
只读挂载设备
# mount -o ro /dev/sdb1 /lei/
# echo haha > /lei/file
# cat /lei/file

当前设备已经挂载,如何更改设备参数
# umount /lei
# mount /dev/sdb1 /lei/
# mount -o remount,ro /lei/
# mount

![]()
五,如何永久挂载设备
/etc/rc.d/rc.local 这个文件是开机启动脚本,可以把mount指令写入这个文件当中,但是此脚本在开机启动过程中执行很晚
/etc/fstab 设备挂载策略文件,在开机加载内核后就会被读取
# vim /etc/fstab

# df

# mount -a
# df

六,删除设备
# vim /etc/fstab 在此文件中删除要删除设备的信息

# umount /dev/sdb1

# fdisk /dev/sdb

# udevadm settle
# lsblk

七,swap分区
1,查看swap分区
# swapon -s

2,建立swap分区
(1)建立标签为Linux swap的分区
# fdisk /dev/sdb



# udevadm settle
(2)格式化分区
# mkswap /dev/sdb2

# lsblk -f

(3)激活设备
# swapon -a /dev/sdb2
# swapon -s

(4)永久生效
# vim /etc/fstab

(5)删除
# vim /etc/fstab 在文件中删除要删除的swap分区条目

# swapoff /dev/sdb2
# swapon -s

# fdisk /dev/sdb

# udevadm settle
八,df命令
作用
列出文件系统的磁盘空间占用情况
df,disk free,通过文件系统来快速获取空间大小的信息,当我们删除一个文件的时候,这个文件 不是马上就在文件系统当中消失了,而是暂时消失了,当所有程序都不用时,才会根据OS的规则释 放掉已经删除的文件, df记录的是通过文件系统获取到的文件的大小,他比du强的地方就是能够看 到已经删除的文件,而且计算大小的时候,把这一部分的空间也加上了,更精确了
参数
-a:列出所有的文件系统,包括系统特有的/proc等文件系统
-k:以KB的容量显示各文件系统
-m:以MB的容量显示各文件系统
-h:以人们较易阅读的GB,MB,KB等格式自行显示
-H:以M=1000K替代M=1024K的进位方式
-T:连同该分区的文件系统名称(例如ext3)也列出
-i:不用硬盘容量,而以inode的数量来显示
# df

# df -a

# df -k

# df -m

# df -h

# df -H

# df -T

# df -i

九,du命令
作用:
du:显示磁盘空间使用量(统计目录或文件所占磁盘空间大小),在默认情况下,文件大小的单位 是KB。
du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前 存在的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和,当文件系统 也确定删除了该文件后,这时候du与df就一致了
参数:
-a : 列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已;
-h : 以人们较易读的容量格式(G/M)显示;
-s : 列出总量,而不列出每个个别的目录占用了容量;
-S : 不包括子目录下的总计,与-s有点差别;
-k : 以KB列出容量显示;
-m : 以MB列出容量显示
# du /home/

# du -a /home/

# du -ah /home/

# du -sh /home/

# du -Sh /home/

# du -Shk /home/

# du -Shm /home/

十,软硬连接
1,软连接
# ls -li /mnt/

2,硬链接
# ls -li /mnt/

十一,在系统中查找文件
1,建立实验素材
# useradd lei
# useradd haha
# useradd hehe
# touch /mnt/lei{1..3}
# mkdir /mnt/chuan
# touch /mnt/chuan/leifile{1..3}
# chown lei.lei /mnt/lei1
# chown lei.haha /mnt/lei2
# chown hehe.haha /mnt/lei3

2,find命令查找文件
参数:

# find /mnt -name lei*

# find /mnt -maxdepth 2 -name lei*

# find /mnt -maxdepth 1 -name lei*

# find /mnt -mindepth 2 -name lei*

# find /mnt -mindepth 1 -name lei*

# find /mnt -user lei

# find /mnt -group haha

# find /mnt -user lei -group haha

# find /mnt -user lei -o -group haha

# find /mnt -user lei -o -not -group haha

# find /mnt -type f

# find /mnt -type d

# find /mnt -cmin +1

# echo haha > /mnt/lee1
# find /mnt -cmin -1

# dd if=/dev/zero of=/mnt/lei1 bs=1M count=1

# dd if=/dev/zero of=/mnt/lei2 bs=1M count=2

# dd if=/dev/zero of=/mnt/lei3 bs=1M count=3

# find /mnt -size 1M

# find /mnt -size -1M

十二,RAID
1,监控
# watch -n 1 mdadm -D /dev/md0

2,制作raid
# mdadm -Cv /dev/md0 -a yes -l 5 -n 2 -x 1 /dev/sd{c,d,e}

# mkfs.xfs /dev/md0

# mount /dev/md0 /mnt/


3,删除raid
# umount /mnt
# mdadm -S /dev/md0
# mdadm --zero-superblock /dev/sd{c,d,e}

十三,lvm逻辑卷管理
基本概念:
PE(physical extent)物理区域:物理区域是物理卷中可用于分配的最小存储单元,物理区域的大 小默认为4MB。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要 一致
物理卷(physical volume):简称PV,物理卷可以是整个硬盘、硬盘分区或从逻辑上与磁盘分区 具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁 盘等)比较,却包含有与LVM相关的管理参数
卷组(Volume Group):简称VG,可以看成单独的逻辑磁盘,建立在PV之上,一个卷组中至少 要包括一个PV,在卷组建立之后可以动态的添加PV到卷组中。卷组的名称可以自定义
逻辑卷(logical volume):简称LV,相当于物理分区。逻辑卷建立在卷组之上,卷组中的未分配 空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态的扩展或缩小空间。系统中的多个逻辑卷, 可以属于同一个卷组,也可以属于不同的多个卷组
1,制作逻辑卷
# fdisk /dev/sdc




# udevadm settle
# pvcreate /dev/sdc1

# pvs

# pvdisplay

# vgcreate -s 1M vg0 /dev/sdc1

# vgs

# vgdisplay

# lvcreate -L 150M -n lv0 vg0

# lvs

# lvdisplay

# mkfs.ext4 /dev/vg0/lv0

# mount /dev/vg0/lv0 /data/

2,lvm相关指令查看命令
(示例且看上文)

# df -H /data

3,lvm设备的拉伸
监控:
# watch -n 1 "pvs;vgs;lvs;df -H /data"
(1)当vg容量充足时
拉伸操作:
# lvextend -L 500M /dev/vg0/lv0

# resize2fs /dev/vg0/lv0

(2)当vg容量不足时
# lvextend -L 1500M /dev/vg0/lv0 拉伸的容量超过了vg的剩余空间

划分新的物理区
# fdisk /dev/sdc

# udevadm settle
拉伸:
# pvcreate /dev/sdc2

# vgextend vg0 /dev/sdc2

# lvextend -L 1500M /dev/vg0/lv0

# resize2fs /dev/vg0/lv0

4,lvm的缩减
# umount /dev/vg0/lv0
# e2fsck -f /dev/vg0/lv0

# resize2fs /dev/vg0/lv0 100M

# mount /dev/vg0/lv0 /data/
# lvreduce -L 100M /dev/vg0/lv0

# pvmove /dev/sdc1 /dev/sdc2

# vgreduce vg0 /dev/sdc1

# pvremove /dev/sdc1

5,lvm的删除
# umount /dev/vg0/lv0
# lvremove /dev/vg0/lv0

# vgremove vg0

# parted /dev/sdc rm 2
# parted /dev/sdc rm 1

# fdisk -l /dev/sdc

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)