磁盘管理和文件系统
1.设备文件
linux下一切皆文件:open(), read() , write(),close()
设备文件:关联至一个设备驱动程序,进而能够跟与之对应的硬件设备进行通信
设备号码:主设备号:major number,标识设备类型
次设备号:minor number,标识同一类型的不同设备
设备类型:块设备:block,存取单位“块”,磁盘
字符设备:char ,存取单位“字符”,键盘
磁盘设备的设备文件命名:
/dev/DEV_FILE
/dev/sd# #SAS,SATA,SVSI,IDE,USB
/dev/nvme0n# #nvme协议磁盘,如:第一个硬盘:nvme0n1,第二个硬盘:nvme0n2
虚拟磁盘:/dev/vd , /dev/xvd
磁盘类型:IDE: 133MB/s ,并行接口,早期家用电脑
SCSI: 640MB/s,并行接口,早期服务器
SATA: 6Gbps,SATA数据端口于电源端口是扽开的,即需要两条线,一条数据线,一条电源线
SAS:6Gbps,SAS是一整条线,数据端口是一体化的,SAS中包含供电线,而SATA中不包含供电线,SATA标准其实是SAS标准的一个子集,二者可兼容,SATA硬盘可以插入SAS主板上,反之不可以
USB:480MB/s
在这里最快速度的硬盘类型属于nvme
服务器硬盘大小: LFF:3.5寸,一般见到的那种台式机硬盘的大小
SFF:smail form factor (小形状因数),2.5寸,注意步同于笔记本硬盘
L ,S 分别是大,小的意思,目前服务器或者盘柜采用sff规格的硬盘主要是考虑增大单位密度内的磁盘容量,增强散热,减小功耗
机械硬盘(HDD):hard disk drive ,即是传统普通硬盘,主要由盘片,磁头,盘片转轴即控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成,机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头转换器负责各个磁头的运动,磁头可沿盘片的半径方向运动。
固态磁盘(SSD):solid state drive ,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片,DRAM芯片)组成,固态硬盘在接口的规范和定义,功能及使用方法与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致。
硬盘存储术语(CHS)
head :磁头 磁头数=盘面数
track :磁道 磁道=柱面数
sector:扇区,512bytes
cylinder:柱面 1柱面=512*sector数/track*head数=512*63*255=7.84M
CHS: 采用24bit位寻址
其中前10位表示cylinder,中间8位表示head,后面6位标识sector
最大寻址空间是8GB
LBA(logical block addressing)逻辑块寻址
LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址
ATA-1规范中定义了28位寻址模式,以每扇区512位组来计算,ATA-1所定义的28位LBA上限达到128GiB,2002年ATA-6规范采用48位LBA,同样以每扇区512组计算容量上限达128petabytes(字节)
由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式,在磁盘容量大于大概8GB时,则只能使用LBA寻址方式
管理存储:1.设备分区 2.创建文件系统,3.挂载新的文件系统
磁盘分区:首先为什么要磁盘分区?
主要由一下几点原因:1.优化I/O性能
2.实现磁盘空间配额限制
3.提高修复速度
4.隔离系统和程序
5.安装多个OS
6.采用不同文件系统
分区方式:MBR (master boot record ) 主引导记录
GPT(globals unique ldentifiers partition table ) 全局唯一标识符分区表
在MBR中最多只能分4个主分区,可以3个主分区加一个扩展分区(N个逻辑分区)
主分区可以存放数据,也可以装系统,扩展分区要想存数据,必须要划分小的逻辑分区。
扩展分区不能直接使用,如果需要使用,里面必须要分小的逻辑分区,扩展分区相当于一个容器,只能用来分区扩展分区
一个分区要占用16个字节来描述一个分区,所以最多只能分4个主分区,所以主分区加扩展分区最多4个。
(活动分区只有一个)
GPT本身可以分128个主分区
BIOS:是主板上内置的程序代码,主要用于开机系统自检和引导操作系统。
BIOS(basic input ouput system)基本输入输出系统,主要完成引导操作系统的启动,启动之后,BIOS的任务就完成了。自动搜索硬件,是否满足启动要求。
BIOS,不支持桌面。
EFL(extensible firmware interface)可扩展固件接口
组合:BIOS+MBR , UEFI + GPT
UEFI 用起来比较方便,支持更多语言。
mknod :创建指定类型和名称的特殊文件
管理分区:列出分区块:lsblk
创建分区命令:fdisk 管理MBR分区(master boot record )
gdisk 管理GPT分区(globals unique ldentifiers partition table )
parted 高级分区操作,可以是交互或非交互方式,(这个命令甚用,用这个命令他会立即生效,不安全)
子命令:p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
v 效验分区
u 转换单位
w 保存并退出
q 不保存并退出
重新设置内存中内核分区表版本,适合于除了Centos6以外的其他版本。
硬盘上分的分区同步到内存中:partprobe
parted命令:修改磁盘分区表后,无需重启,通partx命令告诉内核,分区已改动,内核可以读入新的分区表。
文件系统:
ext2:Extended file system 适用于那些分区容量不是太大,更新不频繁的情况,例如/boot分区
ext3:是ext2的改进版本,其支持日志功能,能够帮助系统从非正常开机导致的异常中恢复
ext4:是ext文件系统最新版,提供了很多的特性,包括纳秒级时间戳,创建和试用巨型文件(16TB),最大(1EB)的文件系统,以及速度的提升。
xfs:SGI,支持最大8EB的文件系统
swap
iso9660 光盘
btrfs (oracle)
reiserfs
win常用文件系统
FAT32,NTFS,exFAT
UNIX : FFS, UFS ,JFS2
网络文件系统:NFS, CIFS
集群文件系统:GFS2,OCFS2(oracle)
分布式文件系统:fasrdfs,ceph,moosefs,mogilefs,glusterfs,lustre
RAW: 裸文件系统,未经处理或者未经格式化产生的文件系统
常用的文件系统特性:
FAT32: 最多只能支持16TB的文件系统和4GB的文件
NTFS:最多只能支持16EB的文件系统和16EB的文件
EXT3:最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件,EXT3目前只支持32000个子目录,EXT3文件系统试用32为空间记录快和inode数量,当数据写入到EXT3文件系统中时,EXT3的数据块分配器每次只能分配一个4KB的块
EXT4:EXT4是linux系统下的日志文件系统,是EXT3文件系统的后继版本,EXT4的文件系统容量达到1EB,而支持单个文件达到16TB,理论上支持无限量的子目录,EXT4文件系统使用64位空间记录块数量和inode数量,EXT4的多块分配器支持一次调用分配多个数据块,修复速度快
xfs:根据所记录的日志在很短的时间内迅速恢复磁盘文件内容,用优化算法,日志记录对整体文件操作影响非常小,是一个全64-bit的文件系统,最大可以支持8EB的文件系统,而支持单个文件达到8EB,能以接近【裸设备I/O的性能存储数据
在linxu中区分大小写的说法实际上是不对的,准确的说和文件系统有关,区分大小写并不是由操作系统决定,而是文件系统决定。
文件系统的组成部分:
内核中的模块:ext4,xfs,vfat
linux的虚拟文件系统 : VFS
用户空间的管理工具:(mkfs.ext4 ),(mkfs.xfs),(mkfs.vfat)
创建mkfs命令:(1)mkfs.fs (ext4,xfs,btrfs,vfat)
(2) mkfs -t fs_type
mkfs -L "LABEL" 设定卷标
选项:-t 指定文件系统类型
-b 指定块block 大小
-L 设置卷标
-j 相当于-t ext3,mkfs.ext3=mkfs=mkfs -t ext3 =mke2fs -j =mke2fs -t ext3
-i 为数据空间中每多少个字节创建一个inode,不应该小于block大小
-N 指定分区中创建多少个inode
-I 一个inode记录占用的磁盘空间大小,128 -----2096
-m 默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[....] 启用指定特性
-o ^FEATURE 关闭特性
blkid:可以查看块设备属性信息
格式: blkid [option]... device
常用选项:-U UUID根据指定的UUID来查找对应的设备
-L LABEL根据指定的LABEL来查找对应的设备
e2label:管理ext系列的文件系统LABEL(标识 ,卷标)
用法:e2label device [LABEL]
findfs:查找分区
findfs [options] LABEL=<lael>
findfs [options] UUID=<uuid>
tune2fs:重新设定ext系列文件系统可调整参数的值
选项:-l 查看指定文件系统超级模块信息:super block
-L LABEL 修改卷标
-m 修改留给管理员的空间百分比
-j 将ext2升级为ext3
-O 文件系统属性启用或禁用,-O ^has_journal
-o 调整文件系统的默认挂载选项。 -o ^acl
-U UUID修改uuid号
dumpe2fs:显示ext4文件系统,将磁盘块分组管理
-h 查看超级模块信息,不显示分组信息
xfs_info 显示挂载或已挂载的xfs文件系统信息
文件系统检测和修复
文件系统加故障常发生于死机或者非正常关机之后,挂载为文件系统标记为”no clean“
注意:一定不要在挂载状态下执行修复命令
fsck:file system check
fsck.fs_TYPE
fsck -t fs_TYPE
注意fs_type 一定要与分区上文件类型相同
-a 自动修复
-r 交互式修复错误
e2fsck :ext系列文件专用的检测修复工具
-y 自动回答yes
-f 强制修复
-p 自动进行安全的修复文件系统问题
xfs_repair:xfs文件系统专用检测修复工具
-f 修复文件,而不修复设备
-n 只检查
-d 允许修复只读的挂载设备,在单用户下修复/ 时使用,然后立即reboot
挂载
挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录作为其他文件访问入口的行为
卸载:为解除此关联关系的过程
把设备关联挂载点:mount point
挂载点下原有文件在挂载完成后会被临时隐藏,因此,挂载点目录一般为空,进程正在使用中的设备无法被挂载
挂载文件系统 mount
格式:mount [-fnesvw] [-t vfstype] [-o options] device mountpoint
device:指明要挂载的设备
设备文件:例如:/dev/sda2
卷标:-L "LABEL" 例如-L "MYDAYA"
UUID: -U UUID 例如-U ”UUID号“
伪文件系统名称:proc,sysfs,devtmpfs,configfs
mounpoint :挂载 目录必须先存在,建议使用空目录
mount 常用选项:
-t fstype 指定要挂载的设备上的文件系统类型,如:ext4,xfs
-r readonly,只能挂载
-w read and write ,读完挂载,此为默认设置,可忽略
-n 不更新/etc/mtab,mount不可见
-a 自动挂载所有支持自动挂载的设备(/etc/fstab文件中,且挂载选项中由auto功能)
-L ‘LABEL’ 以卷标指定挂载设备
-U UUID 以UUID指定要挂载的设备
-B --bind 绑定目录到另一个目录上
-o options :(挂载文件系统的选项),可多个选项使用逗号分割
async 异步模式,内存更改时,写入缓存区buffer,过一段时间再写到磁盘中,效率高,但不安全
sync 同步模式,内存更改时,同时写磁盘,安全,但效率底下
atime/noatime 包含目录和文件
diratime/nodiratime 目录的访问时间戳
auto/noauto 是否支持开机自动挂载,是否支持-a选项
exec/noexec 是否支持将文件系统上运行程序
dev/nodev 是否支持在此文件系统上使用设备文件
suid/nosuid 是否支持suid和sgid权限
remount 重新挂载
ro/rw 只读,读写
user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用
acl/noacl 启用此文件系统上的acl功能
loop 使用loop 设备
_netdev 当网络可用时才对网络资源进行挂载,如:NFS系统
defaults 相当于rw,suid,dev,exec,auto,nouser,async
(一个文件夹或者文件,被挂载起来后,旧的文件会被隐藏 )
挂载规则:
1.一个挂载点同一时间只能挂载一个设备
2.一个挂载点同一时间允许挂载多个设备只能看到最后一个设备的数据,其他设备上的数据将被隐藏
3.一个设备可以同时挂载多个挂载点
4.通常挂载点一般是已存在空的目录
卸载文件系统 umount
卸载时,可使用设备,也可以使用挂载点
umount 设备名|挂载点
查看文件或者文件夹是否可以挂载
findmnt mount_point | device
查看某个挂载点是否在被别人使用
lsof mount_point
fuser -v mount_point
终止所有在访问挂载点的用户
fuser -km mount_point
持久挂载
将挂载保存到/etc/fstab中可以下次开机时,自动启用挂载
swap :拿硬盘的分区,来模拟内存
swapon -a 表示立即生效
swapon -s 表示swap新增加的内存怎么来的
swapoff -a 启用
swapoff -s 禁用所有swap
/etc/fstab 以设备挂载的时候用UUID,如果用文件作为swap内存,就用文件名
df:显示文件系统的大小
文件系统必须是挂载的文件系统
选项:-h human-readable
-H 以10位单位
-p 以posix兼容的格式输出
-T 以文件系统类型
-i inodes instead of block
du :显示文件和目录的大小
选项:-s 只显示目录的大小
-h human-readable
--max-depth=# 指定最大目录层级
-x ,one-file-system 忽略不在同一个文件系统的目录
dd :convert and copy file
格式:dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# count=#
if=file 从所命名文件读取而不是从标准输入
of=file 写道所命名的文件而不是到标准输出
ibs=size 一次读size个byte
obs=size 一次写size个byte
bs=size block size,指定块大小(即使是ibs也是obs)
cbs=size 一次性转换size个byte
skip=blocks 从开头忽略blocks个ibs大小的块
seek=block 从开头忽略block个obs大小的块
count=n 复制n个bs
conv=conversion 用指定的参数转换文件
conversion转换参数:ascii 转换EBCDIC为ASCII
ebcdic转换ASCII为EBCDIC
lcase把大写字符转换为小写字符
ucase 把小写字符转换为大写字符
nocreat 不创建输出文件
noerror 出错时停止
notrunc 不截断输出文件
sync 把每个输入块填充到ibs个字节,不足部分空(nul)字符补齐
fdatasync 写完成前,物理写入输出文件
raid 级别 独立的磁盘冗余阵列
raid 0 ,数据分半写
读写性能快
不允许损坏任何一个硬盘,没有容错性
最少磁盘数1+
raid 1 镜像,备份关系
同时写一样的数据
有容错性,读提升性能,磁盘利用率只能达到50%
数据是同步的,如果要删除,都删。
raid 4
至少3块硬盘组合,有容错性,磁盘利用率高75%
第四个硬盘存放校验位,不是数据
raid 5
读写性能提升,有容错能力,只允许一块硬盘损坏,最少磁盘3,3+
校验位的位置换了,磁盘利用率n-1
raid 6
两个校验位,至少4块硬盘,n-2,有容错能力,允许最多两块硬盘损坏,
raid 10 相比之下,raid 10 会更好
先把两个硬盘做成raid 1 ,再把两组raid 1 合成一个raid 0
性能提升,有容错性,每组最多只能坏一块,最少磁盘4,4+
raid 01
先把两个硬盘做成raid 0 ,再把两组raid 0 合成一个raid 1
每组只能坏一块,磁盘利用率50%
逻辑卷管理器(LVM)
是一种逻辑上的管理方式,把硬件逻辑的组合在一起
多块硬盘或者分区组合在一起,叫VG。(volume group 卷组)逻辑上的大硬盘,
lv 逻辑卷是从卷组中取出一块空间,
(逻辑卷实现过程:拿大小不一的块设备,先把他变成物理卷(pv),把大小不一的加入到卷组(vg),再创建逻辑卷(lv) 。)
实现过程
将device指定为物理卷
用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域(physical extent PE)来定义的
在物理卷上创建的逻辑卷,是由物理区域(PE)组成
可以在逻辑卷上创建文件系统并挂载
依赖包:lvm2
pvcreate 创建物理卷
pvs 查看现有的物理卷
pvremove 删除物理卷
-f 强制创建物理卷
-u 指定设备的UUID
-y 所有的问题都回答yes
-Z 是否利用前四个扇区
pvdisplay 显示详细的物理卷信息
vgcreate -s PE大小 卷组名 空闲分区
vgs 查看卷组
vgextend 扩容卷组
vgreduce (减少) -a 如果命令行中没有指定要删除的物理卷,则删除所有的空物理卷
vgremove -f 强制删除
vgdisplay 查看卷组详细信息
lvcreate -L 大小 -n 逻辑卷名 卷组名
lvs 查看逻辑卷
lvextend 扩展逻辑卷空间
lvchange 更改逻辑卷的属性
lvresize 调整逻辑卷空间大小
lvdisplay 查看逻辑卷详细信息
PE 在逻辑卷里换名字叫LE
-n 指定逻辑卷名
-l 指定PE大小 50%free
-L # PE大小,必须是4M的整数倍,指定卷组(MB,GB,TB)
PE 物理盘曲,以PE来扩展,以PE为单位,一个PE4M
创建文件系统,挂载,(写设备名,UUID都可以)
清理缓存 /proc/sys/vm/drop_caches
逻辑卷扩容和缩容
从卷组空间扩展
lvextend -l 扩容到多少个PE +50%free
-L 扩容的容量
-r 同步文件系统,一步到位,
resize2fs 调整文件大小,用来扩容或缩小位于设备上的已卸载的文件系统, 只支持ext4 扩容之后需要指定文件系统,同步文件系统
-f 强制执行resize操作
xfs_growfs 只支持xfs
缩减逻辑卷
lvreduce -L 指定大小
缩容必须是离线缩容,先取消挂载
缩容前先做备份
xfs不支持缩减
实现过程:1.取消挂载 2.检查文件系统完整性 3.缩减文件系统 4.缩减逻辑卷 5.挂载
pvmove 移动
移动的是空间,把空间搬到其他的空间
vdreduce 移除卷组
pvremove 移除物理卷
逻辑卷快照
工作逻辑:只是创建空间,并不真实创建,创建快照不备份,改变某个文件只存放最早版本,,快照里面只是存放改过的数据,需要指定快照的名称和大小
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)