Google 计算引擎 - 压缩磁盘

Google 计算引擎 - 压缩磁盘

我有一块 5TB 的硬盘,我想将其缩小到 2TB。

我使用 Google Compute Engine PaaS。

我怎样才能做到这一点?

如果 Google 的工具无法解决这个问题,您能推荐一些工具来手动执行此操作吗?

答案1

如果该磁盘不是启动盘,您可以执行以下操作:

  1. 添加具有所需大小的新磁盘并对其进行格式化。
  2. 挂载新磁盘
  3. cp -r --preserve=all /mnt/disk1/. /mnt/disk2/
  4. 编辑 /etc/fstab 以挂载新磁盘而不是旧磁盘

如果你有标准磁盘,并且想缩短 cp 时间。你可以先从快照创建新的 ssd 磁盘,并将其复制到 2T ssd 磁盘。然后从 2T 磁盘创建快照并创建一个新的 2T 标准磁盘。

如果您的磁盘是启动盘,您可以使用 fsarchiver 之类的工具:

  1. 从启动盘创建一个档案。fsarchiver savefs /mnt/backup/boot_disk.fsa /dev/sda
  2. 在新磁盘上恢复存档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 vfatsdb1XFS我的目标实例的根分区,安装在缩小实例上)。

最终对我有用的过程如下:

  • 创建一个新的克隆实例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/sdc1mkfs.$FSTYPE
  • 创建挂载点:mkdir -p /media/old /media/new
  • mount /dev/sdc1 /media/oldtarget-1-root
  • mount /dev/sdb1 /media/newtarget-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-newrootshrinker-1
  • 编辑target-1并附加target-1-newroot为根设备。还启用串行控制台以排除启动故障(如果有)。
  • 启动target-1、登录并检查一切是否符合预期。

最后,但并非最不重要的一点是,考虑给我发一份RasPi CM4-${ANY_MMC}-2GB-Wifi使用储蓄的支票:笑:。

相关内容