尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Linux磁盘管理入门:从分区、格式化到挂载的完整指南

Linux磁盘管理入门:从分区、格式化到挂载的完整指南 1. 先把事情说清楚分区、挂载、查看到底在解决什么问题Linux磁盘管理这三件事听起来是三个独立操作实际上是一条完整链路我们拿到一块新硬盘第一件事是告诉系统这块盘的存在并查看它的状态然后用分区工具把存储空间划分成可管理的逻辑区域最后把分区格式化并挂载到目录树中让应用能真正写入数据。很多新手在这块容易卡住不是因为命令记不住而是没搞明白这三者之间到底是怎么协作的。简单打个比方磁盘分区就像在毛坯房里面砌隔断墙把一大块空间分成客厅、卧室、厨房格式化是给每个房间做硬装——铺地板、刷墙面让它能放东西挂载则是给每个房间装上门牌号让你知道走到哪个目录就进到哪个房间。没有门牌号装修得再好你也找不着、用不上。这套流程里查看贯穿始终买家具前先量空间入住之前再检查一遍都是它的事。这篇内容适合谁刚接触Linux服务器管理的同学在云主机或物理机上加过硬盘却发现系统不认的运维新人以及想系统梳理磁盘命令、避免日后在fstab上翻车的朋友。我会把每一步的原理、命令、常见坑都过一遍末尾还会附上我实际踩过的几个问题。掌握这些日常磁盘管理工作基本就够用了。2. 动手之前先摸清家底掌握磁盘基本信息2.1 查看命令家族图谱Linux下查看磁盘的命令不少但各有各的用途选对工具能省不少事。这里讲几个我日常用得最多的按使用频率排个序。lsblk是我最推荐新手优先掌握的命令它会以树状结构列出所有块设备让人一眼看清磁盘和分区之间的从属关系。它的输出简洁清晰不仅能显示设备名还能标出挂载点比一堆原始数据直观得多。blkid用来查看分区的文件系统类型和UUID这两项信息写fstab时是必需品。fdisk -l能显示磁盘和分区的详细参数适合查看分区的起始扇区、大小等底层信息。df -hT则专门看已经挂载好、正在使用的文件系统容量和类型日常监控磁盘占用率靠它。再有就是parted和/proc/partitions前者是高阶分区工具后者是内核直接暴露的磁盘设备列表排查底层问题时能派上用场。这几个命令各有所长新手可以这样记想快速看结构用lsblk想知道是谁在用磁盘看df想获取分区详情和UUID用blkid摸不清底层设备状态就翻/proc/partitions。2.2 读懂关键输出第一次在服务器上敲lsblk很多人会对那一串sda、sda1、sda2感到困惑。其实命名规则很直白sd开头的是SCSI/SATA/USB这类设备后面的小写字母a、b、c表示第几块物理磁盘数字1、2、3则是这块盘上的第几个分区。例如sda是第一块盘sdb是第二块sdb1就是第二块盘的第一个分区。NVMe固态硬盘的命名会换成nvme0n1p1这种格式nvme0表示控制器编号n1表示命名空间p1表示该命名空间下的第一个分区。看到这种名字不要慌对照规则拆开读就行。lsblk输出的SIZE列是这个分区的总容量TYPE列标出了设备类型disk代表整块物理磁盘part代表磁盘上的分区还有rom的光驱、lvm的逻辑卷等等。MOUNTPOINT列如果显示路径就说明这个分区已经挂载到了对应目录。举个例子看到└─sda1 500G /data意思就是第一块盘的第一个分区有500G空间当前挂载在/data目录下。df -hT的输出更好理解Filesystem一列可以用/dev/sda1这样的设备路径也可能是tmpfs这种内存文件系统或者overlay这类容器文件系统。Type列标出了文件系统类型Mounted on是挂载点地址。这里面最需要留神的是Use%列达到90%以上就该考虑清理或扩容了。2.3 查看时的几个实用技巧用lsblk -f可以同时显示UUID和文件系统类型省得再单独跑一遍blkid。这个参数组合在日常排查中出镜率非常高。df -h里的-h参数是human-readable的意思能以G、M这样的单位显示大小不带这个参数的话默认以1024字节为单位的块数显示数字大得令人头皮发麻。我习惯在加完新盘、挂载前先跑一遍lsblk -f确认分区是否识别、格式化是否成功再决定要不要写fstab。这个习惯帮我避开过好几次“挂载半天发现没格式化”的尴尬。查看磁盘还有一个隐藏技巧用lsblk -o NAME,SIZE,TYPE,FSTYPE,UUID,MOUNTPOINT可以自定义输出列想要哪些信息就留哪些输出干净整洁适合写脚本做巡检。注意fdisk -l在部分系统上需要root权限才能看到完整信息普通用户执行时可能只看到部分设备。想看详细参数又不想切root可以配合sudo执行。3. 磁盘分区给硬盘画格子前的关键决策3.1 选MBR还是GPT这是个问题分区前先要确定分区表格式。MBR全称是Master Boot Record主引导记录最大支持2TB磁盘主分区最多4个想再多就要把其中一个扩展分区拆成逻辑分区操作繁琐限制又多。GPT则是GUID Partition Table全局唯一标识符分区表属于新一代标准最大支持9.4ZB容量分区数量理论上没有限制还带了备份分区表头容错性更好。这几年新装的服务器无论物理机还是云主机基本都采用GPT格式了。遇到2TB以上大盘或者需要大于4个主分区的情况直接选GPT不要犹豫。UEFI启动模式下GPT更是事实标准。老旧的MBR只有在兼容老系统、老引导器这类极端场景里才会用到。我个人的选择标准很简单新环境一律GPT只有明确要跑某些老工具链才考虑MBR。3.2 用fdisk处理小于2TB的磁盘fdisk是老牌分区工具交互式操作适合处理2TB以下的磁盘。场景举例某公司给一台应用服务器加了一块500G数据盘识别出来是/dev/sdb计划分成一个区挂载到/data。操作流程如下。先进入交互界面sudo fdisk /dev/sdb输入n创建新分区fdisk会让你选分区类型GPT分区表下会有Partition number和First sector的提问因为这块盘全新一路回车选默认值即可。分区大小按需填例如200G代表200G直接回车则代表使用剩余全部空间。若这块盘还留有一部分空间备用可以用这个参数精确定界。输完w写入分区表退出。写入完成后新分区通常立即出现在/proc/partitions中。少数情况下内核没刷新可以用partprobe /dev/sdb通知内核重新读取分区表比重启系统稳妥得多。用lsblk验证一下就能看到新分区/dev/sdb1了。3.3 用parted处理大容量磁盘磁盘超过2TBfdisk就力不从心了此时用parted更为合适。parted既支持命令行非交互模式也支持交互模式脚本批量操作时用非交互模式非常方便。以一块8TB数据盘为例需要全部分给一个分区sudo parted /dev/sdc --script mklabel gpt sudo parted /dev/sdc --script mkpart primary 1MiB 100%第一行将磁盘的分区表设置为GPT第二行创建一个从1MiB开始、使用剩余全部空间的主分区。这里从1MiB而不是0开始是因为磁盘前部需要保留空间给分区表、对齐引导扇区这也是新版本fdisk默认的起始位置。接下来用parted /dev/sdc print查看分区是否创建成功。分区完成后格式化、挂载的流程就和其他分区一样了。从1MiB起其实还关系到分区对齐的问题。机械硬盘和SSD都有物理块概念起始扇区不对齐会造成性能下降和多余写入。现代磁盘的扇区多为4K物理扇区1MiB这个值能确保分区对齐到4K边界对于SSD尤其重要。如果发现之前手写的分区起始扇区不是8的倍数可以删了重建这钱省不得。4. 格式化与挂载从“一块盘”到“一个可用目录”4.1 文件系统怎么选分区只是把空间划分好想让Linux向里面写数据还得建立文件系统。每种文件系统的定位不尽相同ext4是老牌选手稳定性极高日志机制完善是绝大多数Linux发行版的默认选择通用性最强xfs在大型文件和高并发写入场景下表现出众是很多数据库和大数据集群的标配btrfs支持快照、压缩、校验和等高级功能适合对数据管理有更高要求的场景。此外还有面向SSD优化的f2fs以及跟ZFS生态绑定的OpenZFS等不过日常使用中ext4和xfs基本覆盖了九成需求。选型建议很直接拿不准就选ext4跨平台兼容性最好。数据量特别大、或者跑着对写入性能敏感的服务优先考虑xfs。特别说明一下xfs不支持缩小只有扩容能力容量规划时需要提前留足余量。btrfs这类新秀除非你明确用得上它的快照功能否则生产环境还是稳字当头。格式化命令以ext4为例sudo mkfs.ext4 /dev/sdb1mkfs是make filesystem的缩写后面跟的文件系统类型决定了具体调用哪个工具。格式化会彻底清空分区数据执行前务必确认盘符没有写错。我见过有人把/dev/sdb当成/dev/sdb1直接格式化整块磁盘的损失不可挽回。格式化过程中如果出现设备正忙的提示多半是分区已被挂载先卸载再操作。4.2 手动挂载的操作细节单次挂载用mount命令就能搞定。以之前500G的那块盘为例格式化完先创建挂载点目录再挂载sudo mkdir -p /data sudo mount /dev/sdb1 /data执行完df -h /data如果看到容量和分区大小一致就说明挂载成功。原生命令还可以用UUID挂载mount UUIDxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data这种写法在建fstab时更常见。再补充一个细节mount -o remount,rw /data可以重新挂载并修改挂载选项改错了配置想快速恢复时非常有用。挂载选项里有一堆参数可以按需开启比如noatime可以关掉访问时间更新减少不必要的磁盘写入对SSD的寿命和性能都有帮助defaults则是大多数场景下的默认组合。比如要以读写方式挂载并启用noatimesudo mount -o rw,noatime /dev/sdb1 /data4.3 开机自动挂载的终极方案fstabmount命令挂载完重启就失效了想让它每次开机自动挂载必须配置/etc/fstab文件。这也是Linux磁盘管理中最容易翻车的地方配置错了轻则分区不挂载重则系统启动进入emergency模式。fstab每行有六个字段空格或Tab分隔第一列是设备标识推荐填UUID而不是/dev/sdb1这类设备路径因为设备盘符在重启后可能变化而UUID相对稳定第二列是挂载点目录第三列是文件系统类型第四列是挂载选项一般填defaults即可第五列是dump备份标记0表示不备份我们一般填0第六列是fsck检查顺序根文件系统通常填1其他填0或2其中0代表开机不做磁盘检查。给上面的/data分区写一个配置项先查UUIDsudo blkid /dev/sdb1拿到UUID后写入fstabUUIDxxxx-xxxx-xxxx-xxxx /data ext4 defaults 0 2写完配置别急着重启用一条命令测试配置是否正确sudo mount -a这条命令会按照fstab内容将尚未挂载的分区全部挂载一遍。执行后如果没有任何报错再用df -h确认挂载成功基本就稳了。凡是提示错误或者挂载不上重新检查UUID、文件系统类型字段改好再试。如果出现“wrong fs type, bad option, bad superblock on /dev/sdb1”这类报错优先检查第三列的文件系统类型是否填对了——ext4写成了xfs挂载铁定失败。注意修改fstab前最好先做个备份sudo cp /etc/fstab /etc/fstab.bak。摔过跟头的人都知道有备份才能在出错时快速恢复。5. 实战复盘一个完整的磁盘管理案例拿一个具体场景走一遍完整流程。某应用服务器的数据盘空间告急运维人员新加了一块1TB的NVMe盘识别为/dev/nvme0n1要求挂载到/srv/appdata作为应用数据目录。第一步查看新盘状态。lsblk # 输出中可以看到 nvme0n1 整块盘下面没有任何分区也没有挂载点第二步直接用parted创建GPT分区。虽然1TB用fdisk也能干但统一用parted可以避免以后换大容量盘时还得换工具的麻烦sudo parted /dev/nvme0n1 --script mklabel gpt sudo parted /dev/nvme0n1 --script mkpart primary 1MiB 100% sudo partprobe /dev/nvme0n1第三步格式化。应用目录通常有很多小文件写入这里选了ext4稳定性至上。sudo mkfs.ext4 /dev/nvme0n1p1第四步挂载并设置开机自动挂载。sudo mkdir -p /srv/appdata sudo mount /dev/nvme0n1p1 /srv/appdata sudo blkid /dev/nvme0n1p1 # 拿到UUID后写入 /etc/fstab echo UUIDxxxx-xxxx-xxxx-xxxx /srv/appdata ext4 defaults 0 2 | sudo tee -a /etc/fstab sudo mount -a第五步验证。df -h /srv/appdata lsblk -f看到新分区容量正常显示在挂载点下验证通过收工。整个过程不超过五分钟但每一步背后都有对应原理出了问题时这些原理就是排查的线索。6. 常见问题与排查技巧实录6.1 卸载分区时提示“target is busy”卸载一个正在使用中的分区系统大概率会提示“target is busy”。这多半意味着有进程正在读写这个分区上的文件。排查思路很清晰找到占用进程处理完再卸载sudo fuser -mv /mnt/data这个命令会列出正在使用该目录的进程PID。拿到PID之后确认可以终止就执行kill -9或者先停掉相关服务再执行卸载。还有一种暴力方式叫懒卸载sudo umount -l /mnt/data加了-l参数系统会立刻从目录树中摘除该挂载点等所有占用进程结束再真正清理底层的挂载关系。这个操作适合文件系统本身无故障、只是有进程占用的场景。注意它并不能解决文件系统本身的问题如果是I/O错误导致的busy懒卸载也救不了。6.2 fstab配置出错导致系统进入emergency mode这可以说是Linux运维圈最经典的翻车事故之一。fstab写错了系统启动时发现某个分区挂载不上就会进入emergency mode。此时系统处于只读状态处理起来要格外小心。处理分几步输入root密码进入维护模式执行mount -o remount,rw /把根分区切成读写模式然后查看fstab内容排查问题字段。先看UUID对不对再看设备路径存在不存在再看文件系统类型匹配不匹配然后执行mount -a测试。改好之后直接reboot验证。已故障的挂载项可以在对应行首加#注释掉先保证系统正常启动再回头慢慢排查。一定要记得fstab修改后要做mount -a测试这是规避此类事故最有效的手段。6.3 系统重启后分区没有自动挂载fstab没写错但重启后分区就是没挂载这种情况一般有两个原因第一fstab里用的是/dev/sdb1这种设备路径而重启后盘符变了。比如之前是sdb加了一块新盘之后变sdc了系统按旧盘符找当然找不到。第二UUID写的不对或者复制的时候少了一位。这种问题排查方法还是靠blkid核对设备真实UUID然后统一改成用UUID挂载。同理如果用的是设备路径这类写法维护多盘机器时还会遇到插拔顺序导致盘符调换的问题。杜绝这个隐患就一条原则fstab只认UUID。6.4 磁盘空间明明没满却写不进文件遇到这个现象先看inode是不是先满了。df只看得到空间占用但文件系统还得有足够的inode来记录文件元数据。小文件特别多的目录最容易把inode耗尽。df -i /dataIUse%这一列如果接近100%就是inode耗尽。解决方案也很直接清掉大量不必要的小文件或者重新规划分区时给文件系统预留更多inode。部分文件系统支持动态分配inode但ext4这类在格式化时就已经划定了inode数量规划容量时要把这个因素考虑进去。6.5 误删分区或格式化之后的挽救误操作之后不要慌更不要继续写入数据。若只是删除了分区表可以选择testdisk这类工具尝试恢复分区表。若是格式化了extundelete可以尝试找回部分文件但这完全取决于运气和后续写入量。最稳妥的兜底方案还是备份备份再备份。无论什么场景重要数据必须异地备份这是磁盘操作最底层的原则。7. 那些命令行之外的经验之谈说几个实际运维中总结出来的体会。新盘上线前务必要在非生产环境做一次完整的格式化、挂载、重启验证。这样能提前暴露盘符不稳定、fstab写错等的隐患。真到生产环境动手心理压力完全不同操作容易变形。分区命名上给服务器做规范。单盘用sda数据盘按用途挂载到明晰的目录比如/data、/backup、/logs。机器多了之后能靠目录名一眼识别每个分区的用途排查问题时能省很多功夫。有条件的话把磁盘巡检自动化。写一个简单的脚本定时执行df -h和df -i的检查空间或inode使用率超过阈值就告警。磁盘是慢变量等到发现问题往往已经晚了自动巡检就能在甜点时间介入。最后分享一个小技巧对大分区做格式化之前先用wipefs -a /dev/sdb1清理掉旧的签名信息。旧文件系统残余会让新文件系统在识别时出现莫名其妙的问题这条命令能把磁盘环境彻底清干净后续挂载顺利得多。磁盘管理是Linux入门的必修课也是生产事故的高发区。多动手实践、多复盘翻车经历经验都是这样一点点累积起来的。遇到看不懂的输出不要怕顺着lsblk、blkid、df这几条主线查下去问题一般跑不掉。
返回列表