将 Linux 分区克隆到较小分区的最佳方法是什么?

the*_*oop 2 linux clone partitioning

我目前有一个 80 GB 的RAID 0(是的,我知道,这就是我要更改它的原因...)ext3 Linux 设备大约 80% 免费,我想使用一个将其更改为 40 GB ext4分区之前的 RAID 0 分区。我在另一个大分区上有足够的空闲空间来存放所有文件,我想到的最好的切换方法是:

  1. cp -a 文件系统上的所有文件到一个大分区下的目录
  2. 重新分区
  3. cp -a 所有文件回到新分区

问题是,我担心特殊文件属性(它是 Linux 根设备);将cp -a保留所有必要的文件属性,以便新分区之后可启动?我错过了另一种方法吗?

Dav*_*ett 6

我会:

  1. 使用类似的东西就地调整文件系统的大小resize2fs -p /dev/<device_name_fs_is_on> 20G
    它无疑会拒绝第一次运行,建议您fsck先运行。您可以强制它运行,但fsck强烈建议执行此操作,因为尝试调整存在错误(即使是次要错误)的文件系统的大小可能会导致灾难。检查完成后重新运行调整大小命令
  2. 将其复制到另一个驱动器 dd if=/dev/<device_name_fs_is_on> of=/path/to/other/location/filesystem.img bs=1048576 count=20480
  3. 根据需要重新格式化磁盘
  4. 将文件系统复制回 dd if=/path/to/other/location/filesystem.img of=/dev/<new_device_name>
  5. 调整大小以填充新分区 resize2fs -p /dev/<new_device_name>
  6. 挂载新调整大小的文件系统并编辑它包含的任何相关配置,例如 /etc/fstab
  7. 您还需要检查您的 grub 配置以确保它引用新的根分区名称,并且您可能需要重建您的 initrd(虽然可能不是因为您从 RAID 到正常,而不是相反,如果initrd 不支持 RAID)
  8. 交叉手指并重新启动...

由于这是您的根文件系统,您将需要从 Live CD 执行此操作,因为在安装文件系统时您将无法调整其大小(第 2 步)。

如果您更改了resize2fs第 1 步中传递给的 20G ,请确保相应地更改dd第 2 步中传递给的 1048576x20480 。

显然这不是一个没有风险的操作,所以你可能想在第 3 步之前通过其他方式单独备份文件系统上的重要数据+配置。
为了更高的安全性:如果你有时间和磁盘空闲,将缩小的文件系统恢复到额外的磁盘,按照第 6 步和第 7 步进行适当的重新配置,并确保您可以在进行第 3 步之前将其启动。这样您就知道在从旧位置擦除文件系统之前,您在其他地方拥有文件系统的完整工作副本,并且如果您在该阶段发现问题,可以轻松恢复到旧设置并中止/重试。

这样,当您在文件系统批发而不是单个文件、目录和设备节点上进行操作时,在复制内容时不会丢失任何文件/目录/设备属性。