VMware下扩展ubuntu虚拟机根目录分区

原文链接:http://t.cn/RzCP9E2
翻译源链接:http://imcczy.com/how-to-expand-the-root-filesystem-in-vmware.html

转载说明:

此文下面的有重新需要分区的操作,分区的操作与正常装系统分区不同,是需要手动指定扇区(sectors)的起始点的, 这里给出计算方式,其实当打出命令时也是有提示的
类似这样的提示
Disk /dev/sda: 15 GiB, 16106127360 bytes, 31457280 sectors
Units: sectors of 1 * 512 = 512 bytes

sectors 就是你的硬盘当前分区总扇区大小
可以先计算出自己打算要分出的分区大小 例如 根分区 需要14G swap分1G
1024*14=14336bytes(1.4mb) *1024*1024 = 15032385536bytes(14G)
15032385536 / 512 = 29360128 sectors 得出了从起始点到此扇区结束就是14G了

年代久远,谨慎尝试

虚拟机用着用着空间就不够了,google了一篇文章,试了一下,有用,征得作者同意,翻译了下。删了一些无关的东西。

注:

作者输入命令时都用“sudo bash”,用sudo或者su就可以了。

再注:

涉及到磁盘分区表删除,最好先备份整个虚拟机!

检查文件系统:

cruz@ubuntu:~$ sudo bash
[sudo] password for cruz: 
root@ubuntu:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.0G  2.7G  5.9G  32% /
udev            488M  4.0K  488M   1% /dev
tmpfs           199M  800K  198M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            497M   76K  496M   1% /run/shm
root@ubuntu:~# 

检查磁盘分区表:

root@ubuntu:~# fdisk -l /dev/sda
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00001dec

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    18874367     9436160   83  Linux
/dev/sda2        18876414    20969471     1046529    5  Extended
/dev/sda5        18876416    20969471     1046528   82  Linux swap / Solaris
root@ubuntu:~# 

记住上面显示的交换分区大小(Blocks的数目),这里就是1046528。如果交换分区和根目录不在一个磁盘(比如/dev/sdb),就不要记了。在本文,交换分区在/dev/sda,需要重新分区。

先关闭linux:
root@ubuntu:~# shutdown -h now

在虚拟机设置,硬盘,实用工具下选择扩展。扩展虚拟机的最大磁盘大小,这里将磁盘设置为15G,然后重启。

重新设置分区表要删除所有的旧分区、关闭系统的swap:

cruz@ubuntu:~$ sudo bash
[sudo] password for cruz: 
root@ubuntu:~# free -m
             total       used       free     shared    buffers     cached
Mem:           992        924         67          0         43        426
 -/+ buffers/cache:        454        537
Swap:         1021          0       1021
root@ubuntu:~# swapoff -a
root@ubuntu:~# free -m
             total       used       free     shared    buffers     cached
Mem:           992        924         67          0         43        426
 -/+ buffers/cache:        454        537
Swap:            0          0          0
root@ubuntu:~# 

接下来的步骤会删除/dev/sda1和/dev/sda2,一定要记住分区表的起始位置,这里是2048!

root@ubuntu:~# fdisk /dev/sda

Command (m for help): p

Disk /dev/sda: 16.1 GB, 16106127360 bytes
255 heads, 63 sectors/track, 1958 cylinders, total 31457280 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00001dec

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    18874367     9436160   83  Linux
/dev/sda2        18876414    20969471     1046529    5  Extended
/dev/sda5        18876416    20969471     1046528   82  Linux swap / Solaris

Command (m for help): d
Partition number (1-5): 1

Command (m for help): d
Partition number (1-5): 2

Command (m for help): p

Disk /dev/sda: 16.1 GB, 16106127360 bytes
255 heads, 63 sectors/track, 1958 cylinders, total 31457280 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00001dec

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): 

不要退出fdisk,接着创建新分区

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-31457279, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-31457279, default 31457279): 30410751

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (1-4, default 2): 
Using default value 2
First sector (30410752-31457279, default 30410752): 
Using default value 30410752
Last sector, +sectors or +size{K,M,G} (30410752-31457279, default 31457279): 
Using default value 31457279
注意记得创建交换分区,大小别搞错,这里是104652831457279-30410571=1046528),即要留一部分block用于创建swap。修改sda2的分区类型为82,即交换分区。

Command (m for help): p

Disk /dev/sda: 16.1 GB, 16106127360 bytes
255 heads, 63 sectors/track, 1958 cylinders, total 31457280 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00001dec

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    30410751    15204352   83  Linux
/dev/sda2        30410752    31457279      523264   83  Linux

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 82
Changed system type of partition 2 to 82 (Linux swap / Solaris)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
root@ubuntu:~# 
重启虚拟机:
root@ubuntu:~# shutdown -r now

交换分区挂载需要UUID标识符。创建新的交换分区不会匹配旧的UUID,导致重启无法挂载swap分区。这里主要有两种解决方法:在/etc/fstab里写入新的UUID,或者直接将旧的UUID覆盖在新分区上,这里选择后者。 awk命令用来显示旧的UUID,dd命令确保分区没数据。

