一旦您在托管服务提供商处获得 VPS,例如 数字海洋 或 OVH,您可能想要自定义分区布局。 但是,您通常别无选择:您选择所需的操作系统,然后将其安装在单个分区上,占用所有可用磁盘空间。
然而,VPS 不仅适用于单分区 Web 服务器! 根据您的需要,您可能想要添加一个交换分区,另一个用于您的数据……
幸运的是, 大多数托管服务提供商提供救援模式,另一个硬盘驱动器上的备用操作系统,您可以从中调整常规操作系统和“正常”硬盘驱动器。
本指南的其余部分假设现有的唯一分区是 Ext4(或 Ext2/3)类型; 如果您安装了 Debian 或 Ubuntu,就会出现这种情况。
不要在系统内尝试这种方法,使用救援模式。 如果不确定,请检查您的 VPS 提供商是否允许访问救援控制台。 调整文件系统和分区的大小不会擦除数据,因为新的所需大小大于当前的数据量。 不过,请在外部磁盘/设备/服务器上进行备份。
假设您必须将分区从 40 GiB 减少到 2 GiB(从磁盘的开头开始),以便在它之后创建其他分区。
第一步:切换到救援模式并识别磁盘
首先要做的是重新启动到救援模式,这通常是 Debian GNU/Linux 系统。 您将获得此临时系统的临时 root 密码,只需 SSH 即可。
然后,识别您的正常系统使用的磁盘; 您可以使用 fdisk -l
.

这里 /dev/sdb
是我们要修改分区方案的磁盘,并且 /dev/sdb1
目前唯一的分区。 /dev/sda
是临时救援系统所在的磁盘。 当然,通过本教程的其余部分,替换 sdb1
如果它不是正确的设备名称。
第 2 步:减少文件系统
检查文件系统 e2fsck -f /dev/sdb1
(否则下一个命令, resize2fs
,可能不起作用):

e2fsck 和 resize2fs 可能已经安装在救援系统上,但如果它们不存在,请安装 e2fsprogs 包。 在 Debian 上,运行 apt install e2fsprogs。
此外,请确保文件系统的大小不超过 2 GiB。 提供 /mnt
为空,挂载文件系统 mount /dev/sdb1 /mnt
并检查它的大小 df
:

卸载文件系统: umount /dev/sdb1
.
在您继续执行以下命令之前,如果您已经自定义了系统或添加了重要数据,建议您备份您的文件!
走吧:跑 resize2fs /dev/sdb1 2G
.
“2G”表示2 GiB,也可以写成“2048M”。 当我截取下面的截图时,我错误地认为 resize2fs
将其理解为 2000M,因此我提供了多个扇区(4194304 * 每个扇区 512 字节 = 2GiB)。 结果是完全一样的。

这里程序报告“524288(4k)块”。 524288 * 4096 B = 2 GiB,所以没关系。
4k 是文件系统级别的单位(块)大小,而 512 是磁盘级别的单位(扇区)大小。 我怎么知道是512? 看上面的“fdisk”截图!
第三步:减少分区
到目前为止,您已经减少了文件系统,这意味着您不能向其中添加不适合其 2 GiB 逻辑大小的数据。 但是文件系统所在的分区仍然占用所有磁盘空间。
我建议 parted
为了 Linux中的分区管理. 在 Debian 上,使用 apt install parted
. 该工具可以交互使用。 启动它 /dev/sdb
作为论据:

采用 unit s
,所以所有尺寸都显示为 扇区数 (而不是 MiB、GiB 等),这对于精确控制事物很有用。 否则,您可能会遇到诸如“生成的分区未正确对齐以获得最佳性能”之类的问题。 这 print free
命令可让您查看磁盘的状态:

您希望分区 1 的长度为 2 GiB,即 2*1024*1024*1024/512 = 4194304 个扇区。
跑 resizepart 1
. 然后系统会提示您输入磁盘上的位置,以磁盘开头的扇区表示,分区必须在该位置结束。 由于有一个 保留区,在分区之前,以扇区 2047 结束,您必须输入 4194304 + 2047 = 4196351s
.
不要忘记尾随的“s”。
在警告信息后回答“是”,然后 print free
再次确认分区已调整大小。

根据我的经验,在这里停止并重新启动可能会“恢复”以前状态的分区布局,也就是说,就像您从未缩小分区一样!
要“验证”更改,现在最好在可用空间上添加至少一个分区。
第四步:添加其他分区
假设您想在操作系统占用的分区之后添加一个 12 GiB 的 Ext4 分区。
首先,您必须“声明”分区,因此将一个条目添加到分区表中(在保留区域的某处)。 采用 mkpart primary ext4
:

就像在这个 example,在前一个扇区结束后启动分区,因此不会浪费空间。 这里是 4196351 + 1 = 4196352s
.
结尾是 12*1024*1024*1024/512 个扇区(你想要这个分区的大小)+ 4196351 个扇区(作为第二个分区的偏移量)= 29362175s
.
然后,退出 parted (C^d) 并在 sdb2 上有效地创建一个 Ext4 文件系统。 要应用默认的 Ext4 设置,命令是:mkfs.ext4 /dev/sdb2
结束
本文只是介绍如何在命令行上操作分区和文件系统,重点介绍服务器默认具有一个大分区的实际案例(以及您可能希望在哪里划分它)。 我希望它有用。
作者信息:Paul Desplanque 在计算机相关方面是 100% 自学的。 Paul 拥有 8 年的 PHP 开发经验,非常擅长自托管。