如何对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
对于已经创建的虚拟机,想要扩展磁盘容量(不添加新的磁盘)要求该虚拟机没有快照,所以首先要把快照都删除。删除后选择扩容后的磁盘容量大小。
磁盘分区
fdisk -l #磁盘
fdisk /dev/sda #磁盘分区
磁盘分区常见命令(这四个就够用了):
m #帮助手册
n #创建新分区
p #分区类别
w #保存分区
分区退出后重新查看磁盘情况然后重启。
fdisk -l
重启后磁盘格式化。
mkfs.ext4 /dev/sda3
创建LVM
vgcreate vg01 /dev/sda3 #这里创建vg会自动创建pv
lvcreate -L 30G vg01 #创建LV
mkfs.ext4 /dev/vg01/lvol0 #格式化LV
挂载
mkdir -p /data
mount -t ext4 /dev/vg01/lvol0 /data
这样挂载重启虚拟机之后挂载信息又不见了,所以需要保存挂载信息使得下次启动后能够自动挂载。最后加一行然后保存重启。
vim /etc/fstab
还留存一个问题就是挂载点只允许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]。
-
[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。 -
[mount point]:挂载点,也就是自己找一个或创建一个dir(目录),然后把文件系统[file sysytem]挂到这个目录上,然后就可以从这个目录中访问要挂载文件系统。对于swap分区,这个域应该填写:none,表示没有挂载点。
-
[type]:这里用来指定文件系统的类型。下面的文件系统都是目前Linux所能支持的:adfs、befs、cifs、ext3、 ext2、ext、iso9660、kafs、minix、msdos、vfat、umsdos、proc、reiserfs、swap、 squashfs、nfs、hpfs、ncpfs、ntfs、affs、ufs。
-
[options]:这里用来填写设置选项,各个选项用逗号隔开。由于选项非常多,而这里篇幅有限,所以不再作详细介绍,如需了解,请用 命令 man mount 来查看。但在这里有个非常重要的关键字需要了解一下:defaults,它代表包含了选项rw,suid,dev,exec,auto,nouser和 async。
-
[dump]:此处为1的话,表示要将整个[file sysytem]里的内容备份;为0的话,表示不备份。现在很少用到dump这个工具,在这里一般选0。
-
[pass]:这里用来指定如何使用fsck来检查硬盘。如果这里填0,则不检查;挂载点为 / 的(即根分区),必须在这里填写1,其他的都不能填写1。如果有分区填写大于1的话,则在检查完根分区后,接着按填写的数字从小到大依次检查下去。同数字 的同时检查。比如第一和第二个分区填写2,第三和第四个分区填写3,则系统在检查完根分区后,接着同时检查第一和第二个分区,然后再同时检查第三和第四个分区。
另外如果不确定是否修改正确,但是又不想靠重启来验证,可以尝试挂载看看是否报错。
mount -a