我有一块 5TB 的硬盘,我想将其缩小到 2TB。
我使用 Google Compute Engine PaaS。
我怎样才能做到这一点?
如果 Google 的工具无法解决这个问题,您能推荐一些工具来手动执行此操作吗?
答案1
如果该磁盘不是启动盘,您可以执行以下操作:
- 添加具有所需大小的新磁盘并对其进行格式化。
- 挂载新磁盘
- cp -r --preserve=all /mnt/disk1/. /mnt/disk2/
- 编辑 /etc/fstab 以挂载新磁盘而不是旧磁盘
如果你有标准磁盘,并且想缩短 cp 时间。你可以先从快照创建新的 ssd 磁盘,并将其复制到 2T ssd 磁盘。然后从 2T 磁盘创建快照并创建一个新的 2T 标准磁盘。
如果您的磁盘是启动盘,您可以使用 fsarchiver 之类的工具:
- 从启动盘创建一个档案。
fsarchiver savefs /mnt/backup/boot_disk.fsa /dev/sda
- 在新磁盘上恢复存档
fsarchiver restfs /mnt/backup/boot_disk.fsa id=0,dest=/dev/sdb
答案2
我的答案是非常具体到Centos 7实例Google 的 Compute Engine 平台。其中的一些信息可能适用于其他操作系统类型,但这超出了我的经验。
我的用例是将连接到旧版 Centos7 实例的 400G 根设备缩小到 20G。不幸的是,根设备只有 1 个分区(没有 efi 分区),因此当我尝试时fsarchiver
,它失败并出现错误not able to mount /dev/sdb1 as vfat
(sdb1
是XFS
我的目标实例的根分区,安装在缩小实例上)。
最终对我有用的过程如下:
- 创建一个新的克隆实例
target-1
(这将使磁盘缩小) - 创建一个临时实例
shrinker-1
(所有命令提示符操作都在此处发生,以 身份运行root
)。 - 关闭
target-1
并编辑它以分离它的根磁盘(通常与实例名称相同,但我们可以说“target-1-root”)。 target-1-root
作为额外磁盘连接到shrinker-1
。这将变成/dev/sdb
。- 连接一个新磁盘,其大小比新启动盘所需的磁盘空间大 10G(在我的情况下,10G 基本 + 10G 额外),命名为
target-1-newroot
。 - 这变成/dev/sdc
target-1-newroot
初始化类似于的分区表target-1-root
(MBR 或 GPT,可以通过 查看fsdisk -l /dev/sdb
,并使用 创建fdisk /dev/sdc
)- 创建根分区(使用 fdisk)并使用(或类似方法)
target-1-newroot
将其格式化为匹配target-1-root
(对我来说是 xfs)mkfs.xfs /dev/sdc1
mkfs.$FSTYPE
- 创建挂载点:
mkdir -p /media/old /media/new
mount /dev/sdc1 /media/old
(target-1-root
)mount /dev/sdb1 /media/new
(target-1-newroot
)- 复制数据:
rsync -a /media/old/ /media/new/
- 保存以下起始扇区(从开始到第一个分区的开始之前)
target-1-newroot
:- 检查一下:
fdisk -l /dev/sdc
-对我来说这是 2048:Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk label type: dos Disk identifier: 0x0009c1de Device Boot Start End Blocks Id System /dev/sdc1 2048 41943039 20970496 83 Linux
- 两个磁盘的大小应该匹配(请先检查分区初始化步骤)
- 检查一下:
- 使用旧磁盘的引导扇区覆盖 /dev/sdc 的引导扇区
dd if=/dev/sdb of=/dev/sdc bs=512 count=2048
- 这是从fdisk -l
上面获取的信息。 fdisk /dev/sdc
使用(fdisk 有内联帮助,请使用它) 将覆盖的分区表修复回正确值- 删除坏的超大分区
- 使用上述正确信息创建一个新分区
- 最后将其设置为可启动
- 检查新的根分区 UUID(
lsblk -o name,uuid
)并根据需要更新:/media/new/etc/fstab
/media/new/boot/grub2/grub.cfg
umount /media/new
- 分离
target-1-newroot
shrinker-1
- 编辑
target-1
并附加target-1-newroot
为根设备。还启用串行控制台以排除启动故障(如果有)。 - 启动
target-1
、登录并检查一切是否符合预期。
最后,但并非最不重要的一点是,考虑给我发一份RasPi CM4-${ANY_MMC}-2GB-Wifi
使用储蓄的支票:笑:。