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

资讯详情

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

VMware虚拟机Linux磁盘挂载全攻略:从分区到持久化配置

VMware虚拟机Linux磁盘挂载全攻略:从分区到持久化配置 1. 从一次数据迁移的“事故”说起为什么需要手动挂载磁盘那天下午我正忙着把一台老旧测试服务器上的几个项目归档数据迁移到新的虚拟机里。数据量不小有几十个G我图省事直接在VMware Workstation里给这台Linux虚拟机添加了一块新的、容量更大的虚拟硬盘心想这不就跟给电脑加个移动硬盘一样简单吗结果启动系统打开文件管理器傻眼了——新加的硬盘根本看不见。df -h命令只列出了原来的系统盘lsblk命令倒是能看到多了一个叫sdb的设备但它下面空空如也没有像sda1那样挂载到某个目录比如/或/home。那一刻我才真切地意识到在Linux世界里给虚拟机“插上”一块新硬盘只是完成了硬件层面的识别。操作系统并不会自动帮你格式化、分配盘符在Linux里是挂载点并投入使用。这就像你买了一块全新的空白移动硬盘插到电脑上系统能识别到有这个硬件设备但你必须先进行分区、格式化然后手动“分配一个盘符”即挂载才能往里面存东西。这个认知对于从Windows环境转过来的朋友尤其重要。在Windows下给虚拟机添加一块新虚拟磁盘进系统后很可能在“磁盘管理”里就能看到一块“未分配”的空间点几下鼠标初始化、新建简单卷、格式化一个新盘符如D盘、E盘就自动出现了。Linux特别是服务器环境下的Linux把这个过程拆解得更加底层和清晰每一步都需要你通过命令来明确控制。这种“不自动”的特性初看麻烦实则给了管理员极大的灵活性和掌控力尤其是在服务器、虚拟机这种需要精确配置的环境里。所以无论你是需要在VMware虚拟机里扩容存储空间还是添加一块独立的磁盘来存放数据库、日志或备份文件“磁盘挂载”都是你必须掌握的技能。它不仅仅是输入一两条命令更是一套包含设备识别、分区规划、文件系统创建、持久化配置在内的完整流程。接下来我就结合自己无数次的操作把这个流程掰开揉碎了讲清楚让你不仅能搞定一次挂载更能理解背后的“所以然”。2. 动手前的侦察识别虚拟机中的新磁盘设备在开始任何操作之前我们得先搞清楚系统里现在有哪些“存货”。这就像修车先打开发动机盖看看一样。这里有几个关键命令它们从不同维度告诉你磁盘信息。最常用也最直观的命令是lsblklist block devices的缩写。直接在终端输入它lsblk你会看到一个树状结构的输出非常清晰。通常你的第一块虚拟硬盘会被识别为sda它下面的sda1、sda2等就是这块硬盘上的分区。如果你刚刚在VMware里添加了一块新硬盘那么很可能会看到一个sdb而且它下面没有子项这表示它是一块完整的、未分区的原始磁盘。NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi ├─sda2 8:2 0 1G 0 part /boot └─sda3 8:3 0 48.5G 0 part / sdb 8:16 0 100G 0 disk从上面这个模拟输出可以明确看到sda是50G的系统盘已经被分成了三个区并挂载到了系统上。而sdb是一块全新的100G硬盘TYPE是disk没有MOUNTPOINT挂载点说明它还没被系统使用。另一个更老牌、信息更详细的命令是fdisk -l需要root权限。使用sudo fdisk -l会列出所有磁盘的详细信息包括磁盘的标识符、大小、扇区数以及分区表信息。对于新磁盘它的输出里会明确显示“Disk /dev/sdb doesn‘t contain a valid partition table”磁盘/dev/sdb不包含有效的分区表。注意在操作磁盘分区时务必反复确认你正在操作的是目标磁盘比如sdb而不是系统盘sda。误操作系统盘会导致数据丢失甚至系统无法启动。一个稳妥的方法是在VMware添加新硬盘后先记下你设置的大小比如100G然后用lsblk或fdisk -l核对找到对应大小的新磁盘设备名。为什么是sda,sdb这是Linux内核的磁盘命名规则。sd代表SCSI或SATA类型的磁盘在虚拟机中虚拟磁盘通常也模拟为此类。后面的字母a,b,c... 按识别顺序分配。数字1,2,3... 代表该磁盘上的分区号。所以sdb1就表示第二块磁盘上的第一个分区。3. 为新磁盘规划“房间”分区与文件系统创建识别出/dev/sdb后我们就要开始在这块“空白画布”上作画了。这一步包含两个核心动作分区和创建文件系统。你可以把分区理解为给一块大土地划分不同的区域比如住宅区、商业区而创建文件系统就是在划分好的区域里铺设具体的地砖、规划道路比如ext4, XFS格式让操作系统知道怎么在里面存、取文件。3.1 使用fdisk进行分区fdisk是一个经典的命令行分区工具交互式操作适合新手。我们对/dev/sdb进行操作sudo fdisk /dev/sdb命令执行后会进入fdisk的交互界面。接下来是一系列指令输入n来创建一个新分区。它会问你是主分区p还是扩展分区e。对于第一块分区通常选p主分区。选择分区号直接回车用默认值1即可。设置第一个扇区直接回车从磁盘起始位置开始。设置最后一个扇区这决定了分区大小。如果你想用整块磁盘直接回车即可如果想分多个区这里可以输入类似20G来创建一个20G的分区。分区创建好后输入p可以打印当前的分区表确认一下。关键一步输入w将分区表写入磁盘并退出。如果输错了想放弃就输入q不保存退出。完成之后再用lsblk查看你会发现/dev/sdb下面多了一个/dev/sdb1这就是我们新创建的分区。实操心得关于分区表类型在fdisk交互界面里你还可以输入g来创建一个新的GPT分区表或者输入o创建旧的MBR分区表。对于小于2TB的磁盘两者区别不大。但对于现代系统和大容量磁盘比如你加了一块2TB的虚拟盘强烈建议使用GPT。GPT支持更多分区更健壮。在fdisk中输入g即可。如果你看到/dev/sdb显示为dos即MBR且磁盘较大可以先输入g转换成GPT再进行分区操作。3.2 使用parted处理大磁盘与高级分区对于超过2TB的磁盘或者你想进行更灵活的分区比如创建LVMparted是更好的选择。它支持GPT分区表且能处理更大容量。这里简单演示用parted创建单个分区sudo parted /dev/sdb在(parted)提示符下输入mklabel gpt来建立GPT分区表如果是新盘。输入mkpart primary ext4 0% 100%来创建一个占用整个磁盘空间的主分区文件系统类型先指定为ext4这只是个标签实际格式化的步骤在下一步。输入print查看分区信息。输入quit退出。3.3 在分区上创建文件系统分区只是划好了地盘我们还需要在上面“铺路建房”即创建文件系统。最常用的Linux文件系统是ext4它稳定、兼容性好。对于/dev/sdb1分区我们这样格式化sudo mkfs.ext4 /dev/sdb1这条命令会在/dev/sdb1上创建一个ext4文件系统。你会看到一些输出信息显示正在创建inode表、写入超级块等。完成后这个分区就可以被挂载了。文件系统选型小贴士ext4通用选择适合大多数场景如数据盘、家目录。XFS特别适合处理大文件和高并发IO比如数据库存储、视频处理。创建命令是sudo mkfs.xfs /dev/sdb1。如果你计划在这个分区上安装Windows虚拟机或者需要在宿主机和虚拟机之间更方便地共享超大文件可以考虑格式化为ntfs需要安装ntfs-3g包或exfat。但在纯Linux环境内部使用ext4或XFS是更原生的选择。4. 让系统识别并使用新空间挂载与持久化配置创建好文件系统的分区现在可以“挂载”了。挂载就是将一个存储设备如/dev/sdb1关联到目录树中的一个空目录称为挂载点这样通过访问这个目录就能读写该设备中的数据。4.1 临时挂载测试与验证我们先创建一个目录作为挂载点。通常自定义的数据盘会挂载到/mnt或/media下你也可以在根目录下新建一个比如/data。sudo mkdir /data然后执行挂载命令sudo mount /dev/sdb1 /data现在使用df -h命令查看磁盘使用情况你应该能看到/dev/sdb1已经挂载到了/data目录并且显示了它的容量、已用空间和可用空间。你也可以进入/data目录创建、删除文件来测试。这种通过mount命令进行的挂载是临时性的。一旦系统重启这个挂载关系就会消失你需要重新执行mount命令。显然这对于需要长期使用的数据盘来说是不现实的。4.2 持久化挂载编辑/etc/fstab文件为了让系统在每次启动时自动挂载磁盘我们需要修改/etc/fstab文件系统表文件。这个文件定义了系统启动时需要自动挂载的所有文件系统。在编辑这个文件之前务必备份并且要格外小心错误的配置可能导致系统无法启动。首先我们需要获取新分区/dev/sdb1的UUID全局唯一标识符。使用UUID来标识设备比使用/dev/sdb1更稳定因为设备名sdb可能会因为添加或移除其他硬盘而发生变化比如变成sdc但UUID是唯一的、固定的。sudo blkid /dev/sdb1输出会类似于/dev/sdb1: UUIDa1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8 TYPEext4记下这个UUID的值。接下来编辑/etc/fstab文件sudo vim /etc/fstab在文件末尾添加一行新的配置。格式如下UUIDa1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8 /data ext4 defaults 0 2我来解释一下每一列的含义第一列设备标识这里我们填刚才查到的UUID。你也可以直接写/dev/sdb1但如前所述用UUID更可靠。第二列挂载点我们创建的目录/data。第三列文件系统类型我们格式化的类型ext4。如果是XFS就写xfs。第四列挂载选项defaults是一个复合选项包含了rw读写、suid、dev、exec、auto、nouser、async等常用设置。对于数据盘用defaults通常就够了。如果你有特殊需求比如希望挂载为只读可以写ro。第五列dump备份标志0表示不使用dump工具进行备份。通常设为0。第六列fsck检查顺序0表示不检查。根分区/通常是1表示最高优先级检查。其他数据分区可以设为2表示在根分区检查完后进行检查。设为0也可以。添加完成后保存并退出编辑器。4.3 验证fstab配置并设置目录权限在重启之前强烈建议先用以下命令测试/etc/fstab配置是否正确sudo mount -a这条命令会尝试挂载/etc/fstab中所有尚未挂载的设备。如果没有报错再用df -h看看/data是否已经成功挂载。这是避免配置错误导致系统启动失败的关键一步。最后别忘了设置挂载点目录的权限以便你的用户能够访问。假设你的用户名是yourusernamesudo chown -R yourusername:yourusername /data这样/data目录及其未来所有子文件的所有者都变成了你可以自由读写了。至此一个完整的VMware虚拟机磁盘挂载流程就结束了。重启虚拟机你的新磁盘也会自动挂载到/data可以永久使用了。5. 进阶场景与深度排坑指南掌握了基本流程我们来看看一些更复杂或容易出问题的场景。5.1 场景扩容现有磁盘而非新增有时候我们不是加新盘而是觉得原来的系统盘比如/dev/sda空间不够了想给它扩容。这在VMware里分两步虚拟机层面扩容关闭虚拟机在VMware设置中直接修改硬盘容量比如从50G调到100G。然后启动虚拟机。操作系统层面扩容这时在系统里用lsblk看/dev/sda的容量确实变大了但/dev/sda3假设是你的根分区还是原来的大小。多出来的空间是“未分配”的。接下来就需要使用分区工具如growpart或parted先扩展分区表让分区覆盖所有空间然后再使用文件系统扩容工具如resize2fs用于ext4xfs_growfs用于XFS来扩大文件系统。这是一个有风险的操作务必先备份重要数据整个过程需要卸载分区或在救援模式下进行比挂载新盘复杂得多。5.2 常见坑点UUID冲突与fstab报错问题描述系统启动时卡住报错如“/dev/sdb1 does not exist”或“UUIDxxxx not found”进入紧急模式emergency mode。根因分析设备名变更你之前在/etc/fstab里写的是/dev/sdb1但某次启动时系统识别磁盘的顺序变了这块盘变成了/dev/sdc1自然就找不到了。UUID错误你复制粘贴UUID时出错或者这块盘被重新格式化过格式化会改变UUID。排查与解决在紧急模式的命令行下重新查看磁盘信息lsblk和blkid。核对/etc/fstab中配置的UUID或设备名是否与当前实际情况一致。如果不一致用vim或nano编辑/etc/fstab修正为正确的信息。执行mount -a测试成功后重启。预防措施这就是为什么强烈推荐使用UUID而不是设备名。只要不重新格式化UUID就不会变。5.3 挂载选项的学问noatime与nodiratime在/etc/fstab的挂载选项第四列里除了defaults你可能会看到noatime或nodiratime的建议。这涉及到文件系统的一个特性atimeaccess time。每当文件被读取即使只是cat一下系统都会更新这个文件的“最后访问时间”元数据。对于频繁读取的服务器如Web服务器、邮件服务器这会带来大量微小的磁盘写入操作影响IO性能。noatime完全禁止更新文件的atime。nodiratime禁止更新目录的atime。设置noatime可以提升性能但某些依赖atime的应用程序如邮件客户端mutt或某些备份工具可能会异常。对于纯粹的数据存储盘加上noatime通常是安全的性能优化。你可以这样写UUIDxxxx /data ext4 defaults,noatime 0 25.4 使用LVM管理多块磁盘灵活性的终极选择如果你面临更复杂的存储需求比如未来可能需要将多块物理虚拟磁盘合并成一个大的逻辑卷或者需要动态调整逻辑卷的大小而不影响数据那么LVMLogical Volume Manager逻辑卷管理是你的不二之选。LVM引入了三个核心概念PVPhysical Volume物理卷这就是你的实际磁盘或分区如/dev/sdb1。VGVolume Group卷组一个或多个PV可以加入到一个VG中形成一个存储池。LVLogical Volume逻辑卷从VG中划分出来的逻辑块设备它才是最终被格式化和挂载使用的对象类似于分区但更灵活。使用LVM的流程大致是创建PVsudo pvcreate /dev/sdb创建VGsudo vgcreate my_vg /dev/sdb创建LVsudo lvcreate -L 50G -n my_data my_vg创建一个50G名为my_data的LV格式化LVsudo mkfs.ext4 /dev/my_vg/my_data挂载LVsudo mount /dev/my_vg/my_data /dataLVM的优点是你可以随时向VG中添加新的PV来扩容也可以在线扩展LV的大小管理起来非常灵活。当然它的配置和管理也比直接使用分区稍复杂一些。6. 从挂载到应用权限、性能与监控磁盘挂载好并配置了自动挂载工作只完成了一半。要让它在生产环境中稳定、高效地运行还需要考虑以下几点。6.1 权限管理与SELinux/AppArmor上下文如果你在/data目录下运行的服务如Nginx, MySQL无法写入文件除了检查目录的chown和chmod权限还需要考虑安全模块的影响。例如在开启了SELinux的系统中如CentOS/RHEL即使权限是777进程也可能因为安全上下文context不正确而无法访问。你可以使用ls -Z /data查看目录的SELinux上下文。如果上下文不对可以使用chcon命令修改或者更推荐的做法是在挂载选项或fstab中设置正确的上下文。对于Web内容目录一个常见的上下文是httpd_sys_content_t。更永久的办法是使用semanage fcontext命令添加规则并执行restorecon。对于AppArmor如Ubuntu可能需要修改相应应用的配置文件允许其访问/data目录下的路径。6.2 磁盘IO性能简单监控与优化挂载的磁盘性能如何两个简单命令可以帮你快速了解iostat -dx 1这个命令可以查看所有磁盘的实时IO统计包括每秒读写次数r/s, w/s、读写吞吐量rkB/s, wkB/s、平均等待时间await等。观察await值如果持续很高比如超过几十毫秒可能意味着磁盘IO存在瓶颈。iotop类似于top命令但是看每个进程的磁盘IO使用情况。如果你发现系统变慢可以用它来定位是哪个进程在疯狂读写磁盘。对于性能要求高的场景挂载选项也可以做调整。例如对于SSD虚拟盘或对数据一致性要求不是极端高的场景可以添加discard选项以启用TRIM功能需文件系统和底层存储支持或者使用datawriteback的ext4挂载选项来提升性能但会增加故障时数据丢失的风险。6.3 空间监控与告警数据盘被填满是运维中常见的故障。除了定期手动执行df -h更应该建立自动监控。一个简单的办法是写一个Shell脚本定期检查/data的磁盘使用率并通过邮件、钉钉、企业微信等发送告警。#!/bin/bash USAGE$(df -h /data | awk NR2 {print $5} | sed s/%//) THRESHOLD80 if [ $USAGE -gt $THRESHOLD ]; then echo 警告/data 磁盘使用率已超过 ${THRESHOLD}%当前为 ${USAGE}% | mail -s 磁盘空间告警 your-emailexample.com fi然后将这个脚本加入crontab每小时执行一次。对于企业级环境建议使用Zabbix、Prometheus等专业监控系统来跟踪磁盘使用率、IOPS、延迟等更全面的指标。回过头看最初那个“找不到新硬盘”的问题其本质是对Linux存储管理逻辑的不熟悉。Linux将存储设备抽象为块设备文件/dev/sdX用户需要显式地对其进行分区、创建文件系统、挂载才能纳入统一的文件系统树中使用。这套看似繁琐的流程赋予了系统管理员从硬件识别到空间分配、从性能调优到权限管理的全链路控制能力。无论是使用经典的fdiskmkfsmount组合拳还是采用更灵活的LVM其核心思想都是一致的清晰的分层管理。VMware提供了虚拟化的硬件层Linux内核负责识别和驱动而管理员则通过命令行工具在逻辑层进行规划和配置。理解每一层的作用才能在任何“意外”发生时从容地从lsblk开始一步步向下排查。对于初学者我的建议是先在测试环境里反复练习整个流程。从添加虚拟磁盘到分区格式化再到编辑fstab实现开机挂载最后故意制造一些错误比如写错UUID练习在紧急模式下修复。这个过程能帮你牢固建立磁盘、分区、文件系统、挂载点这几个核心概念之间的联系。当你不再害怕/etc/fstab报错并能清晰地向别人解释为什么需要mount命令时这块知识才算真正内化成为了你运维技能包里一件趁手的工具。
返回列表