[Linux]VMware 无重启添加scsi硬盘实现LVM动态扩容(上)

本文介绍了如何在不重启Linux系统的情况下添加SCSI硬盘并将其格式化为逻辑卷,以解决文件系统空间不足的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



注:本实验在VMware 7.1.2 环境中完成,RHEL5.5,磁盘采用逻辑卷(LVM)的管理方式。

安装了一些软件过后发现虚拟机Linux的文件系统空间不够了,

[root@server01 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      3.9G  3.7G     0 100% /       <==使用率已经高达100%
/dev/sda1              31M  7.8M   22M  27% /boot
tmpfs                 252M     0  252M   0% /dev/shm

于是想重新从物理硬盘上创建一块虚拟硬盘添加上去,将新的硬盘格式化成逻辑卷,对磁盘进行扩容。


1.添加新硬盘

[1]在VMware中添加一块虚拟硬盘是很简单的: 选中你的虚拟机系统->设置,

[2]在弹出的 “虚拟机设置”中选择最下方的添加,然后添加硬件类型 硬盘-> 下一步 ->创建一个新的虚拟磁盘 -> 选择磁盘类型为SCSI

[这里一定要选SCSI(Small Computer System Interface),即小型计算机系统接口。目前主流SCSI硬盘有两种,一种是支持热插拔的,还有一种数据接口和电源接口排列和普通IDE硬盘相似的不能热插拔。]

最后根据提示做相应的设置,直至完成新硬盘的建立。

[3] 硬盘添加完成后,重启后内核会自动探测到这个新的设备,并添加到系统中。你可以用 fdisk -l 命令查看到这块硬盘,一般是以 /dev/sd[a,b,c,.....] 命名的设备。

[4] 但是在实际应用中,我们会选择尽可能地不去重启系统和服务,现在我们就来探讨一种无重启添加scsi硬盘的方法。

在第[2]步完成后,跳过第三步,我们先 cat /proc/scsi/scsi 这个文件,会看到系统中已经包含了一块scsi硬盘


这时我们以root权限执行 echo "scsi add-single-device 0 0 1 0" > /proc/scsi/scsi  添加scsi设备

[*

解释一下 scsi add-single-device a b c d 这个指令中的参数:                        # 相反  scsi remove-single-device a b c d 是用来移除设备的

a ------- Host 是硬盘所在的SCSI控制器的编号,这里只有一个控制器,所以为0

b ------- Channel 硬盘所在SCSI通道的编号,这里是单通道,为0

c ------- Id 硬盘的SCSI ID号,就是插入的硬盘插槽编号,

              这里我最开始安装虚拟Linux系统的时候虚拟了一个SCSI硬盘(SCSI ID为0),

              现在再虚拟一块出来的话,SCSI ID为1

d ------- Lun ,硬盘的lun号[logical unit number]即逻辑单元号,指的是一个用于SCSI总线的唯一的识别号,

          总线使它能区别其他八个设备(它们每个都是一个逻辑单元)。

*]

这时再 cat /proc/scsi/scsi 就会发现新的scsi的相关信息已经加载到内核中去了。

检测一下 fdisk -l : 已经有两块硬盘设备了: /dev/sda 和 /dev/sdb ,但是/dev/sdb上却还没有分区表,接下来我们将格式化这块新的硬盘:



2.格式化成逻辑卷

[root@server01 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.


Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)


Command (m for help): n                      # n是新建一个分区
Command action
   e   extended                                           # e代表扩展分区
   p   primary partition (1-4)                     # p代表主分区
p                                                                  # 这里我们选择p,每个分区表最多可以有4个主分区
Partition number (1-4): 3                        # 可以选择1-4,这里我选3
First cylinder (1-522, default 1):            # 选择首个柱面,默认的就好
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-522, default 522):      # 这里如果选择默认值的话就会使用整块硬盘,你可以自定义大小如 +500M
Using default value 522


Command (m for help): p                      # p代表打印当前的分区表


Disk /dev/sdb: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System
/dev/sdb3               1         522     4192933+  83  Linux          # 这里的文件系统为Linux,我想要Linux LVM的文件系统,那么我需要转换


