我有一台 Ubuntu 19.04 虚拟机,我通过 ssh 连接到它。
我必须调整启动分区的大小。
# fdisk -l
Disk /dev/sda: 300 GiB, 322122547200 bytes, 629145600 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc59d8598
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 487423 485376 237M 83 Linux
/dev/sda2 487424 629143551 628656128 299.8G 83 Linux
我喜欢将 sda1 的大小调整为 1024M,并且无法使用 live cd。
在我的 VM 上我是 root 用户。
我想我必须调整根分区 sda2 的大小并将其向前移动,然后调整 sda1 的大小。
需要一点帮助来完成这个操作。
我没有发现任何像我这样的问题:只有一个根分区(sda2)上的示例,并且无需通过腾出空间来移动它到启动分区(sda1)
你能帮我吗?
致以最诚挚的问候,
莱昂纳多
PS 我没有丢失分区上的数据:-)
更新
我发现我的提供商允许我启动系统救援光盘在我的虚拟机上,所以我已经卸载了所有虚拟机分区,但我在命令行中。
我现在可以做这份工作吗?
答案1
我已成功使用 ssh 连接调整 /boot 分区的大小并扩大它,并缩小虚拟机上的根分区。
我有 /dev/sda1 (/boot)
和 /dev/sda2 (/) 根
首先需要启动一些类似 Live CD 的东西。我的提供商让我使用系统救援光盘启动系统。因此,在我的提供商 vps 控制面板上,我有一个选项可以启动系统救援光盘完成后,我就可以通过 ssh 从我的 vps 的同一 ip 连接到它。
在我的主机上执行此操作之前,我会执行以下操作:
$ mv /home/<username>/.ssh/known_hosts /home/<username>/.ssh/known_hosts.bak
为了避免我的系统尝试使用 rsa 证书连接到远程主机。
在最后的工作中我会$ mv /home/<username>/.ssh/known_hosts.bak /home/<username>/.ssh/known_hosts
恢复以前的行为。
- 我通过 ssh 连接到系统救援光盘
- 我检查我的分区没有被
# umonunt /dev/sda1
# umonunt /dev/sda2
系统挂载,告诉我它们没有被挂载。 # e2fsck -f /dev/sda2
检查 fs- 我的 sda2 最多有 300GB 可用。我将其调整为 200GB:(
# resize2fs /dev/sda2 200G
缩小) - 上一个命令的输出类似于
... The filesystem on /dev/sda2 is now xxxxx (4k) blocks long. ...
xxxxx 是一个数字。您必须将 xxxxx * 4 相乘才能得到 yyyyy 的新大小(以 k 为单位),并且记住它 - 现在我必须设置分区表:
# fdisk /dev/sda
(类型米求助)- 积极的d命令(删除分区)
- 选择2分割
- 积极的n命令(创建分区)
- 选择页(主分区)
- 选择第一个扇区:选择默认(与之前相同)
- 选择最后一个扇区:+yyyyyk(如果 yyyyy 是 3746596,请选择 +3746596k)注意+和钾
- 然后它会问你:
Partition #2 contains a ext4 signature Do you want to remove the signature? [Y]es/[N]o:
选择n(否则我想它会删除你的所有数据) - 启用瓦在磁盘上写入新分区的命令
现在您必须将根分区向右移动。
您需要定义一个new_start_sector
来移动。
# fdisk -l
并获取 /dev/sda1(/boot 分区)的最后一个扇区,假设数字 zzz
为 1024*1024*1024/512 并获取扇区中的 1 GB 并将其添加到 zzz 以获得new_start_sector
(zzz+(1024*1024*1024/512))
编写如下 Bash 脚本:
#!/bin/sh
partition=/dev/sda2
disk=/dev/sda
sector_size=512
new_start_sector=2584575
exit 1 # drop this line exit 1 after you have change 2584575 using zzz calculate before by you
# opos is right after the new partition and given in bytes
opos=$(($new_start_sector * $sector_size + `blockdev --getsize64 $partition`))
echo "doing dd_rescue -v -r -S $opos $partition $disk"
dd_rescue -v -r -S $opos $partition $disk
现在您已经移动根分区,但必须设置正确的分区表。
# fdisk /dev/sda
(类型米求助)- 积极的d命令(删除分区)
- 选择2分割
- 积极的n命令(创建分区)
- 选择页(主分区)
- 选择第一个扇区:选择
new_start_sector
之前定义的 - 选择最后一个扇区:选择默认(最后一个可用)
- 然后它会问你:
Partition #2 contains a ext4 signature Do you want to remove the signature? [Y]es/[N]o:
选择n(否则我想它会删除你的所有数据) - 启用瓦在磁盘上写入新分区的命令
现在调整根分区的大小:
# e2fsck -f /dev/sda2
检查 fs
# resize2fs /dev/sda2
现在删除启动分区并使其更大:
# fdisk /dev/sda
(类型米求助)- 积极的d命令(删除分区)
- 选择1分割
- 积极的n命令(创建分区)
- 选择页(主分区)
- 选择第一个扇区:选择默认
- 选择最后一个扇区:选择
new_start_sector
- 1 - 然后它会问你:
Partition #1 contains a ext4 signature Do you want to remove the signature? [Y]es/[N]o:
选择n(否则我想它会删除你的所有数据) - 选择A命令(使分区 1 可启动)
- 选择1分割
- 启用瓦在磁盘上写入新分区的命令
现在调整启动分区的大小:
# e2fsck -f /dev/sda1
检查 fs
# resize2fs /dev/sda1
我重新启动后一切正常。
我执行此命令系统救援光盘重新启动时所有历史记录都消失了,所以我试着记住所有要写入的内容。
请仔细计算我的示例中使用的扇区和字节。
本示例全部通过谷歌搜索各种解决方案完成
一
二
三
和更多 ...
记住
$ mv /home/<username>/.ssh/known_hosts.bak /home/<username>/.ssh/known_hosts
致以最诚挚的问候,
莱昂纳多