磁盘管理与LVM工具详解:从裸分区到逻辑卷在线扩容实战
2026/9/13 13:59:46 网站建设 项目流程

去年年底我的一个项目群突然开始连环喊人,一台跑着MySQL和报表服务的CentOS 7.9虚拟机磁盘使用率到了100%。我本想继续往原分区里匀点空间,打开df -h一看才发现,当初分区的时候就给数据盘留了一个ext4裸分区,没有用LVM。那个晚上我一边清binlog一边感慨:如果早知道“磁盘与LVM工具”这套玩法,扩容恐怕就是几条命令的事情,根本不用冒着服务中断的风险去折腾。

很多人听到“磁盘与LVM工具”这个说法,第一反应是某一个软件。实际上它是一整套和磁盘打交道的手段:fdiskpartedlsblkpvcreatevgcreatelvcreateresize2fsxfs_growfs,再加上Windows磁盘管理、macOS磁盘工具这些图形界面软件。这篇文章我想从运维实战的角度,把磁盘管理和LVM工具链真正拆开讲清楚,从原理到命令,从在线扩容到故障排查。内容偏Linux,但也会涉及Windows/macOS上那些让人头大的磁盘问题,适合自己搭服务器、维护NAS、或者做开发环境的人参考。

1. 裸分区与LVM的关键差异:先弄懂数据组织方式

1.1 从物理盘到逻辑卷的三层结构

LVM是Logical Volume Manager,逻辑卷管理器。要理解它,先忘记以前用fdisk直接分区的习惯。裸分区的数据组织方式很简单:物理磁盘→分区→文件系统。挂载的时候你用的是/dev/sda1/dev/sdb2这样的设备名,分区边界写死在分区表里。一旦你觉得这块盘空间不够,要么把分区删了重建、要么找一块更大的盘把数据搬过去,过程相当痛苦。

LVM在中间多加了“虚拟化”的一层,数据组织变成:物理磁盘→物理卷PV(Physical Volume)→卷组VG(Volume Group)→逻辑卷LV(Logical Volume)。物理卷可以理解为被LVM“接管”的磁盘分区或整块磁盘。多个物理卷组成一个大池子,这个池子就是卷组。最后从卷组里面切出一个个带有名字的逻辑卷,逻辑卷才是你真正格式化文件系统和挂载的那个设备。

这样设计带来的直接好处是:底层物理盘可以随时换、随时加,而上层的逻辑卷大小可以动态调整。比如卷组vg_data现在由/dev/sdb1这个物理卷提供20GB空间,后来你又加了一块100GB的新磁盘,只要把它变成物理卷并加入vg_data,逻辑卷就能继续往外扩。上层看到的永远是一个连续的虚拟设备,不用管底层物理盘怎么摆放。

1.2 为什么说LVM让扩容从“拆墙”变成“搭积木”

裸分区扩容最典型的场景是这样:你有一台服务器,/分区是在一块500GB的SSD上,数据盘挂载在/data。半年后/data满了,你发现同一块硬盘上还有其他分区,但大小早就固定了。想扩容只能把备份做出去,然后重新分区、重新格式化、重新恢复数据。有些云服务器倒是支持在线扩容云盘,但文件系统扩完之后想再缩回来几乎没有可能。

用LVM的话,这个过程就完全不一样了。假设你当初建了一个卷组vg_data,里面已经有一个逻辑卷lv_data挂载在/data。现在磁盘不够了,你只需要给物理机加一块新硬盘,pvcreate /dev/sdb之后用vgextend vg_data /dev/sdb把新空间放进卷组,然后lvextend -L +20G /dev/vg_data/lv_data把空间分配给逻辑卷,最后根据文件系统类型执行xfs_growfsresize2fs。全程不需要重启,不需要卸载磁盘,甚至MySQL都可以继续跑。

这种“搭积木”的思路还解决了另一件事:不同容量的磁盘可以混在一个卷组里面。比如你手上有两块4TB的老机械盘和三块1TB的SSD,放在LVM里可以把它们全部纳入一个大的存储池,再按业务需求切成逻辑卷。裸分区做不到这么灵活,每块盘独立分区后很难把空间合并到一起使用。