cruz@ubuntu:~$ sudo bash
[sudo] password for cruz: 
root@ubuntu:~#  awk '/swap/ { print $1 }' /etc/fstab
#
UUID=8bb62351-4436-47df-92fe-af2865f03461
root@ubuntu:~# swapoff -a
root@ubuntu:~# free -m
             total       used       free     shared    buffers     cached
Mem:           992        695        296          0         23        325
-/+ buffers/cache:        346        645
Swap:            0          0          0
root@ubuntu:~# dd if=/dev/zero of=/dev/sda2
dd: writing to '/dev/sda2': No space left on device
1046529+0 records in
1046528+0 records out
535822336 bytes (536 MB) copied, 11.9388 s, 44.9 MB/s
root@ubuntu:~# mkswap -U 8bb62351-4436-47df-92fe-af2865f03461 /dev/sda2
Setting up swapspace version 1, size = 523260 KiB
no label, UUID=8bb62351-4436-47df-92fe-af2865f03461
root@ubuntu:~# swapon -a
root@ubuntu:~# free -m
             total       used       free     shared    buffers     cached
Mem:           992        693        298          0         23        325
-/+ buffers/cache:        345        646
Swap:          510          7        503
root@ubuntu:~#
最后,调整分区大小:
root@ubuntu:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.0G  2.8G  5.8G  33% /
udev            488M  4.0K  488M   1% /dev
tmpfs           199M  788K  198M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            497M  200K  496M   1% /run/shm
root@ubuntu:~# resize2fs /dev/sda1
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/sda1 to 3801088 (4k) blocks.
The filesystem on /dev/sda1 is now 3801088 blocks long.

root@ubuntu:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        15G  2.8G   11G  21% /
udev            488M  4.0K  488M   1% /dev
tmpfs           199M  788K  198M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            497M  200K  496M   1% /run/shm
root@ubuntu:~# 
### Linux 文件系统根目录磁盘空间不足的解决方案 #### 一、分析问题 Linux 系统中,根目录 (`/`) 的磁盘空间不足可能导致系统运行异常甚至崩溃。当 `/` 占用超过 90% 时,可能无法正常安装软件或执行其他操作[^1]。因此,及时释放空间并优化存储结构至关重要。 --- #### 二、通过删除无用文件释放空间 可以通过清理不必要的日志文件、缓存数据和其他临时文件来释放空间: 1. **清理旧的日志文件** 日志文件通常位于 `/var/log/` 目录下。可以使用 `journalctl --vacuum-time=1d` 命令清除较早的日志记录[^4]。 2. **清空 APT 缓存** 对于基于 Debian 或 Ubuntu 的系统,APT 软件包管理器会保留已下载的 `.deb` 文件在 `/var/cache/apt/archives/` 中。这些文件可通过以下命令移除: ```bash sudo apt-get clean ``` 3. **删除临时文件** 清理 `/tmp/` 和 `/var/tmp/` 下不再使用的临时文件: ```bash sudo rm -rf /tmp/* sudo rm -rf /var/tmp/* ``` 4. **卸载不需要的软件包** 使用 `dpkg` 或 `rpm` 列出未使用的软件包,并将其卸载以节省空间: ```bash sudo dpkg --list | grep ^rc | awk '{print $2}' | xargs sudo dpkg --purge ``` --- #### 三、调整分区布局 如果上述方法仍不足以解决问题,则需考虑重新分配磁盘空间。 1. **扩展分区大小** 如果物理磁盘有剩余可用空间,可利用工具如 `lvextend` 扩展逻辑卷大小。假设目标设备为 `/dev/mapper/centos-root`,则执行如下命令: ```bash sudo lvextend -L +1G /dev/mapper/centos-root sudo resize2fs /dev/mapper/centos-root # ext4 文件系统适用 ``` 上述命令将增加 1GB 容量至根分区[^3]。 2. **减少 Home 分区的空间** 默认情况下,许多发行版会在安装过程中分配较多空间给 `/home`,而 `/` 可能显得不够充分。此时,可以从 `/home` 移动部分容量到 `/`。具体步骤包括备份重要数据后缩小 `/home` 并扩充 `/` 的 LVM 配置[^2]。 --- #### 四、监控与预防措施 为了防止未来再次发生类似状况,建议定期检查磁盘利用率并通过设置警报机制提前预警: ```bash df -hT # 查看各分区及其类型 watch -n 60 df -h # 实时监测每分钟变化趋势 ``` 此外,在规划虚拟机初始配置阶段应合理预估需求,预留足够的磁盘资源。 --- ### 总结 综合运用以上策略——即先尝试清理冗余项降低即时压力;必要时借助专业技术手段修改现有架构比例关系从而根本化解难题——能够有效应对 Linux 根目录因磁盘饱和引发的一系列连锁反应现象。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值