多年来,我在 Linux、Windows 和 Mac OS X 上调整过许多分区的大小——但总是使用 GUI。然而,数据中心在服务器上设置的预设分区大小不合适,我需要调整生产服务器的磁盘大小。我可以摆弄它,可能没问题,但考虑到它是一台生产服务器,我想得到一些关于如何正确执行此操作的建议。我确实有 KVM over IP 访问权限,所以如果最好让服务器脱机并从救援分区启动,我可以这样做。
root [/var/lib/mysql]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.9G 2.1G 7.3G 23% /
tmpfs 7.8G 0 7.8G 0% /dev/shm
/dev/sda1 99M 77M 18M 82% /boot
/dev/sda8 884G 463G 376G 56% /home
/dev/sda3 9.9G 8.0G 1.5G 85% /usr
/dev/sda5 9.9G 9.1G 308M 97% /var
/usr/tmpDSK 2.0G 38M 1.8G 3% /tmp
如您所见,/var 和 /usr 几乎已满,实际上我不得不将 /usr 上的一些日志符号链接到 /home 中的目录以平衡空间。我想要做的是为 /usr 和 /var 分别添加 6-10 GB,大概会占用 /home 中的空间。
当我考虑磁盘的排列方式时,我想到最好的办法是将 /home 减少 16 GB,然后将 /var 移动到释放的位置,然后将 /var 的空间分配给 /usr。但是,这会将 /var 放在磁盘的最远端,这似乎不太可行,因为 MySQL 的所有数据都位于该分区上。我很想从 /usr 较近的一端取出空间,但我认为这将需要一个非常艰巨(甚至可能很危险)的过程来移动 /usr 中的所有数据。我似乎记得过去在计算机上执行此过程时失败了。
另一个选择可能是合并 / 和 /usr,因为 / 未得到充分利用,但我不确定这是否是个好主意。
您对最佳重新分配计划以及实现该计划的命令有什么建议吗?
更新:我应该补充一下——这是分区表。有一个未使用的分区,如果我没记错的话,它是我在创建临时映像之前的原始临时位置:
Name Flags Part Type FS Type [Label] Size (MB)
------------------------------------------------------------------------------
Unusable 1.05*
sda1 Boot Primary Linux ext2 106.96*
sda2 Primary Linux ext3 10737.42*
sda3 Primary Linux ext3 10737.42*
sda5 NC Logical Linux ext3 10738.47*
sda6 NC Logical Linux swap / Solaris 2148.54*
sda7 NC Logical Linux ext3 1074.80*
sda8 NC Logical Linux ext3 964098.53*
答案1
在实时系统上重新调整 /var 和 /home 以及 /usr 的大小是个坏主意。我建议停机进行此维护。
对于未来,我还建议您扩大范围并研究在服务器上设置 LVM,这样您就有机会在需要时进行实时调整,而不必担心数据在磁盘上的实际分配位置。这里是一个有关如何做到这一点的详细教程的链接。
如果您决定在没有 LVM 的情况下调整分区大小,则从恢复磁盘运行的命令大致如下:
- 卸载 [fs]
- resize2fs [fs] [缩小尺寸]
- fdisk /dev/sda
- resize2fs [fs]
- fsck [文件系统检查]
- 挂载 [fs]
上面的关键命令是fdisk /dev/sda
。您将在此处执行的操作是删除并根据需要重新创建分区以进行调整。只需确保您在操作过程中观察文件系统的实际存储位置,并准备好备份即可。