1.3 什么时候不适合用LVM

LVM不是万能药,有些场景我强烈建议不要上。典型的是一台UEFI启动的Linux机器,/boot和EFI分区。/boot里面放内核和引导文件,早期引导阶段很多时候LVM驱动还没有加载,把/boot放到LVM逻辑卷上容易出现开机找不到内核的问题。除非你用的是现代发行版并且明确知道自己在做什么,否则/boot老老实实做成独立分区更稳。

另一个不适合的场景是极简的嵌入式系统或容器镜像。为了减少镜像体积、降低故障点,很多基础镜像故意不带lvm2工具。这种环境里,最直接的分区方案反而更可靠。还有一个容易忽略的问题是,一旦物理卷所在的磁盘出现坏块,LVM卷组里的所有逻辑卷都会受影响。所以特别关键的数据,建议仍然以独立磁盘或Raid级别去兜底,不要把LVM当成数据备份方案。

我这几年见过很多新人一看到“LVM高级”就盲目上,结果把逻辑卷和卷组配置文件搞得一团乱,最后只能靠vgcfgrestore救命。工具本身没有问题,但应该在理解清楚它的逻辑之后再用。下面我会带大家完整走一遍,从一块新磁盘开始,把它变成卷组的一部分并挂载使用。

2. 手把手:让一块新磁盘加入LVM的完整工作流

2.1 准备工作:装工具和识别新磁盘

开始操作前,先确认系统里已经安装了LVM工具集。Debian/Ubuntu用apt install lvm2,CentOS/RHEL用yum install lvm2,装完之后会有pvcreatevgcreatelvcreate等一系列命令。这些命令基本是Linux发行版的标准配置,但在精简版系统里经常被砍掉,所以第一步还是先敲一下which pvcreate确认。

新磁盘插入服务器后,不要急着分区。先看系统到底认没认出这块盘,最好的工具是lsblk。比如一块新加的20GB磁盘会被识别为/dev/sdb,通过lsblk -o NAME,SIZE,MODEL,SERIAL可以核对型号和序列号,避免因为盘符变化搞错对象。这里强调一下:/dev/sda/dev/sdb这种名字在重启后可能会变,尤其是有多块相同硬盘的时候,操作前一定要结合型号、序列号、挂载路径再次确认。在虚拟机里,设备名一般固定,但物理机上绝对不能想当然。

如果需要把一块盘的一部分加入LVM,可以先分区再建物理卷。分区我倾向于用parted,因为它对GPT支持更好。示例:把整块/dev/sdb做成一个GPT分区表并创建一个占用全部空间的主分区/dev/sdb1

parted /dev/sdb mklabel gpt parted /dev/sdb mkpart primary xfs 1MiB 100% partprobe /dev/sdb lsblk /dev/sdb

如果你只想给LVM用一整块磁盘,Linux也允许直接在整块磁盘上pvcreate /dev/sdb,不需要分区。不过为了保证后续维护兼容性,我还是建议先建分区,尤其在你未来可能需要把这部分空间挪给其他用途时。

2.2 创建物理卷、卷组、逻辑卷

准备工作完成之后,LVM工具链的真功夫才开始。第一步是把/dev/sdb1初始化为物理卷,命令只有一个:

pvcreate /dev/sdb1

刚接触LVM的人常常把pvcreate理解成“格式化”,它实际上就是在设备头部写入LVM元数据,让这块区域可以被卷组识别。你可以用pvspvdisplay查看物理卷信息。我习惯先在/dev/sdb1上执行一次pvdisplay /dev/sdb1,确认状态是PV Status正常,再继续。

接下来创建卷组vg_data,如果把物理卷加入一个已经存在的卷组,就用vgextend;从零开始就在这一句里完成:

vgcreate vg_data /dev/sdb1

卷组名可以自定义,但建议取有业务含义的名字,比如vg_datavg_backup,不要用vg0这种没有辨识度的名字。创建完卷组后,用vgdisplay vg_data查看当前卷组的Free PE / Size,这一步很重要,因为你只有在卷组里还有空闲空间的情况下才能创建逻辑卷。

然后创建逻辑卷lv_data,指定大小为15GB:

