如何对VMware虚拟机磁盘扩容?

前置知识

动态卷管理(LVM,Logical Volume Manger)实现将多个硬盘和硬盘分区做成一个逻辑卷,并将逻辑卷统一管理。创建LVM顺序为:物理卷PV->卷组VG->逻辑卷LV。
物理卷(PV,Physical Volume):物理硬盘或分区;
卷组(VG,Volume Group):一个或多个物理卷集合;
逻辑卷(Logical Volume):供系统使用的元设备,虚拟分区。

LVM常用的命令:

功能 PV物理卷管理 VG卷组管理 LV逻辑卷管理
扫描 pvscan vgscan lvscan
创建 pvcreate vgcreate lvcreate
查看 pvdisplay vgdisplay lvdisplay
删除 pvremove vgremove lvremove
扩展 / vgextend lvextend
缩容 / vgreduce lvreduce

前提

首先查看现有磁盘容量使用状况(我是在安装软件时提示:设备空间不足)。

df -hl
lsblk

image

对于已经创建的虚拟机,想要扩展磁盘容量(不添加新的磁盘)要求该虚拟机没有快照,所以首先要把快照都删除。删除后选择扩容后的磁盘容量大小。

image

磁盘分区

fdisk -l          #磁盘
fdisk /dev/sda    #磁盘分区

image

磁盘分区常见命令(这四个就够用了):

m                #帮助手册
n                #创建新分区
p                #分区类别
w                #保存分区

image

分区退出后重新查看磁盘情况然后重启。

fdisk -l

image

重启后磁盘格式化。

mkfs.ext4 /dev/sda3

image

创建LVM

vgcreate vg01 /dev/sda3   #这里创建vg会自动创建pv
lvcreate -L 30G vg01      #创建LV

image
image

mkfs.ext4 /dev/vg01/lvol0   #格式化LV

image

挂载

mkdir -p /data
mount -t ext4 /dev/vg01/lvol0 /data

image

这样挂载重启虚拟机之后挂载信息又不见了,所以需要保存挂载信息使得下次启动后能够自动挂载。最后加一行然后保存重启。

vim /etc/fstab

image

还留存一个问题就是挂载点只允许root用户读写文件,普通用户没有权限,目前解决的方法是使用暴力加权限方法。

sudo chmod -R 777 /data

可能遇到的问题

1. 提示挂载需要root权限用户

切换root用户。

su

然后遇到第二个问题。su命令切换用户输入密码后,提示:鉴定故障。因为在安装linux系统时未设置root用户密码造成的,需要重新设置密码后再切换用户。

sudo passwd root

2. 修改/etc/fstab后无法正常开机

先说原因,原因是修改的内容格式不正确。这里我补充一点有关/etc/fstab文件的内容,引自相关链接

当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。
在这个文件下,要关注的是六个域,分别为:[file system]、[mount point]、[type] 、[options]、[dump]、[pass]。

  1. [file sysytem]:用来指定你要挂载的文件系统的设备名称或块信息,也可以是远程的文件系统。做过嵌入式linux开发的朋友都可能知道 mount 192.168.1.56:/home/nfs /mnt/nfs/ -o nolock (可以是其他IP)命令所代表的意义。它的任务是把IP为192.168.1.56的远程主机上的/home/nfs/目录挂载到本机的/mnt/nfs /目录之下。如果要把它写进/etc/fstab文件中,file system这部分应填写为:/192.168.1.56:/home/nfs/。
    如果想把本机上的某个设备(device)挂载上来,写法如:/dev/sda1、/dev/hda2或/dev/cdrom,其中,/dev/sda1 表示第一个串口硬盘的第一个分区,也可以是第一个SCSI硬盘的第一个分区,/dev/hda1表示第一个IDE硬盘的第一个分区,/dev/cdrom 表示光驱。
    此外,还可以label(卷标)或UUID(Universally Unique Identifier全局唯一标识符)来表示。用label表示之前,先要e2label创建卷标,如:e2label /dir_1 /dir_2,其意思是说用/dir_2来表示/dir_1的名称。然后,再在/etc/fstab下添加:LABEL=/dir_2 /dir_2 。重启后,系统就会将/dir_1挂载到/dir_2目录上。对于UUID,可以用vol_id -u /dev/sdax来获取。比如我想挂载第一块硬盘的第一个分区,先用命令vol_id -u /dev/sda11 来取得UUID,比如是:5dc08a62-3472-471b-9ef5-0a91e5e2c126,然后在这个域上填写: UUID=5dc08a62-3472-471b-9ef5-0a91e5e2c126,即可表示/dev/sda11。Red Hat linux 一般会使用label,而Ubuntu linux 一般会用UUID。

  2. [mount point]:挂载点,也就是自己找一个或创建一个dir(目录),然后把文件系统[file sysytem]挂到这个目录上,然后就可以从这个目录中访问要挂载文件系统。对于swap分区,这个域应该填写:none,表示没有挂载点。

  3. [type]:这里用来指定文件系统的类型。下面的文件系统都是目前Linux所能支持的:adfs、befs、cifs、ext3、 ext2、ext、iso9660、kafs、minix、msdos、vfat、umsdos、proc、reiserfs、swap、 squashfs、nfs、hpfs、ncpfs、ntfs、affs、ufs。

  4. [options]:这里用来填写设置选项,各个选项用逗号隔开。由于选项非常多,而这里篇幅有限,所以不再作详细介绍,如需了解,请用 命令 man mount 来查看。但在这里有个非常重要的关键字需要了解一下:defaults,它代表包含了选项rw,suid,dev,exec,auto,nouser和 async。

  5. [dump]:此处为1的话,表示要将整个[file sysytem]里的内容备份;为0的话,表示不备份。现在很少用到dump这个工具,在这里一般选0。

  6. [pass]:这里用来指定如何使用fsck来检查硬盘。如果这里填0,则不检查;挂载点为 / 的(即根分区),必须在这里填写1,其他的都不能填写1。如果有分区填写大于1的话,则在检查完根分区后,接着按填写的数字从小到大依次检查下去。同数字 的同时检查。比如第一和第二个分区填写2,第三和第四个分区填写3,则系统在检查完根分区后,接着同时检查第一和第二个分区,然后再同时检查第三和第四个分区。

另外如果不确定是否修改正确,但是又不想靠重启来验证,可以尝试挂载看看是否报错。

mount -a
posted @ 2023-06-05 14:18  darkpool  阅读(562)  评论(0编辑  收藏  举报