银河麒麟V10环境下做磁盘管理,建分区、做LVM逻辑卷、格式化、挂载,这一套流程我实操过很多次。特别是给服务器加数据盘、给系统盘扩容、调整home目录大小的时候,如果LVM规划不对,后面会非常折腾。这篇就按照从零开始的实际操作顺序,把分区、LVM创建、格式化、挂载的完整过程拆开讲清楚,包括每一步为什么这么做、命令怎么敲、有哪些坑要避开。
先说清楚一个概念:LVM(Logical Volume Manager,逻辑卷管理)在银河麒麟V10里用得非常多,因为它允许你把多块物理磁盘合并成一个卷组,然后按需划分逻辑卷,扩容缩容都非常灵活。传统分区直接挂载的方式,遇到磁盘空间不足就只能加新盘或者备份重做,麻烦得很。所以,只要不是特殊场景(比如U盘、引导分区),我强烈推荐用LVM来管理数据盘。
在开始之前,你需要确认当前账户有root权限,并且系统里已经接好了一块或多块新磁盘。下面我按一条完整链路来走:识别磁盘 -> 分区 -> 创建PV -> 创建VG -> 创建LV -> 格式化 -> 挂载 -> 开机自动挂载 -> 故障排查。
1. 环境准备与磁盘规划
1.1 先让系统“认出”新磁盘
拿到一块新硬盘或者新加的虚拟磁盘,第一件事不是马上分区,而是先看系统识别到没有。我常用的命令是lsblk,它能以树状图显示当前所有块设备以及挂载关系,非常直观。
lsblk输出大概长这样:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 252:0 0 50G 0 disk ├─vda1 252:1 0 1G 0 part /boot └─vda2 252:2 0 49G 0 part ├─klv-root 253:0 0 45G 0 lvm / └─klv-swap 253:1 0 4G 0 lvm [SWAP] vdb 252:16 0 100G 0 disk这个输出里,vda一般是系统盘,已经有分区和LVM了;vdb就是刚加进来的新盘,100GB,还没有分区,TYPE列是disk。如果你的机器是物理机,设备名很可能是/dev/sda、/dev/sdb;如果是虚拟机,常见的是/dev/vda、/dev/vdb。名字不同不影响操作逻辑。
如果新盘插上去了但lsblk没看到,可以执行echo "- - -" > /sys/class/scsi_host/host0/scan触发重新扫描,或者干脆重启系统。虚拟机里有时候还要去控制台确认磁盘是否真正挂载到了实例上,这一步很多人会忽略。
1.2 分区表方案:GPT还是MBR
磁盘识别到了,接下来要决定用GPT还是MBR分区表。这步很关键,决定了后续能分多少个主分区、最大支持多大容量。
- MBR(Master Boot Record):传统的分区表,最大支持2TB的磁盘,最多4个主分区(或者3主分区+1扩展分区)。兼容性最好,但功能和容量上限太低。
- GPT(GUID Partition Table):现代分区表,支持大于2TB的磁盘,理论支持近乎无限个分区,还带备份分区表,更安全。
银河麒麟V10默认安装时基本都走UEFI+GPT路线,所以我建议新盘一律用GPT。特别是以后可能扩容到2TB以上的场景,MBR会直接让你寸步难行。用parted或fdisk都行,我习惯用parted,因为它可以直接指定分区表类型。
parted /dev/vdb mklabel gpt注意:如果磁盘上已有数据或分区表,执行
mklabel gpt会清空整块盘。操作前务必确认磁盘名称正确,且里面没有需要保留的数据。
1.3 规划LVM结构:PV、VG、LV
在创建任何内容之前,先花两分钟把LVM的层级关系想清楚。这里我用一个生活化的类比:
- PV(Physical Volume,物理卷):相当于一块块“原料地”,可以直接是一块裸盘,也可以是一个分区。
- VG(Volume Group,卷组):把多块PV圈起来形成一个“资源池”,相当于把多块地合并成一个总仓库。
- LV(Logical Volume,逻辑卷):从VG这个总仓库里划出一块来用,相当于具体分给某个项目的仓库空间。
为什么要这样设计?最大的好处是灵活。比如你有一块100G的盘,全部分给某个应用,结果应用只用了20G,剩下的80G就浪费了。但如果做成LVM,先把100G加入VG,再创建一块80G的LV挂给应用,后面不够了可以直接在线扩容,甚至多挂一块新盘进VG,总仓库变大后再给LV扩容,完全不影响业务。
所以我的建议是:假如数据盘容量不超过2TB,直接整块盘建PV,不分区;如果容量特别大,或者有特殊引导需求,才考虑先分区再把分区建为PV。下面示例我演示“先分区,再建PV”的完整流程,毕竟这是很多朋友实际会遇到的场景,而且理解分区后再建PV,对排查问题也很有帮助。
2. LVM逻辑卷创建实操
2.1 用fdisk创建LVM分区
建PV之前,先要用分区工具把磁盘划分出一个类型为“Linux LVM”的分区。fdisk是最经典的工具,交互式操作,适合手动处理,我用它最多。
fdisk /dev/vdb进入交互界面后,操作步骤如下:
- 输入
n创建新分区。 - 提示分区号时,直接回车默认。
- 提示起始扇区时,直接回车默认(通常不需要改变)。
- 提示结束扇区时,这里有两种输入方式:
- 直接回车,表示把整块盘都划给这个分区。
- 输入像
+50G这样的参数,表示只分50G。
- 创建完成后输入
t,然后输入分区号,再输入分区类型代码8e。这个代码代表Linux LVM,一定不能漏掉。如果漏了,后面pvcreate会识别不出来或者报“not found”。 - 输入
w写入分区表并退出。
完整输出类似这样:
Command (m for help): n Partition number (1-128, default 1): First sector (2048-209715166, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-209715166, default 209715166): Created a new partition 1 of type 'Linux filesystem'. Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 8e Changed type of partition to 'Linux LVM'. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.这里有一个非常容易踩的坑:分区写完后系统内核可能还“认识”不到新分区,尤其是你正在操作的磁盘刚好有分区被占用时。解决办法是执行下面任意一条:
partprobe /dev/vdb # 或者 partx -a /dev/vdbpartprobe是让我最省心的一个,它会通知内核重新读取分区表,不用重启。
2.2 创建PV物理卷
分区完成后,用pvcreate把刚才创建的/dev/vdb1初始化成物理卷。命令格式很简单:
pvcreate /dev/vdb1执行成功后,可以用pvs或者pvdisplay查看结果。pvs是精简版,一行一个PV;pvdisplay是详细版,包含PE大小、PV UUID等。我最常用pvs,因为信息够用且不啰嗦:
pvs正常输出会看到/dev/vdb1 100.00g之类的信息,PV状态应该是lvm2。如果这里就报错,请回顾上一步分区类型是不是忘了设成8e。
提示:如果你使用的是
parted创建分区,记得在最后一步设置flag为lvm,效果和fdisk的8e是一样的。命令是set 1 lvm on。
2.3 创建VG卷组
PV创建好之后,把这个PV加入到一个卷组里。卷组名我习惯叫vgdata。如果你后面有多块盘,全都可以加入同一个VG,这就是LVM的“合并”能力。
vgcreate vgdata /dev/vdb1这条命令的意思是:用/dev/vdb1创建一个名为vgdata的卷组。如果以后想加第二块盘,直接执行:
vgextend vgdata /dev/vdb2查看VG信息用vgs或者vgdisplay:
vgs这时候你应该能看到VG #PV #LV #SN Attr VSize VFree这样一列信息。我经常用VFree判断当前还有多少空间可以划给逻辑卷,规划新LV大小全靠这个数。
2.4 创建LV逻辑卷
VG建好之后,就轮到真正的“灵活分配”了。创建LV有两种方式:-L直接指定大小,或者-l指定PE个数/百分比。最常用的是-L:
lvcreate -n data -L 80G vgdata这个命令解释一下:-n data表示逻辑卷名字叫data,-L 80G表示大小80G,vgdata是卷组名。创建完成后,设备路径是/dev/vgdata/data。
查看LV信息用lvs:
lvs会看到类似data vgdata -wi-a----- 80.00g的输出。如果你想一次性把VG所有剩余空间都分配给某个LV,可以用-l 100%FREE:
lvcreate -n data -l 100%FREE vgdata注意:-L和-l不能混用。-L 80G是固定大小,-l 80%FREE是占比。实际生产环境中我一般先用-L明确指定大小,避免以后配置混乱。
到这里,LVM的逻辑卷创建已经完成,但还没法用。接下来要格式化,建立文件系统,然后挂载使用。
3. 格式化与挂载
3.1 选择文件系统:xfs还是ext4
逻辑卷只是一个“空容器”,要往里存数据必须先写入文件系统。银河麒麟V10下我常遇到两种选择:XFS和ext4。
- XFS:默认安装下root用的就是它,适合大文件、大数据量场景,扩容时可以
xfs_growfs在线扩容,不用卸载,非常方便。缺点是不支持缩容。 - ext4:经典老牌文件系统,兼容性好,支持在线扩容和离线缩容,小文件性能也不错。缺点是缩容操作要卸载且不能在线。
怎么选?我的原则很简单:如果只是做大容量数据存储、以后大概率只需要扩容不需要缩容,那就直接用XFS;如果你可能要对逻辑卷做缩容,或者有强烈的小文件性能要求,那就用ext4。银河麒麟V10的root卷默认就是XFS,日常新增数据盘我大多数情况下也用XFS,因为“在线扩容”这一点实在太重要了。
格式化的命令如下:
# 格式化为XFS mkfs.xfs /dev/vgdata/data # 如果是ext4就用 mkfs.ext4 /dev/vgdata/data执行时会输出一堆文件系统参数,其中包括一个NO NAME的日志信息。这时再用blkid查看,就能看到设备的UUID和文件系统类型:
blkid /dev/vgdata/data输出类似:
/dev/vgdata/data: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="xfs"这个UUID后面写/etc/fstab时必须用到,记住它,或者直接靠命令动态获取。
3.2 创建挂载点并挂载
文件系统格式化完,要给它找个“门”才能进入。这个“门”就是挂载点(mount point)。通常我在根目录下建一个与应用相关的目录,比如/data。
mkdir -p /data mount /dev/vgdata/data /data挂载完成后,用df -h或lsblk检查一下:
df -h | grep data能看到/dev/mapper/vgdata-data 80G ... /data就对了。这里有个细节:使用LVM后,设备路径不仅存在于/dev/vgdata/data,在/dev/mapper/下也会出现一个名为vgdata-data的软链接。很多工具(比如某些监控脚本)会调用df并显示/dev/mapper/vgdata-data,看到这种路径不要奇怪,它们其实是同一个设备。
挂载成功后,在/data下读写文件,数据才会真正写入逻辑卷。你可以先创建一个测试文件验证一下:
touch /data/testfile如果没有任何报错,说明读写正常。
3.3 配置开机自动挂载
mount命令做的是临时挂载,一旦重启,挂载关系就会丢失。想让它永久生效,必须写入/etc/fstab。
我强烈建议不要直接写/dev/vgdata/data,而要用UUID。因为设备的名称在某些情况下可能发生变化(比如增加或减少了磁盘,/dev/vdb可能变成/dev/vdc),但UUID是文件系统创建时固化的,可靠性高得多。
先获取UUID:
blkid /dev/vgdata/data然后把下面这行追加到/etc/fstab:
UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxx" /data xfs defaults 0 0这行有6个字段,分别是:设备标识、挂载点、文件系统类型、挂载参数、是否dump(0表示不做备份)、fsck检查顺序(0表示不检查,非根分区我一般设置0)。
保存退出后,执行:
mount -a这个命令会重新读取/etc/fstab并挂载所有还没挂载的条目。如果没有任何报错,说明配置没问题。为了更稳妥,我习惯再执行一次:
df -h确认/data已经挂载且没有重复挂载。这里再多说一句:对于根分区/而言,fstab里的 fsck 顺序应该时1或2,而不是0;但数据分区写0完全没问题。
3.4 处理挂载目录权限
挂载成功后,你可能会发现普通用户无法在/data下写文件。这是因为新文件系统的根目录默认属主是root。如果是给某个业务用户用,就需要调整属主或者权限。
chown -R user:group /data chmod 755 /datachmod 755意味着属主可读写执行,组内和其他用户只有读和执行权限。如果是比较隐私的数据,建议权限收紧到700。我遇到过不少朋友,挂载是成功了,但忘改权限,业务进程启动半天写不进去,排查了一两个小时才发现是权限问题。顺序上建议先挂载,再改权限,改完立刻重启验证一下。
4. 常见问题与技巧
4.1 分区后系统内核没有立即识别
症状:fdisk创建完分区后,执行pvcreate报错/dev/vdb1不存在。
原因:内核没有重新读取分区表。
解决办法:
partprobe如果/dev/vdb1还是不出现,用partx -a /dev/vdb手动通知内核。一般情况下这两条命令能解决95%的问题。实在不行再考虑重启,但生产环境里重启代价大,所以第一条命令一定要记牢。
4.2 格式化时提示设备忙或已被占用
症状:执行mkfs.xfs /dev/vgdata/data时提示Device or resource busy。
原因:这个LV可能已经挂载在某个目录下,或者被某些进程占用了。
排查和处理:
findmnt /dev/vgdata/data # 或者 df -h | grep data确认挂载点后,先停止使用该目录的业务进程,或者直接卸载:
umount /data如果umount提示target is busy,执行lsof /data或fuser -vm /data查看哪些进程在用,然后处理这些进程。千万不能用umount -l强制卸载,虽然能马上解除挂载,但可能会导致正在写入的数据损坏。
4.3 LVM扩容:给系统盘/home扩容
银河麒麟V10里很多人会遇到“根分区空间不够”的情况,热搜里也经常看到lvm扩容home。这里分享一个典型场景:系统盘原本有100G,根分区只剩1G了,但卷组里还有空闲空间未分配给任何LV。
第一步,看VG还剩多少空间:
vgs输出里VFree就是可以继续分配的大小。如果有空闲空间,对根分区进行在线扩容:
lvextend -L +20G /dev/mapper/klv-root第二步,让文件系统感知到新空间。XFS在银河麒麟V10默认是root的文件系统,所以用:
xfs_growfs / resize2fs /dev/mapper/klv-root # 如果是ext4,用这个特别注意:XFS只能用xfs_growfs且指定挂载点,不能用resize2fs,否则会报错。扩容过程中业务不需要停,这是LVM最大的优势之一。
4.4 开机挂载失败导致系统进入紧急模式
症状:重启后系统卡在Welcome to emergency mode,登录后提示无法挂载某个文件系统。
原因:/etc/fstab里的挂载配置写错了,或者设备UUID不匹配。
解决办法并不复杂。在紧急模式输入root密码后,先注释或者修正/etc/fstab的错误行,然后重启。如果fstab写错了,系统会卡住,这时执行:
mount -o remount,rw / vi /etc/fstab把错误行注释掉。更稳妥的做法是:改完fstab后,每次都用mount -a验证,确认无误再重启。我自己的习惯是,每次配置fstab后至少重启一次或执行一次reboot前检查,把风险消灭在开机前。
4.5 LV空间不足,但VG有剩余空间
这是最常遇到的问题。虽然VG里还有空闲,但LV本身不够用。解决办法很简单,先把VG里的空间扩展给LV:
lvextend -L +10G /dev/vgdata/data然后让文件系统扩容:
xfs_growfs /data # XFS resize2fs /dev/vgdata/data # ext4如果是XFS,扩容是完全在线的,不用卸载;如果是ext4,其实也可以在挂载状态下在线扩容(只要不是缩容)。整个过程很顺滑,业务不会中断。
4.6 误操作导致数据丢失
LVM和分区操作里,最危险的是把vgcreate、pvcreate、mkfs用错设备。这些命令执行后往往无法恢复。我建议每次执行前都使用lsblk再确认一遍目标设备,尤其是当系统里有多个大小一致的磁盘时。
另外强烈建议养成备份习惯。如果是生产环境,做任何LVM修改之前,优先使用快照功能。LVM本身就支持给LV打快照,例如:
lvcreate -s -n data_snap -L 5G /dev/vgdata/data这个快照会给你一个“后悔药”。确认业务稳定后,再用lvremove删除快照。这个操作我不敢说每次都做,但重要数据前一定会做。
4.7 关于图形化工具和命令集
银河麒麟V10桌面版自带“磁盘”工具(GNOME Disks),可以在图形界面里完成分区、格式化和挂载,适合不习惯命令行的朋友。界面操作很简单,选中盘,点齿轮图标,能创建分区、格式化为ext4/xfs、临时挂载。不过图形工具对LVM的支持比较有限,建PV/VG/LV还是得用命令行。
日常排障最常用的命令我整理成了一张速查表:
| 需求 | 命令 |
|---|---|
| 查看磁盘和分区 | lsblk/fdisk -l |
| 查看PV信息 | pvs/pvdisplay |
| 查看VG信息 | vgs/vgdisplay |
| 查看LV信息 | lvs/lvdisplay |
| 查看挂载和文件系统 | df -h/blkid |
| 创建PV | pvcreate /dev/vdb1 |
| 创建VG | vgcreate vgdata /dev/vdb1 |
| 创建LV | lvcreate -n data -L 80G vgdata |
| 格式化 | mkfs.xfs /dev/vgdata/data |
| 挂载 | mount /dev/vgdata/data /data |
| 永久挂载 | 编辑/etc/fstab后mount -a |
| 在线扩容文件系统 | xfs_growfs /data或resize2fs |
| 重新读取分区表 | partprobe |
| 查看谁占用了挂载点 | lsof /data/fuser -v /data |
我自己的习惯是把这张表打印出来或者存成备忘文件,每次做磁盘操作前先看一眼,尤其是“查看确认”那几行,能避免很多低级错误。
最后再分享一个小技巧:做完LVM全套操作后,建议立刻写一个简单的检查脚本,内容包括lsblk、df -h、vgs,并输出到日志文件。这样下次排查问题时,能快速对比出“上次达标”和“这次异常”的差异。银河麒麟V10本身命令集完整,网上也有大量命令手册可查,但真正有价值的还是自己在操作过程中积累的“确认机制”——设备名对不对、空间够不够、fstab语法有没有错。每次动手之前默念三遍:确认设备名,确认数据可丢,确认有备份。养成这种习惯,比记住任何一条命令都重要。