lvcreate -L 15G -n lv_data vg_data

-L后面跟容量,-n后面跟逻辑卷名字。创建完毕后,逻辑卷设备会出现在/dev/vg_data/lv_data,同时在/dev/mapper/vg_data-lv_data下也有一个链接。这两个路径本质上指向同一个设备,写脚本的时候尽量使用/dev/mapper/路径更清晰。

2.3 格式化、挂载与开机自启

之所以不把lvcreate当成最后一件事,是因为逻辑卷建好之后还没有文件系统。接下来要格式化并挂载,这一步和普通分区没有任何区别,所以刚才2.2节里的15GB只是逻辑卷容量,不是文件系统容量:

mkfs.xfs /dev/vg_data/lv_data mkdir -p /data mount /dev/vg_data/lv_data /data

文件系统类型要靠你自己判断。CentOS 7默认推荐xfs,Ubuntu桌面版默认推荐ext4。两者的扩容工具不同,xfs_growfs专用于xfs,resize2fs用于ext4/ext3。xfs文件系统不支持缩容,所以如果一开始不确定要多大,建议先用ext4;在服务器上追求大文件性能且未来大概率只扩不缩,xfs更合适。

开机自动挂载推荐在/etc/fstab里写逻辑卷的UUID,而不是直接写设备名。先执行:

blkid /dev/vg_data/lv_data

把输出的UUID复制到/etc/fstab,类似这样:

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data xfs defaults 0 0

如果是刚创建的卷,可以先用mount -a验证一下fstab配置有没有写错,再重启。很多服务器启动到一半卡在救援模式,十有八九就是fstab里设备名写死、系统启动时找不到盘。用UUID能显著减少这类问题。

2.4 关于扇区对齐和分区细节

说一个我在实际运维中经常看到人忽略的点:分区起始位置没对齐,导致性能莫名其妙变差。传统MBR时代分区从第63扇区开始,到了GPT时代,Windows和Linux都建议从1MiB位置开始,也就是第2048个扇区。parted默认就会从1MiB开始,所以我们上面的命令没有踩坑。

LVM本身也会对PE(Physical Extent)做对齐,默认PE大小一般是4MiB。当你在创建卷组时没有指定PE大小时,系统会自动选择一个合适的值。普通场景不用改,但如果你想为小文件存储优化或者有大容量磁盘,可以了解一下-s参数,比如vgcreate -s 16M vg_data /dev/sdb1。PE越大,逻辑卷管理越粗放,适合超大存储池;PE越小,空间利用率越高,但元数据也更多。

新手最容易犯的错是把pvcreate用在已经有数据的分区上。哪怕你手里拿的是一块旧移动硬盘,也觉得“删除分区”不算什么大事,但pvcreate的过程会把分区头的元数据覆盖掉,旧文件系统直接失效。如果里面有想保留的数据,先备份,再操作,千万别赌。

3. 从报警到定位:磁盘100%和“磁盘必须初始化”的排查逻辑

3.1 磁盘使用率100%:先冷静看指标

