深入剖析Linux磁盘管理
一、linux中常见的磁盘:
无论什么操作系统,归根还是要落实与磁盘上的,对于磁盘的管理也是linux管理必备的一项技能。在linux中“一切皆文件”的思想贯彻整个linux的学习中,包括像是磁盘等的硬件也是在linux的/dev/目录下类似于文件形式的存放,常见的SATA口USB优盘或是SCSI口的硬盘在linux中是以/dev/sd[a-p]开头的文件,早期的IDE硬盘现在已经很少见了,这种硬盘在linux中是以/dev/hd[a-d],CDROM是以/dev/cdrom开头的文件,磁带机/dev/st0(SCSI口的),/dev/ht0(IDE口)。每一种设备都有特定的主设备号和次设备号,主设备号用来标识设备类型,次设备号标识同一类型设备的不同设备。
不同类型的接口的设备速度也是有很大差别的,像是并口的IDE的接口理论值为133MB/s,SCSI硬盘速度为640MB/s 。串口的SATA和SAS口的硬盘速度都是6Gbps,在转化为同一单位的情况下后者的速度还是远远优于前者。串口的USB速度也能达到480MB/s
二、 磁盘结构与术语:
硬盘的物理结构一般由磁头与盘片、电动机、主控芯片与排线等部件组成;当主电动机带动盘片旋转时,副电动机带动一组( 磁头)到相对应的盘片上并确定读取正面还是反面的碟面,磁头悬浮在碟面上画出一个与盘片同心的圆形轨道( 磁轨或称 柱面),这时由磁头的磁感线圈感应碟面上的磁性与使用硬盘厂商指定的读取时间或数据间隔定位 扇区,从而得到该扇区的数据内容;
磁头(head):对磁盘的数据进行读写
磁道(track):当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。 磁盘上的磁道是一组记录密度不同的同心圆
扇区(sector):磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区。硬盘的第一个扇区,叫做引导扇区。 一个扇区的大小为512个字节。
柱面(cylinder):在有多个盘片构成的盘组中,由不同盘片的面,但处于同一半径圆的多个磁道组成的一个圆柱面。
三、分区类型:
1. 磁盘分区的优点:
(1) 优化I/O性能
(2)实现磁盘的空间配额限制
(3)提高修复速度
(4)隔离系统和程序
(5)分区可以安装多个OS
2. 两种分区方式:MBR和GPT
MBR:(master boot recorder )传统的分区都是以MBA的方式分区的使用32位作为扇区数,分区大小不差过2T,分区是按照柱面来分区(CHS:cylinder,head,sector),在MBR中有LBA地址用来和CHS转换,LBA地址是统一的逻辑区块地址作为寻址方式,这种寻址模式取代了原先 操作系统必须面对存储设备硬件构造的方式。在硬盘上的0磁道0扇区共512个字节存放MBR硬盘分区分区表和主引导程序,其中前446个字节存放引导程序,64个字节存放4个大小为16个字节的分区表,最后还有两个字节(0x55AA)是分区结束标志。
(可以通过十六进制查看器查看,先通过dd命令将硬盘的前512个字节备份成一个二进制文件,在通过hexdump 查看)
注释:其中4个分区最多可以建立4个主分区,或者3个主分区加一个扩展分区,主分区结构如上,第一个字节表示此分区是否处于活动分区状态,80表示活动,00表示非活动,活动分区可以用来存放操作系统。第二个字节表示磁头号,第3和4字节存放扇区号第5个字节表示分区类型,0表示分区未使用。5,6,7字节表示分区结束的磁头号,扇区和柱面号。后面的八个字节用来存放LBA地址,用来做CHS和LBA地址转化用的。
扩展分区中存放着逻辑分区的地址,在逻辑分区的第一个扇区也是存放着EBR表,结构与MBR类似,只不过前面的446字节都空着,存放64字节的表中第一个表项的16个字节指向本个逻辑分区,下一个16个字节的表项中存放指向下一个扩展分区的EBR,接下来便是两个空白的表项和类似于MBR的结束标志0x55AA。
3.GPT分区:
GPT分区是新一代的分区方式,可支持多分区(最多128个分区)和大分区(磁盘块大小为512字节时可支持8Z,4096字节的块大小时可以达到64Z。注Z的数量级为270)。GPT使用128位的UUID作为磁盘和分区的同一唯一标识符,并且在GPT分区表自动备份在头尾两部分,并伴有CRC校验位,在GPT分区的首部有一个伪MBR,用于向下兼容MBR,因为MBR是不能理解GPT分区的,在GPT分区首部放置一个伪MBR首部可以防止MBR认为当前磁盘没有分区,而将GPT分区覆盖。
四、几种分区工具:
1.图形化工具gnome-disks使用简单,在此不在赘述。
2.fdisk使用:
fdisk支持MBR,也支持GPT分区,对于一块硬盘最多只能理解15个分区,一般使用fdisk做MBR分区,gdisk做GPT分区。下面为fdisk分区示例:
五、文件系统的挂载mount:
1. 挂载命令mount使用:
(1)挂载: 将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为,挂载点下原有文件在挂载完成后会被临时隐藏
(2) 卸载:为解除此关联关系的过程,可使用设备,也可以使用挂载点
(3) 用法:
mount 设备 挂载点
设备类型:
1) 可以使用设备文件如/dev/sda;
2) 可以使用卷标如SDA_LABEL;
3) 可以使用UUID;
4) 伪文件系统;proc,sysfs……
5) dd创建的p_w_picpath文件使用loop选项
6) 目录挂载至目录,使用bind或-B,fstab配置文件分区类型为none
(4) mount 常用选项:
-t 指定文件系统类型
-r 只读挂载
-w 读写挂载
-n 不更新/etc/mtab,通过mount看不到挂载的文件系统,只有cat /proc/mounts
才可以看到
-a 自动挂载所有支持自动挂载的设备。定义在/etc/fstab中且支持auto功能
-L 以卷标指定的设备挂载
-U 以UUID指定的挂载设备
-B --bind 绑定一个目录到另一个目录
配置文件写法:
挂载windows的共享文件夹:
挂载loop设备:
注释:通过losetup查看loop设备与分区的关联情况,也可以手工指定哪一个loop设备关联某一个分区,losetup /dev/loop2 /testdir/partfile就是关联loop2和分区关联。可以写loop设备到目录的挂载,分区其实是关联了一个loop设备,在rhel6中有8个loop设备,在rhel7中是动态建立的
使用mknod创建block或者字符设备其中b是指block,7是loop设备的编号,67是第多少个loop设备,可以先查看一下系统的loop设备编号到多少
-o 常用选项(多个选项之间用逗号分割,在配置文件/etc/fstab中defaults的位置写)
async:异步模式,加载到内存的文件修改之后不会立即同步到硬盘,能提高性能
sync:同步模式,内存更改立即保存至文件,提高文件可靠性
atime/moatime: 目录访问时间戳,例如web的目录时间戳没必要更新时可禁用
auto/noauto: 是否支持自动挂载,auto时mount -a 自动可挂载
exec/noexec: 是否支持在文件系统上运行应用程序
dev/nodev: 因为设备文件也是文件,dev表示支持在此目录上建立dev设备
suid/nosuid: 是否支持suid和sgid权限
remount :重新挂载
ro:只读
rw:读写模式
user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载设备
defaults:相当于rw,suid,dev,exec,auto,nouser,async
2. 查看与卸载命令:因为一个文件系统有可能不止一个用户访问,所以有可能不能卸载
findmnt 查看挂载情况;
lsof 或fuser -v 查看访问指定文件系统的进程
终止所有正在访问指定文件系统的进程:fuser -km MOUNT_POINT
3. 永久挂载的配置文件/etc/fstab
/etc/fstab配置文件是在系统重启时文件系统挂载要读的配置文件,一旦写错可能致使操作系统无法启动,所以操作一定要小心!!!如在rhel6中挂载的设备名字写错,在检测的选项又设置了开机检测文件系统,那么此时在开机时将一直卡在输入ctrl+D或者输入root密码继续,此时可以输入密码重新挂载 / 文件系统,因为此时的 / 文件系统是只读的,需要重新挂载为可读可写的,然后编辑/etc/fstab 文件修改开机检测项为0,即不检测,然后继续,最后继续(ctrl +D)继续开机,等到开机检查哪一项除了问题,修改即可。rhel7不需要重新挂载 / 文件系统,可以直接编辑文件过程与rhel6类似,如果任然无法启动可以输入root密码,重新启动(systemctl reboot)
/etc/fstab 文件格式:
(1)要挂载的设备或伪文件系统:可以是设备名,UUID,LABEL,伪文件系统,目录等
(2) 挂载点:设备要挂载的目录,一般要放在/mnt下面
(3) 文件系统类型:一般的文件系统类型,还有none(目录)
(4)挂载选项default或-o指定的各种项
(5) 转储频率0表示不备份,1表示每天转储,2表示隔天转储
(6) 自检次序0表示不自检,1一般用来表示根文件系统自检顺序
4. 挂载的文件系统的查看:
df :查看文件系统的挂载情况,可以加-T选项,在设备名比较长可以对其显示,方便编写脚本对数据进行处理
du:查看目录的大小情况
mount:可以查看到包括目录等的挂载情况,但是在挂载时加-n就查看不到了
cat /proc/mounts 可以看到系统实时文件系统生效的挂载项
free :可以看到所有内存交换分区信息
cat /proc/swaps 可以看到交换分区信息,包括使用哪个分作作为交换分区
六、usb设备和CD-ROM的使用
1. usb设备的使用:
usb设备使用时可事先查看当前系统的分区和磁盘信息,方便知道插入usb设备后多了那些设备便于管理,usb设备同其它分区一样也需要挂载和卸载,数据写完后可以多次输入sync保证数据确实已经全部保存至usb设备
2. CD-ROM设备使用:
使用eject可以弹出光驱,eject -t弹入。linux中自带打包iso后缀文件的工具,如果是文件可以直接使用cp命令目标文件带有iso后缀即可,如果是目录,可以使用mkisofs 打包。iso文件挂载后可以使用
七、交换分区的建立与启用:
交换分区是作为内存的一个辅助分区,在内存吃紧时,交换分区会作为内存的一部分使用,但是效率比起内存来说会很低下,在一个硬盘分区时最好使用柱面较小的 柱面作为交换分区,因为在机械硬盘转速一定的情况下,越靠近外面的磁道,线速度越大,读取到的扇区越多,一定程度上有利于提高性能
交换分区需要在分区时指定分区类型为82,分区结束要同步磁盘,最后更改配置文件永久挂载,更改配置文件时可以给指定的分区指定优先级系统默认的优先级为 -1开始每增加一个分区,新增加的分区优先级就-1,并且优先级越大,优先级越高,手工指定的优先级可以是0-32768,在配置文件当中default 的位置写优先级pri=#
分区类型和挂载点都是swap,其他的设置与普通分区使用没有区别。最后改完配置,格式化为swap分区,并激活;
详细步骤如下:
八、磁盘配额:
quota就是限额的意思,对于linux来说,linux系统是多任务多用户的操作系统,如果一个用户使用磁盘过多,必然会导致其他用户使用磁盘额度收到限制,quota就是针对这种情况应用而生的,但是quota对配额时必须是一个独立的分区才可以,并且是仅仅针对普通用户有效,对于root是无效的。
下面将针对家目录不是某一个独立的分区,新建分区后对家目录进行迁移至独立分区。quota的限制既可以针对用户,也可以针对针对组来做,可以限制总文件的大小,也可以限制iNode数量来限制。在配置文件当中,有一个soft和hard,这两个值软限制值一般小于应限制值,当用户数据大于soft小于hard时,系统会在用户每次登陆系统都报警,提示用户清理磁盘,默认有一个宽限值7天,如果在这7天,用户都没有进行清理,soft的值将会取代hard值,用户将无法建立新文件。主要用途一般被用来例如网页服务器的每个人需要一定的空间。邮件服务器每个人邮箱都有固定的大小等。
具体示例:(关于分区格式化再次不在赘述格式化分区为/dev/sdb2)
或许在linux磁盘管理上面这只是冰山一角,需要你我共同努力!
原文链接:https://blog.51cto.com/jackcui/1843593
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通