答案1
根据您的磁盘布局,您必须
(0)移走交换分区以留出扩展空间vda1
;分区空间必须连续。为此目的:
- 禁用交换,使用
swapoff /dev/vda2
(/dev/vda2
是您的交换设备文件。请务必检查我的论点) parted /dev/vda rm partno
使用where删除交换分区帕特诺交换分区号根据parted /dev/vda
,(应该是 2 ?)- 使用 重新创建磁盘末尾的交换分区
/dev/parted /dev/vda mkpart -4G -1s
。这里的负数是从磁盘末尾开始的引用,这意味着分区跨越了最后的磁盘的 4GiB(-1s
意味着分区在磁盘的最后一个扇区结束,这是不可能的,因为这将覆盖辅助 GPT 标头,因此parted
将修改分区的确切开始/结束和对齐方式(系统将提示您)。该分区将使用相同的数字 2 创建。所以设备文件将被命名为/dev/vda2
。你必须检查它。 - 重新启用交换,
mkswap /dev/vda2
然后swapon /dev/vda2
RESUME=
如果有,请更新中的行。此行指定用于休眠的分区,它以或/etc/initramfs-tools/conf.d/resume
标识。您可以使用以下方法找到交换分区 UUID 或标签UUID=...
LABEL=...
blkid
- 更新 fs 表中描述交换分区的行
/etc/fstab
。只需更新 UUID、标签或分区号(取决于文件中如何指定交换分区)
一旦交换被移走,你必须
(1)调整根分区的大小,现在它旁边有可用空间。您可以使用命令growpart
(来自软件包cloud-utils
)使分区使用所有可用空间。如果您无法在系统上获取此软件包,您可以使用子命令手动执行此操作resizepart
,parted
仅告知分区号(1?)和结束位置(以块为单位)。请参阅parted /dev/vda
获取预期的结束位置。parted
将防止您意外覆盖交换。
(2)使用以下命令调整文件系统大小(ext4 可以在线增长,无需卸载)resize2fs /dev/vda1
这些步骤将解决您的问题,通常不会丢失数据。但是建议备份最重要的数据。
答案2
您需要删除交换分区,扩展数据分区并重新创建交换分区(如果需要)。
如果您有足够的可用内存(交换使用不多),您可以这样做而不中断服务。首先:swapoff /dev/vda2
,释放交换。如果您无法做到这一点(内存不足),您需要停止消耗内存的服务,直到您可以禁用交换。
成功关闭 swapoff 后,运行fdisk /dev/vda
并删除第二个分区。
现在确定您需要多少交换并计算它应该从哪里开始。例如,如果您想要拥有恰好 8 GiB(16777216 个扇区)的交换,并且您有恰好 150 GiB(314572800 个扇区)的磁盘,则您的交换应该从扇区 314572800-16777216 = 297795584 开始。因此,创建类型为 82(Linux 交换)的新 vda2 分区,该分区从此扇区和 314572799 开始(它应该会自行建议此值)。不要盲目使用我的数字,请自己计算,因为我对磁盘大小做出了假设——你在某种程度上隐藏了一些可以使该计算准确的信息。(并且以后不要发布控制台的屏幕截图,而只需将其复制并粘贴为文本,这样会更好。并且不要省略磁盘分区等信息,最好复制完整的输出;它不能被用来识别你或造成任何伤害,但可以让生活更轻松。)
当您在驱动器末端重新创建交换分区时,您可以扩展第一个分区。 详细描述见这个答案,所以我只在这里概述一下,您可以随时参考那里了解详细信息。
注意你的vda1
开始位置是 2048 区。这非常重要!
- 删除第一个分区。是的,删除它。是的,在正在运行的系统上。什么也不会发生,也不会丢失任何东西。
- 创建新分区 1,它应从扇区 2048 开始,并结束于当前最后一个扇区 188745727 或之后。确保新分区从 2048 开始,并且不小于原来的大小!另请注意,它可能会检测到文件系统签名并建议将其擦除。不要擦拭。
- 将更改提交到磁盘 (
w
),fdisk 应退出并提示分区表已写入,但内核仍使用旧分区表。使用kpartx
或partprobe
重新加载它,如它所建议的那样。或者禁用交换/etc/fstab
并重新启动(您需要禁用它,以便它不会因缺少交换签名而停止启动)。 - 此时,您
lsblk
应该已经显示新的分区大小。您可以使用 扩展文件系统resize2fs /dev/vda1
。至于交换,使用 创建新的交换结构mkswap /dev/vda2
,如果/etc/fstab
使用 UUID 引用交换,则使用 mkswap 向您打印的新值更新它。