Command (m for help): t                     #  t代表转换文件系统
Selected partition 3                               # 当前分区表只有一个分区,默认选择了分区3
Hex code (type L to list codes): 8e     # 8e代表LVM的文件系统标志,你也可以输入 L 了解具体更多文件系统标志
Changed system type of partition 3 to 8e (Linux LVM)


Command (m for help): w                   # 这里一定要记得保存,否则前功尽弃
The partition table has been altered!


Calling ioctl() to re-read partition table.
Syncing disks.
[root@server01 ~]# 

本篇暂时讲到这里,先歇歇手。磁盘已经格式化好了,下篇我们将一起来对原有的文件系统进行扩容。

<think>嗯,用户正在寻找在VMware中扩展Ubuntu20.04虚拟机硬盘空间的教程。从对话历史看,用户特别提到Ubuntu20.04版本,这很关键,因为不同Linux版本的分区工具或步骤可能略有不同。用户提供的参考材料涉及到Ubuntu16.04和20.04的扩容,其中[^4]引用还提到了处理交换分区的问题。用户似乎是个有一定技术基础但需要详细指导的用户,毕竟虚拟机硬盘扩容是个中高级操作。可能之前尝试时遇到了困难,或者看到不同教程存在版本差异而困惑。考虑到操作涉及分区调整这种高风险行为,用户应该需要非常明确的警告和备份提示。仔细梳理几个引用:[^1][^2][^3]都是针对Ubuntu16.04的,主要用GParted图形工具操作;而[^4]是专门针对20.04的,特别提到要处理逻辑分区和交换空间的问题。这说明在Ubuntu20.04中,默认分区方案可能与早期版本不同,更可能采用LVM或包含交换分区作为逻辑分区。准备教程时必须强调三个关键区别点:1)Ubuntu20.04默认使用GPT分区表还是MBR2)swap分区是否作为逻辑分区存在3)是否需要调整systemd的fstab配置。根据引用[^4],删除逻辑分区是必要步骤,这说明Ubuntu20.04可能采用扩展分区嵌套swap的设计。在构造回复时需要突出风险控制:强制要求快照备份、准备liveUSB救急。操作步骤要区分虚拟层扩展和系统内分区调整两个阶段,对gparted的图形界面操作要足够具体,比如右键菜单选项的精确描述。最后校验步骤很重要,要教用户用df和lsblk双验证,因为有些挂载点可能被重复计算。考虑到用户可能会遇到文件系统错误,还需要补充说明用resize2fs/ext4的操作(Ubuntu20.04默认用ext4)。虽然引用中未提及,但应该警告XFS等其他文件系统需要不同工具。如果用户后续反馈失败,可能需要考虑UUID变动问题——这正是引用[^3]提到的关键点。</think> 好的,请看**VMware虚拟机 Ubuntu 20.04 Linux 硬盘扩容详细教程**。操作涉及分区调整,**请务必提前备份虚拟机重要数据并创建快照**,以防操作失误导致数据丢失[^3][^4]。 ## 📌 一、在VMware中扩展虚拟硬盘容量(虚拟机层) 1. **🔌 完全关闭Ubuntu 20.04客户机。** (运行状态的虚拟机无法更改磁盘大小)。 2. **⚙ 打开虚拟机设置:** 在VMware中选中你的Ubuntu 20.04虚拟机,点击 `编辑虚拟机设置` (Edit virtual machine settings)。 3. **🖥 选择硬盘:** 在硬件列表中找到并点击 `硬盘` (SCSI或SATA)。 4. **📈 扩展磁盘容量:** * 点击右侧的 `扩展` (Expand) 按钮(Disk Utilities)。 * 在弹出窗口中,输入你希望扩容到的 **总硬盘大小**(例如,原始20GB扩容到40GB,则输入 `40`)。 * 点击 `扩展` (Expand) 按钮确认。 * 点击 `确定` (OK) 保存虚拟机设置。 **注意:** * 扩展的是 **虚拟硬盘的物理空间上限**,Ubuntu系统内部此时还无法使用新增的空间[^1][^2][^3][^4]。 * 确保你的主机物理磁盘有足够空间容纳扩展后的虚拟机硬盘文件(如 `.vmdk` 文件)[^3]。 ## 📌 二、在Ubuntu内分配新增空间(操作系统层) 此时启动Ubuntu,你会发现硬盘总空间变大了,但原有分区大小未变,新增空间处于“未分配”状态。你需要使用分区工具进行分配。 ### 🔧 方法一:使用GParted图形化工具 (推荐) 这是最直观的方法,特别适合需要调整分区布局的情况[^1][^2][^4]。 1. **🔍 安装GParted:** 启动Ubuntu 20.04。打开终端,运行: ```bash sudo apt update sudo apt install gparted ``` 2. **⏳ 启动GParted:** * 按 `Super` (Windows) 键搜索 "GParted" 并打开。 * 或在终端运行: `sudo gparted` * **可能需要输入管理员密码。** 3. **🔓 确认磁盘信息:** * 在GParted右上角下拉菜单选择你的主硬盘设备(通常是 `/dev/sda`)。 * 查看分区结构图。你会看到原有分区(如 `/dev/sda1`, `/dev/sda2`),以及末尾新增的 **未分配空间** (unallocated)。 4. **💡 处理可能的障碍 (常见于Ubuntu默认安装):** * **关键区别点:Ubuntu安装程序在20.04上为交换分区(swap)创建的默认布局通常是:一个主分区(ext4)作为 `/` 或 `/boot`,然后创建一个扩展分区(Extended partition),在该扩展分区内再创建逻辑分区(Logical partition)作为Linux swap分区[^4]。** * **未分配空间在扩展分区之后/被逻辑分区阻挡(如果存在):** * **定位交换分区:** 查看分区列表和图,找到标记为 `linux-swap` 并可能位于 `/dev/sda5`(或类似逻辑分区号)的分区。 * **禁用交换分区:** **务必先右键点击交换分区(`linux-swap`),选择 `Swapoff` 禁用交换功能[^4]。**(如果选项是 `Swapon` 则表示已禁用,无需操作)。 * **删除逻辑交换分区:** 右键点击该 `linux-swap` 逻辑分区,选择 `删除` (Delete)。此时该空间会变成“未分配”状态 **但它仍在扩展分区内部**。 * **删除扩展分区:** 右键点击包含(或曾包含)交换分区的 **扩展分区** (通常显示为 `Extended` 类型),选择 `删除` (Delete) [^4]。执行后,原本的扩展分区空间(包含交换分区和其未分配空间)会与VMware扩展出来的空间 **合并成一个大的连续未分配空间**。这个未分配空间现在位于你想扩容的主分区(如 `/dev/sda1` 或 `/dev/sda2`)之后了。(主要目标:确保未分配空间紧挨在待扩容的主分区之后,中间不能隔着其他分区) 5. **📐 扩容目标分区 (如主分区 `/dev/sda1` 或 `/dev/sda2`):** * 右击你要扩容的分区(通常是包含 `/` 文件系统的分区,可能是 `/dev/sda2` 或 `/dev/sda3`)。 * 选择 `调整大小/移动` (Resize/Move)。 * 在弹出窗口中: * 用鼠标拖拽分区条右侧的箭头,直到它填满所有可用的未分配空间,或者 * 在 `新大小` (New size) 框中输入扩容后的总大小(最大值就是原始分区大小加上所有可用未分配空间)。 * 点击 `调整大小` (Resize)。 6. **💾 应用所有操作:** **前面所有删除、调整大小操作都只是计划操作 (挂起操作)!** * 点击GParted工具栏上的绿色 `√` 按钮 (`全部应用操作` / Apply All Operations)。 * 确认弹出的警告对话框。这个过程可能需要一些时间,取决于分区大小和数据量。 **切勿中断此过程!** 7. **✅ 验证:** * 操作完成后,查看分区图,确认目标分区已增大,且未分配空间消失。 * 关闭GParted。 ### ⚙ 方法二:使用命令行工具 (`parted`, `resize2fs`) 此方法更高效且无需安装额外GUI,但要求更仔细操作。 1. **🔑 启动终端。** 2. **🔄 检查磁盘信息:** ```bash lsblk -f # 查看分区和文件系统挂载点 sudo parted /dev/sda print free # 查看硬盘/分区信息及未分配空间 ``` 确定主分区设备名(如 `/dev/sda2`)和未分配空间大小。 3. **🧪 运行`parted`:** ```bash sudo parted /dev/sda ``` 4. **在`parted`交互命令行中:** ```bash (parted) print free # 再次确认未分配空间位置 (parted) resizepart <分区号> <结束位置> # 例如:resizepart 2 100% (将2号分区扩展到剩余所有空间) # 注意:<结束位置>可以用百分比(100%表示到末尾),或者具体大小如40GB(单位需与显示一致)。 (parted) quit ``` **<分区号>** 是要扩容的分区号(如 `2` 对应于 `/dev/sda2`)。 5. **📡 扩展文件系统:** 分区扩容后,文件系统本身大小未变。需要使用 `resize2fs`(适用于ext4等): ```bash sudo resize2fs /dev/sda2 # 将/dev/sda2上的文件系统扩展到分区当前的最大可用空间 ``` * 如果文件系统是挂载状态(如根目录 `/` 通常必须挂载),`resize2fs` 支持在线操作[^3]。 6. **🔄 检查UUID是否需要更新(极少情况):** 如果分区布局发生巨大变化(如删除并重建了交换分区),需更新 `/etc/fstab`。使用 `sudo blkid` 查看新分区的UUID。如果交换分区UUID变化,需要修改 `/etc/fstab` 中对应的UUID[^3]。 7. **🔄 重建交换分区(如果之前删除了):** 如果使用GParted方法删除了交换分区,需要新建: * 在剩余空间创建新分区并标记为 `linux-swap`(使用 `fdisk`/`gdisk` 或 `parted` 或 `cfdisk`)。 * 格式化:`sudo mkswap /dev/sdaX`(X是分区号)。 * 获取新UUID:`sudo blkid | grep swap`。 * 更新 `/etc/fstab`:用新UUID替换旧的swap分区UUID行。 * 激活:`sudo swapon -a`。 ## 📌 三、验证扩容结果 1. **💻 重启虚拟机:** ```bash sudo reboot ``` 2. **✅ 检查磁盘空间:** ```bash df -h # 查看已挂载的文件系统使用情况,检查目标分区(如 `/`)大小是否增加。 lsblk # 查看块设备大小和层次结构。 ``` ### 🧪 示例输出 (df -h) ``` Filesystem Size Used Avail Use% Mounted on ... /dev/sda2 39G 10G 27G 28% / # 假设原来是20G,现已扩展为39G ... ``` ## 📖 关键注意事项 * **备份与快照[^3][^4]:** 分区操作有风险,强烈建议在开始前为虚拟机创建快照。 * **虚拟机状态:** VMware扩展磁盘 **必须** 在客户机关闭后进行。 * **分区方案:** 本教程默认使用MBR分区表(最多4个主分区)或GPT(支持更多)。如果你的虚拟机使用GPT分区表,操作逻辑类似,工具支持也更好(如GParted)。 * **交换分区处理:** Ubuntu 20.04默认安装可能使用逻辑分区作为swap。如果它在待扩容分区之后,需先处理(如禁用删除扩展分区或交换分区)才能合并未分配空间[^4]。Ubuntu 19.10以后版本可能默认使用swapfile,这就不需要额外调整swap分区。 * **工具选择:** GParted对分区布局调整更直观,命令行工具则更轻量快捷。 * **文件系统类型:** `resize2fs` 适用于ext2/3/4。如果是其他文件系统(如xfs, btrfs),需用对应工具(如 `xfs_growfs`, `btrfs filesystem resize`)。 * **根目录挂载点:** `resize2fs` 支持扩展正在挂载的文件系统。 * **UUID变化:** 如果删除了分区并新建(如swap),UUID会变,务必更新 `/etc/fstab`[^3]。 ## ❓ 相关问题 1. 🛠️ **如果扩容操作过程中提示"无法调整正在挂载的分区"怎么办?** (提示:Ubuntu Live CD/USB启动运行GParted) 2. 🤔 **Ubuntu 20.04默认使用swapfile还是swap分区?我的情况需要重建swap吗?** (提示:检查 `/swapfile` 和 `swapon --show`) 3. 🔁 **如何在VMware中缩小Ubuntu虚拟机的硬盘空间?** (操作更复杂且有风险) 4. 🧪 **使用命令行扩容后,`df -h`显示空间未增加但`lsblk`显示分区大小增加了是什么原因?** (提示:文件系统未能正确扩展) 5. 📄 **如何正确更新 `/etc/fstab` 中的UUID引用?** (提示:`blkid` 和 `nano` 操作)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值