服务器磁盘报警是运维的日常,但很多人一看到df -h/是100%就慌着删文件,反而抓到什么删什么,误删了数据库binlog。我自己的排查顺序是固定的:先看df -h确认是哪一个挂载点满了,再用du -sh /*从根目录开始逐层往下扫,找出最大的目录。

du慢的时候可以配合ncdu这种交互工具,扫完一遍后你会很快定位到占用大头。另一个常见的坑是,空间被一个已经删除但仍被进程占用的文件所消耗。你把文件rm了,df还是显示的满,这时候要用lsof | grep deleted找到还握着文件句柄的进程,然后重启进程或释放句柄,空间才会真正还给系统。MySQL进程会有不少这样的情况,尤其是我之前遇到的日志文件被删除但句柄没释放,表现就是磁盘空间持续被占用。

如果df显示满了,但du扫出来的总量对不上,那就需要检查文件系统层的保留块或快照。xfs和ext4都有保留空间机制,例如ext4默认保留5%给root用户,如果磁盘很大,这5%也不容小觑。用tune2fs -m可以调整保留比例,但如果你不是root用户,还是别去挑战0%。

3.2 新磁盘提示“必须经过初始化”

Windows用户在全新硬盘或U盘上经常会遇到一个弹窗:“磁盘必须经过初始化 逻辑磁盘管理器才能访问”。很多第一次看到这个提示的人以为磁盘坏了,其实只要系统识别到一块没有有效分区表的磁盘,就会要求你先初始化,把GPT或MBR分区表写进去。

现代Windows电脑强烈建议选GPT,因为是UEFI引导时代,GPT能支持2TB以上容量和大磁盘,MBR最多约2TB。选中磁盘后,右键选择“磁盘管理”,再右键左侧的磁盘图标选“初始化磁盘”。如果磁盘已经是被别人用过的,里面还有重要数据,绝对不要随便做“初始化”,这个操作会清空分区表,数据恢复会非常麻烦。

Linux下也有对等的困扰,当你插入一块没有分区的磁盘时,dmesg会能看到它,但fdisk -l可能显示“doesn't contain a valid partition table”。解决方式就是partedfdisk给它重新写分区表,然后接下来如果需要LVM,就走第2节的流程。

3.3 “写保护”和“请插入磁盘”类报错:物理与逻辑的交叉

经常会有人问我:“U盘能识别,但内存为0,打开提示请插入磁盘”怎么办。这种报错十有八九是主控能枚举,但介质不能被正常读写。先别急着格式化,把U盘插到另一台电脑上,如果还是同样问题,很大概率是U盘的主控或闪存颗粒出了问题。如果另一台电脑能正常看到容量,那就说明上一台机器的驱动或磁盘服务有异常。

“磁盘被写保护”的原因也分层级。第一层是物理开关,老U盘侧面有个Lock小滑块;第二层是文件系统或卷的只读标志,Windows下可以通过diskpart清除。打开命令行,依次执行:

diskpart list disk select disk 1 attributes disk clear readonly

这里的disk 1只是示例,必须根据实际磁盘编号来。如果显示“清除磁盘属性成功”,再回资源管理器重新格式化。注意,如果是SD卡或固态硬盘在硬件层被锁死,比如写保护检测引脚和读卡器接触不良,那diskpart是救不回来的。你可以换一个读卡器或U盘底座再试。

如果格式化时报“Windows无法格式化该驱动器。退出所有正在使用该驱动器的磁盘实用程序或其他程序”,往往是有后台进程占用着U盘,比如杀毒软件扫描、索引服务或者文件管理器窗口停在U盘目录里。彻底关掉相关程序,或者重启资源管理器就能解决。

3.4 UEFI/GPT布局和安装系统报错

装Windows的时候有个经典报错:“无法安装Windows,因为这台电脑的磁盘布局不受UEFI支持”。原因通常是硬盘上还是MBR分区表,而主板设置为UEFI安全引导模式,Windows安装程序拒绝把系统装到MBR磁盘里。解决办法有两个思路。

第一,在BIOS设置里打开CSM兼容模式,让安装程序用传统方式引导,但这样以后重装还是容易踩坑。第二,也是我更推荐的,备份数据后把磁盘转为GPT。在安装界面按Shift + F10打开命令行,用diskpart执行cleanconvert gptclean会清掉所有分区,所以操作前一定想清楚盘里有没有值得留下的数据。如果不想损失数据,可以用DiskGenius、傲梅分区助手等工具做无损转换,但不保证100%可靠。

Linux也不会免俗,如果你在UEFI模式下安装Ubuntu,同样会遇到“分区表类型必须是GPT”的要求。所以我在新装机时一律用GPT分区表,不管装Windows还是Linux,这样能给未来省掉一堆麻烦。看到“所选GPT格式化的磁盘包含不是partition的另一个分区”这类提示时,通常是因为磁盘里还有隐藏的保留分区或旧系统引导分区,先手动删除所有分区再继续装系统,或者用安装程序自带的“清除磁盘”功能。

4. CentOS 7.9虚拟机磁盘扩容实战:LVM的甜头在这里

4.1 扩容前的准备工作

假设你已经有一台CentOS 7.9虚拟机,磁盘是/dev/sda,安装系统时使用了LVM,逻辑卷/dev/mapper/centos-root挂载在/。现在磁盘不够用了,先在VMware、VirtualBox或云管理后台把虚拟磁盘调大。这一步可以在虚拟机开机状态下做,有些虚拟化平台支持热添加,但为了保险,我习惯先关机再扩容。

扩容完重新开机,执行lsblk,你会看到物理磁盘大小变了,但分区大小和PV大小都还是原样。这是因为Linux内核还没有重新读取分区表。如果是物理机新换了大硬盘,可以通过partprobe或重启来触发。如果是SCSI设备,最保险的方式是重启虚拟机;也可以尝试执行:

echo 1 > /sys/class/scsi_disk/0:0:0:0/device/rescan

具体路径要看lsblk的输出,不一定每个虚拟机都一样。我踩过最多次数的坑是,明明虚拟机管理界面已经显示80GB了,lsblk还是40GB,最后发现是SCSI控制器没有重新扫描。重启一次是最省事的。

4.2 从虚拟磁盘到底层文件系统:完整命令顺序

下面是扩容的核心步骤,顺序绝对不能乱。先看当前分区布局,假设根分区是/dev/sda2

lsblk

如果/dev/sda2后面没有显示所有新空间,需要把sda2删掉重新建一个更大分区,但这一操作有风险,必须保住原分区起始扇区不变。有些CentOS 7默认安装时会把/boot放在独立分区,根分区后面还有空闲空间,这种情况下可以直接用growpart扩展分区而不需要删除重建。

CentOS 7可能没有cloud-utils-growpart,可以先用fdisk确认原分区起始扇区,比如sda2Start是2048,然后删除分区、再以相同起始位置创建新分区,最后partprobe。这样做的原理很简单,就是重写分区表,保留原数据区域的起始地址和长度,再把分区终点往后扩展。如果你的分区是LVM PV,这个操作不算危险,但仍建议操作前备份分区表:

sfdisk -d /dev/sda > /root/partition_backup.sfdisk

分区扩展好之后,LVM层开始工作。用pvresize让PV知道磁盘变大了:

pvresize /dev/sda2 pvs

接下来是扩展逻辑卷centos-root。如果你还有一块全新的硬盘,比如/dev/sdb,也可以直接pvcreate /dev/sdbvgextend centos /dev/sdb,拥有逻辑卷的卷组只要空间够,文件系统就能继续扩,这才是使用LVM最有价值的地方。

把根逻辑卷扩展20GB:

lvextend -L +20G /dev/mapper/centos-root

注意这里我默认使用-L +20G,而不是-L 20G。加号表示在当前基础上增加20GB;如果漏掉加号,会把逻辑卷直接设置为20GB,万一之前已经有50GB的数据,那可就危险了。扩展完成后,还要执行文件系统扩容:

xfs_growfs /

如果是ext4文件系统,应该用resize2fs /dev/mapper/centos-root。千万别用错,否则会有“resize2fs: Bad magic number”的报错。执行完再用df -h确认根分区实际大小已经变了。

4.3 扩容后要做的验证与日常运维

扩容不是跑完命令就结束了,我最少做三件事。第一,检查文件系统是否完好:xfs用xfs_repair -n只读检查,ext4用e2fsck -n;由于刚扩容完,文件系统可能是在线状态,xfs的在线检查工具更安全。第二,确认业务进程是否正常,特别是数据库,在在线扩容逻辑卷后,最好观察一下IO延迟有无异常。第三,把LVM元数据做一次备份。

LVM本身有很完善的元数据备份机制,默认会放在/etc/lvm/backup//etc/lvm/archive/。正常来说,每次执行pvcreatevgcreatelvextend等操作时,LVM都会自动备份旧元数据。你还可以手动执行:

vgcfgbackup vg_name

万一卷组元数据丢了,可以用vgcfgrestore vg_name -f /etc/lvm/backup/vg_name恢复。我用这个办法救回过一台被人在LVM操作中不小心误删逻辑卷的测试机。别等到数据全没了才想起备份。

顺便提醒一下,扩容XFS之后不要想着缩容。xfs不支持缩容,如果创建xfs逻辑卷时容量设得过大,后期想缩回来是做不到的。所以在建逻辑卷时,如果对容量不确定,宁可先建小一点,留出卷组里的空闲空间,后期逐步扩。这句话我写了很多次,但每次都能遇到踩坑的人。

5. 桌面端磁盘工具能救你多少:Windows与macOS侧写

5.1 Windows磁盘管理:初始化、分区、卷

Windows自带的“磁盘管理”是很多人最先接触到的磁盘工具,功能不算复杂,但够日常用。右键开始菜单选择“磁盘管理”,你能看到每块磁盘的型号、容量、分区风格(MBR或GPT)、卷和文件系统。右键一块未分配空间可以选择新建简单卷,向导会让你指定卷大小、盘符、文件系统类型。

很多用户被“磁盘必须经过初始化”卡住,就是因为用U盘或移动硬盘时,系统弹窗后直接点了“取消”。此时进入磁盘管理,找到对应磁盘,右键选择“初始化磁盘”,如果容量超过2TB就必须选GPT,否则Windows只能识别其中一部分空间。对于已经存在的磁盘但系统不被识别为未初始化导致“无法新建文件夹”,多半是权限问题而不是分区问题,先去资源管理器属性里设置该磁盘根目录的Users用户组写权限。

Windows里比较冷门但和逻辑卷功能类似的叫“动态磁盘”或“存储空间”。动态磁盘能把多个磁盘组合成跨区卷,但微软自己都建议普通用户用“存储空间”代替。存储空间支持类似LVM的池化概念,把多块物理盘加入一个存储池,再创建虚拟磁盘。不过它不够透明,维护起来比LVM复杂,所以我家用NAS还是坚持用Linux LVM方案。

5.2 macOS磁盘工具与磁盘映像

macOS上的对应工具叫“磁盘工具”,图形界面在“应用程序→实用工具”里,可以对磁盘做分区、格式化和磁盘映像操作。很多人遇到的报错“mac磁盘mediakit报告设备上的空间不足”,常见于从网页下载dmg文件后双击安装时。这个报错的含义是磁盘工具从DMG里读取数据时,发现写入分区没有足够空间或DMG文件本身不完整。

我处理这类问题的方法很简单:先用磁盘工具确认目标宗卷的剩余空间够不够,再重新下载一次dmg,对比下载大小是否和官网一致。如果md5shasum校验不一致,说明下载损坏。还可以用命令行hdiutil attach xxx.dmg -verbose来获取更详细的错误日志,比图形界面提示更有价值。实在不行,把dmg放到另外一块外接磁盘上试试,排除目标磁盘空间不足的因素。

macOS还经常出现“未能打开磁盘映像”的提示,特别是在Safari自动解压之后。这种情况有时候和Gatekeeper权限有关,但你只需要记住:不要只双击,而是右键选择“打开”;如果还不行,用xattr -d com.apple.quarantine /path/to/file.dmg清除隔离属性。这不算高深技术,但确实能救急。

5.3 U盘/启动盘的常见误区和容量陷阱

“U盘插入电脑能显示,但内存为零”是个特别常见的问题,这类U盘大概率是扩容盘,也就是通过修改主控固件把实际容量小的U盘伪装成大的。你在Windows下看到64GB,但写到接近真实容量时就会出现写入失败、数据损坏,甚至变成0字节。测扩容盘最土的办法是向U盘写入一个超过实际容量的文件;更专业点用h2testwChipEasy看主控信息。买U盘不要贪便宜,这是我说得最多的一句话。

制作启动盘时经常有人问“UltraISO磁盘容量太小”怎么解决,这个提示简单粗暴:你选择的U盘容量比ISO镜像文件小。镜像动辄4GB以上,一个4GB的U盘自然放不下。用Rufus或Ventoy这类工具可以正常制作,但容量还是物理限制。真要小容量U盘装大系统,可以尝试精简版系统,但我不推荐在关键电脑上装精简版系统,容易缺组件。比如“磁盘整理组件被精简了怎么恢复”这类问题,经常就出现在精简镜像里,我建议直接用官方ISO重新安装,然后开启Windows的自动维护,不要折腾所谓的“恢复工具”。

前面提到的“无法安装Windows因为磁盘布局不受UEFI”也可以归到这一节:如果你把ISO写入了U盘,但U盘是MBR分区表,在UEFI启动模式下依然可能出现报错。用Rufus时分区类型选GPT、目标系统类型选UEFI,就基本不会踩这个坑。

6. 给新手的规划建议:现在开始用LVM也不晚

6.1 初始分区规划:给/boot留空间,其余交给LVM

如果你现在正准备新装一台Linux服务器,我给的分区建议是:GPT分区表,单独分一个1GB的/boot/boot/efi,然后把剩余空间全部建为一个大分区,类型设成Linux LVM,再在这个分区上创建物理卷。安装系统时,让安装器自动为/swap/home创建逻辑卷,而不是把它们直接放在裸分区上。

这样的好处是,以后不管哪个目录空间不够,只需要在卷组空闲空间里lvextend。尤其是/分区和/home分区,如果再配合xfs或ext4在线扩容,基本不用停机。如果你的机器只是普通桌面用途,分区没那么讲究,但至少要知道这套逻辑,等需要的时候不至于抓瞎。

我有个朋友用Ubuntu桌面版,当时安装时选了整个磁盘自动分配,后来为了给Docker根目录扩容,不得不借助GParted在线调整分区,虽然成功了但折腾了一整个下午。要是当初用了LVM,一条lvextend加一条resize2fs就解决了。多说一句:现在大部分Linux发行版默认安装时,如果选择LVM,通常就是按卷组和逻辑卷来管理的,你只要在分区引导界面别手动改成裸分区就行。

6.2 工具选型:fdisk、parted、gdisk、lsblk、blkid

不同磁盘工具适合不同场景,我把经验整理成下面这张表,方便对照:

工具定位适合场景注意
fdisk交互式分区工具MBR分区管理、快速查看分区表对GPT支持一般,2TB以上推荐gdisk/parted
parted命令行/交互式分区工具GPT分区、脚本化分区删除分区时操作不可逆,务必看清盘号
gdiskGPT专用分区工具2TB以上大磁盘、GPT修复命令风格和fdisk很像
lsblk查看块设备树任何环境下识别磁盘和挂载点信息量很大,建议配合-o NAME,SIZE,MODEL,SERIAL
blkid查看设备UUID和文件系统类型写fstab前必须用不会显示所有未挂载分区的信息,需配合lsblk
pvdisplay/vgdisplay/lvdisplayLVM查看工具确认LVM状态没有安装lvm2时会提示命令找不到

作为日常使用,lsblkblkid是我敲得最多的命令。前者快速看全局,后者去拿UUID写fstab。分区操作用parted,处理老旧的MBR盘才用fdisk。这些工具并不冲突,你可以在不同阶段交叉使用。

6.3 我从翻车中总结的检查清单

最后分享一份我每次操作磁盘和LVM前都会过的检查清单,内容很琐碎,但能避免很多大麻烦。

操作前,先确认三件事:第一,有没有备份重要数据,LVM元数据备份至少执行一次vgcfgbackup;第二,当前磁盘是否被业务进程占用,用lsoffuser查一下;第三,用的设备名是不是真实存在的,用lsblk核对序列号和模型,不要凭记忆写/dev/sda

操作中,注意几个“千万别”:千万别在已挂载的xfs逻辑卷上执行lvreduce;千万别把lvextend-L +20G写成-L 20G;千万别在U盘还插着别的电脑时直接格式化;千万别用UltraISO强行向容量不足的U盘写入镜像。

操作后,再看一遍df -hlsblkpvsvgslvs,确认结果和预期一致。如果是生产环境,观察15分钟再离开,看有没有异常报警。长期维护的话,可以写一个简单的巡检脚本,用df -hvgs把空间使用率发送到钉钉或企业微信告警,比每天手动登录服务器靠谱得多。

磁盘和LVM工具这块知识拼图,看上去零零散散,但只要理解了物理卷、卷组、逻辑卷这一条主线,大部分问题都能串起来。我自己也是从“分区满了重启服务器”这种原始阶段走过来的,踩过的坑不比你少。下次有条件装新服务器时,建议你刻意把所有数据盘都放进LVM,折腾几次扩容和回滚,就能真正把这套工具用熟了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询