ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

虚拟机新增硬盘挂载全步骤:分区格式化与fstab配置详解

虚拟机新增硬盘挂载全步骤:分区格式化与fstab配置详解 给虚拟机加一块新硬盘再挂载到系统里这套操作我这两年少说做过几十次每次写文档或者带新人发现大家卡住的点其实不在“敲命令”而在“不知道每一步为什么这么做”。虚拟机、硬盘、挂载这三个词拆开看都不复杂但一旦放到生产环境里就会出现“加完盘系统里看不到”“fstab写错开机进不去”“盘符重启后变了”这些闹心问题。这篇文章就把从VMware里加盘、进系统分区、格式化、临时挂载、开机自动挂载这一整套链路完整走一遍每一步我都会解释背后的原理和取舍适合刚接触虚拟化或者Linux服务器维护的读者参考。1. 为什么需要单独挂一块硬盘先把需求搞清楚1.1 加盘和扩分区是两条完全不同的路很多人一开始来找我开口就说“虚拟机硬盘不够用了帮我挂载一下”。但实际上他可能需要的只是把原有的系统盘扩大比如根分区从50G扩到100G。这种情况根本不需要加新硬盘直接在虚拟化平台里把磁盘扩容然后在系统里扩展分区就够了。而“挂载新硬盘”对应的是另一种场景虚拟机里插入一块全新的、独立的虚拟磁盘然后在Linux里把它格式化成独立的文件系统挂载到一个新目录上作为数据盘单独使用。这两个需求不能搞混。如果机器上已经有数据你在虚拟化层给原虚拟磁盘扩容之后做的是resize2fs这类操作如果你非要新加一块盘然后试图把它“合并”到根分区那是做LVM才有的玩法普通分区表下是做不到的。所以第一步永远是先问清楚是原始盘不够大还是想要一块独立的数据盘这篇文章讲的是后者也就是新增一块独立硬盘然后挂载。1.2 挂载这事的底层逻辑在Linux里“挂载”这个词对应的英文是mount本质就是把一个块设备上的文件系统接入到当前目录树里的某个节点上。你可以把块设备想象成一个装满货物的仓库挂载点就是仓库门口的一块牌子有了牌子你才可以从门进去拿东西。没有挂载就算硬盘已经在系统里了你也看不到里面的文件因为文件系统还没有和目录树建立联系。这套逻辑在虚拟机里和物理机完全一致。虚拟硬盘对虚拟机来说就是一块“真实”的磁盘Linux内核通过驱动识别它然后你再用分区工具、格式化工具、mount命令来操作它。虚拟机的好处是加盘比物理机方便得多——不需要拆机箱、不需要插线在管理界面里点两下就多了一块磁盘这也是大家平时最容易拿来练手的原因。我见过不少新手用虚拟机练挂载练熟了之后再去碰物理机、NAS、开发板发现整套思路完全通用这也是我推荐所有人都拿虚拟机练习的原因。2. 给虚拟机加硬盘从管理界面到系统识别2.1 VMware中创建一块新的虚拟硬盘我用得最多的还是VMware Workstation操作路径很直接选中虚拟机右键“设置”在“硬件”选项卡里点“添加”选择“硬盘”然后一路下一步。中间会让你选择磁盘类型和置备方式这里有几个细节值得说一下。磁盘类型默认推荐SCSI如果你有特殊需求也可以选SATA或者NVMe。很多人不理解这几种类型的区别其实在VMware里它们最终都是落在宿主机上的一个vmdk文件接口类型影响的主要是虚拟机里的设备名SCSI盘在Linux里通常显示为/dev/sda、/dev/sdbSATA盘在部分环境里会显示为/dev/sdaNVMe盘则会变成/dev/nvme0n1这种名字。对普通使用来说性能差异在虚拟化层并没有物理机那么明显但SCSI兼容性最好所以大多数情况下选SCSI就够了。置备方式常见有“精简置备”和“厚置备”精简置备是按需占用宿主机空间适合学习实验厚置备会在创建时一次性分配空间性能更稳定适合生产库。新手做实验选精简置备即可。还有一个非常容易踩的坑在VMware里加盘之后如果忘了勾选“打开电源时连接”或者控制器选得不对进系统后多半看不到这块盘。另外如果你给虚拟机打了快照快照时刻之后新加的盘和快照没有关系回滚快照并不会删掉新硬盘但新硬盘上的数据也不会进快照——这个逻辑要在心里有数。2.2 进系统后如何确认磁盘被识别加完硬盘进入虚拟机里的Linux系统第一件事就是确认系统是否已经看到了这块盘。最常用的命令是lsblk和fdisk -l。lsblk你能看到类似下面的输出NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 49G 0 part / sdb 8:16 0 100G 0 disk这里sda是原来的系统盘sdb就是新加的100G硬盘。如果看到sdb说明虚拟化层和内核都识别成功了。如果lsblk里没有先别急着重启试一下扫描SCSI总线echo - - - /sys/class/scsi_host/host0/scan echo - - - /sys/class/scsi_host/host1/scan这条命令的意思是让系统重新扫描各SCSI宿主模拟“热插拔检测”。有些虚拟化平台添加磁盘后不需要重启但Linux内核可能没有自动感知这个扫描命令就能派上用场。如果扫完还是看不到再考虑重启虚拟机大概率就能识别了。顺便说一下设备命名的规律。Linux里sd开头的设备是SCSI/SATA硬盘按发现的顺序排序为sda、sdb、sdcNVMe盘则是/dev/nvme0n1其中0表示控制器编号n1表示命名空间编号所以/dev/nvme0n1p5表示第一个NVMe控制器的第一个命名空间上的第5个分区。看到这种名字别慌规律就在这。3. 分区、格式化和挂载核心步骤实录3.1 创建分区fdisk与GPT分区表系统识别到sdb之后进入分区环节。新硬盘上没有任何分区表你可以选择直接用整块盘mkfs也可以先分区再格式化。我的建议是分区虽然多了一步但后续灵活性更高。比如同一块盘上既想放数据又想加一个交换分区有分区表会清晰得多将来如果想用parted调整也更有余地。分区工具首选fdisk现在的主流版本已经支持GPT分区表。磁盘容量超过2T时必须用GPT否则只能用MBR而MBR单个分区上限大约是2T。新硬盘默认往往是没有任何标签的所以执行fdisk /dev/sdb进入交互界面后输入g创建新的GPT分区表然后输入n新建分区。分区编号默认1起始扇区默认就行结束扇区如果要用整块盘直接回车接受默认值。最后输入w写入并退出。整个过程交互式很友好如果输错了在写盘之前按CtrlC或者q退出就行不会对硬盘造成任何影响。这里要特别强调fdisk里操作的对象是整块盘/dev/sdb不是/dev/sdb1。对分区进行操作用fdisk /dev/sdb进入然后选择分区号对已经存在的分区进行格式化才用到/dev/sdb1。这个细节我见过很多人搞反整个盘被写了分区表还浑然不觉。分区写完后如果系统提示需要重新读取分区表可以执行partprobe /dev/sdbpartprobe的作用是让内核重新读取分区表不需要重启。3.2 格式化mkfs.ext4的参数怎么选分区建好之后接下来就是创建文件系统也就是常说的“格式化”。我平时用得最多的文件系统是ext4原因很朴素兼容性好、成熟稳定、大部分Linux发行版默认支持而且出问题时修复工具多。如果你对性能有更高要求可以考虑xfs尤其适合大文件、高并发场景但它们之间没有绝对优劣在虚拟机做实验ext4足够。格式化命令mkfs.ext4 -m 0 -L data /dev/sdb1解释一下这两个参数。-m 0表示把预留给root用户的块比例设为0默认是5%。在数据盘场景下这5%是给root防止磁盘写满导致系统无法启动用的。系统盘保留5%合理但如果是纯数据盘很多人会设为0把空间都释放出来。-L data是给文件系统打一个卷标名字可以随便起后续用blkid查看时会显示LABELdata方便辨认。格式化是对这块分区写入全新的空文件系统里面旧数据会全部“变不见”。如果你是从旧机器上拆下来的盘里面可能有旧分区表或者旧文件系统建议先擦掉元数据再格式化免得后面挂载时出现怪异问题wipefs -a /dev/sdb1 wipefs -a /dev/sdbwipefs会清除分区表签名和文件系统签名执行后再mkfs干净利索。注意这条命令很危险必须确定盘符没错否则数据直接没。3.3 挂载与挂载点的选择格式化完成最后一步就是把这块新文件系统挂载到某个目录。挂载点就是你想让这块盘“出现”在哪个目录下。建议用有意义的名字比如/data、/opt/data、/mnt/backup不要随手挂到根目录下。先建目录再挂载mkdir -p /data mount /dev/sdb1 /data挂载之后用df -hT验证df -hT /data正常你会看到类似输出Filesystem Type Size Used Avail Use% Mounted on /dev/sdb1 ext4 98G 24M 98G 1% /data到这里这块盘的“临时挂载”已经完成了。但注意这也只是临时挂载——重启虚拟机后这个挂载关系会丢失系统不会自动帮你把/data接回去。如果想要永久生效必须配置/etc/fstab这就是下一节的重点。顺便提一个很多人栽过的坑如果挂载目标目录里原来有文件比如你挂到/home下面而/home原来有数据挂上后这些文件并不会删除只是被新文件系统“盖住”了你在这个目录下只能看到新硬盘的内容。等你卸载之后原文件又会重新出现。所以挂载前务必确认挂载点是空目录或者先把原文件挪走。4. 开机自动挂载与fstab配置4.1 /etc/fstab的正确写法要让系统每次开机都自动挂载这块新盘需要修改/etc/fstab文件。这个文件是Linux启动时读取的挂载配置表每一行描述一个文件系统的挂载方式。先看一行典型的配置UUIDabcdef01-2345-6789-abcd-ef0123456789 /data ext4 defaults,nofail 0 2六个字段从左到右分别是要挂载的设备、挂载点、文件系统类型、挂载选项、dump备份标志、fsck检查顺序。设备字段我最推荐用UUID而不是/dev/sdb1。原因很简单Linux的设备名可能因为启动顺序、内核版本、硬件枚举顺序而发生变化。你今天看到的是sdb下次启动可能变成sdc但UUID是文件系统创建时生成的唯一标识只要文件系统没被重建它的UUID就不会变。用UUID能最大程度避免“开机找不到盘”的尴尬。拿到UUID的方法是blkid /dev/sdb1输出类似/dev/sdb1: UUIDabcdef01-2345-6789-abcd-ef0123456789 TYPEext4把这一行的UUID复制到fstab里即可。挂载选项defaults的意思是使用默认选项包含读写、异步、设备、执行等常用组合。对于普通数据盘defaults,nofail是很好的选项组合其中nofail的作用是万一这块盘设备不存在系统不会因为fstab里有它而进入紧急模式而是跳过报错正常启动。这个选项在虚拟机场景特别有用因为虚拟磁盘存在被误删、被断开连接的可能。最后一个字段2表示开机时对根分区之外的文件系统做fsck检查的顺序。根分区通常填1其他盘填2。如果你不想在开机时做检查可以填0。4.2 验证配置mount -a是保命技能修改fstab之后最忌讳的是直接重启——万一写错了系统可能直接进入紧急模式到时候还得手工救援。正确做法是先执行mount -amount -a的意思是挂载/etc/fstab中所有尚未挂载的文件系统。它会逐行解析fstab并尝试挂载如果有错误会立刻报出来。这一步没报错再执行df -hT /data确认挂载成功然后重启验证一次。重启后还能看到/data存在且内容正常这整套配置才算真正完成了。在较新的systemd系统上还可以用findmnt --verify --verbose这条命令专门检查fstab配置的语法和可挂载性输出比mount -a更详细适合用来排查潜在问题。我在生产环境习惯两条命令都跑一遍确保万无一失。4.3 fstab写错了怎么办紧急模式恢复指南人总有手抖的时候fstab写错了、U盘拔了忘改配置、UUID抄错了一位重启后系统就会卡在“紧急模式”或者“维护模式”。这时候不要慌操作方法其实很简单。系统进入紧急模式后根文件系统通常是只读的你什么都改不了。先重新挂载根为读写mount -o remount,rw /然后把fstab里写错的那一行注释掉或者修正UUID保存退出重启即可。如果你不知道错误出在哪一行也可以把fstab中新增的那几行全部注释掉先进系统再说。这里还有一个细节很多人发现vim /etc/fstab后可以写但保存时报错多半就是因为根文件系统还是只读状态。先执行mount -o remount,rw /再编辑就不会有这个困扰。这个操作在真实服务器上也一样通用物理机、虚拟机都管用。5. 常见问题与排查技巧实录5.1 热添加后看不到新磁盘这是最常被问到的问题。在VMware里点了“添加硬盘”进到虚拟机里lsblk却看不到。排查步骤按顺序走确认虚拟机设置里确实勾选了“连接”这个盘并且控制器类型和虚拟机兼容性匹配。用fdisk -l看一下注意lsblk可能不显示没有分区表的裸盘实际上新版本lsblk会显示旧版本不一定。执行SCSI总线重扫命令修复热插拔识别问题。最后一个办法是重启虚拟机。虚拟化层加的盘只要配置没消失重启后一定能看到。另外如果你用的是老版本Linux内核对热插拔的支持可能不完整重启是最省事的方案。别为了“面子”非得热添加生产环境加盘我通常建议先关机再操作稳妥。5.2 挂载后目录内容“消失”了很多新手第一次挂载时会发生这种情况新建了一个/data目录里面放了几个测试文件然后挂上新硬盘再进去发现文件全没了以为数据被删了。其实没有这些文件还在原文件系统里只是被新挂载的文件系统遮住了。Linux的挂载点本身就是原目录树的一个节点挂载新文件系统后这个节点指向了新文件系统的根目录原来的文件和目录仍然存在于底层只是不可见了。所以正确流程是先建空目录确认目录下没有需要保留的内容再挂载。如果确实有文件在里面且不想丢先拷贝到其他目录再挂载或者临时挂新盘到别的地方把文件拷回来再重新挂载。5.3 权限、SELinux和性能相关新格式化并挂载的数据盘默认根目录属主是root普通用户进/data能ls但写不了文件。解决办法很简单chown user:group /data如果你的场景是多人共享可以建一个共享组然后把目录权限设置为chmod 775或者2770。这里提醒一句这些权限设置是对挂载点目录本身的不是fstab里能配置的东西。如果你希望每次挂载都自动带上特定属主可以在fstab的options里写uid1000,gid1000但ext4普遍不推荐直接chown更直观。在有SELinux的发行版比如CentOS/RHEL家族上新挂载的文件系统默认可能没有正确的SELinux上下文导致某些服务比如httpd、nginx读写文件时报“Permission denied”。排查关键词是avc用ausearch或者grep avc /var/log/audit/audit.log能找到相关日志。简单粗暴的解法是执行restorecon -Rv /data让系统按照目录路径的默认策略重置上下文。养成习惯遇到权限诡异先看SELinux再怀疑属主和权限位。5.4 数据盘扩容LVM可能是更好的选择说到性能和数据扩展我补一个对生产环境更友好的思路。如果虚拟机准备长期使用并且在可预见的未来磁盘空间还要再扩那么一开始就别用普通分区ext4直接用LVM更合理。LVM逻辑卷管理的理念是把多块物理硬盘“池化”成卷组再从卷组里划分逻辑卷给系统用。将来空间不够加一块新盘执行pvcreate、vgextend、lvextend逻辑卷就变大了整个过程不需要卸载、不需要重新格式化比挂一块新盘再挂到新目录要顺滑得多。当然这篇文章讲的是最基础的“新盘挂载”LVM是后续进阶玩法。如果你只是实验环境或者临时数据盘普通的fstab挂载完全够用。但如果你是在搭正式的服务器我强烈建议提前规划好LVM否则等数据存满了再迁移痛苦程度翻倍。6. 实际踩坑后的个人体会整套流程走下来我自己最大的感受是挂载本身不复杂难的是理解整个链路每个节点的职责。虚拟化层负责把一块虚拟盘交给客户机内核负责把这块盘映射成块设备分区表负责给设备划分区域文件系统负责整理这些区域里的数据最后mount把文件系统和目录树接通。每一步少做或者做错后面都会以各种不可理喻的方式报错。再分享一个小技巧我每做完一次虚拟机硬盘挂载都会顺手把命令记录到自己的笔记里特别是blkid的UUID和fstab的新增行。万一哪天虚拟机克隆、迁移或者盘符漂移对照笔记能很快定位是哪个环节出了问题。还有实验之前一定要先确认这台虚拟机有没有打快照加了盘、格了盘再后悔可就麻烦了。给新手的建议是在自己的VMware里开一台最小化的Linux虚拟机按这篇文章的步骤做一遍加盘、fdisk、mkfs、mount、写fstab、重启。操作成本极低但收获很大因为这块盘的整个生命周期你都亲手摸过一遍以后遇到真实服务器上的类似问题就不会慌。挂载这件事练一次就会了。
返回列表