如何将NTFS分区部分克隆到较小的磁盘而不占用整个映像的空间


0

我时不时地遇到以下问题:

磁盘发生故障,替换磁盘较小。数据通常很容易适合较小的磁盘,但partclone根本不会缩小文件系统以匹配较小的分区大小。

您可以简单地将整个磁盘映像到临时驱动器上然后缩小。但如果没有足够的空间?


1
也许尝试ntfsclone?
JPT

“磁盘发生故障”< - 这是你的问题。否则,只需在复制之前缩小源磁盘上的分区。然后,如果您真的想要,可以再次扩展源磁盘上的分区。我只想使用Gparted live disk gparted.sourceforge.io
BeowulfNode42

好吧,我不想在没有备份的情况下搞乱源驱动器。但是当然你可以先使用partclone进行标准备份。
JPT

Answers:


1

从第16点开始不起作用。也许是因为有一个陈旧的循环设备我没有删除。

partclone 原始转储到稀疏图像

此解决方案对您的数据很危险。只有在你明白自己在做什么并且熟悉的情况下才能尝试 dd 和设备。我不对任何数据丢失负责。

在我们开始之前:

  • 请勿使用此过程镜像物理损坏的磁盘,因为

    • partclone 需要一个健康的文件系统来工作

    • 这个程序比做的复杂得多 dd 所以你可能需要多次重复它才能成功 - 给损坏的磁盘带来更大的压力

    • 对于你应该使用的破碎磁盘 safecopy 而是因为 dd 在坏道上中止

  • 你需要最多 2 x数据大小的可用空间 在你的临时驱动器上。

  • 我会进去的 sdXX 对于任何可能会在您忘记自定义命令时破坏数据的命令。这不涉及循环,所以一定要 不使用任何其他循环设备 在以下过程中,以避免意外地覆盖有价值的数据。

  • 如果您在某处失败并删除了图像,请务必首先卸载指向它的任何内容,然后删除循环设备: kpartx -dv <image> 如果使用错误的循环设备,可能会导致严重问题! 我相信我的问题是由陈旧的循环设备造成的......

  • 在本答案的最后找到常见问题的修复程序。

我们走吧

  1. 获取源磁盘的磁盘大小

    sudo fdisk -l /dev/sda
    output: Disk /dev/sda: 465,8 GiB, 500107862016 bytes, 976773168 sectors
    
  2. 将原始分区布局读入图像

    sudo dd if=/dev/sda of=sparse.img bs=1M count=1
    
  3. 用“无”填充图像,直到上面的大小。 - 这将 占用磁盘上的任何空间。

    sudo dd if=/dev/zero of=sparse.img bs=1 count=0 seek=500107862016
    
  4. 检查没有其他循环设备处于活动状态 - 如果输出不为空,请参阅故障排除部分

    losetup -l -a 
    
  5. 检查分区布局是否与源驱动器相同

    fdisk -l sparse.img
    
  6. 创建循环设备以访问映像中的分区

    sudo kpartx -av sparse.img 
    output: add map loop0p1 (253:0): 0 976771072 linear 7:2 2048
    
  7. 使用将数据读入图像 partclone - 这会增加“数据大小”加上“开销”的空间使用量。

    sudo partclone.ntfs -s /dev/sda1 -o /dev/mapper/loop0p1 -b -L sparse.log
    
  8. 删除源驱动器以保存它

  9. 缩小使用 gparted - 应至少比目标驱动器小10%

    • 创建链接因为 gparted 不了解开发者 kpartx 创建。

      ln -s /dev/mapper/loop0p1 sparse.img1
      
    • 使用 gparted 缩小分区

      sudo gparted sparse.img
      
  10. 或者你可以缩小使用 ntfsresize 但是你也必须缩小分区。

    • 得到最小尺寸

      sudo ntfsresize -i /dev/mapper/loop0p1
      
    • 测试调整大小

      sudo ntfsresize -n -s 100G /dev/mapper/loop0p1
      
    • 真正调整大小 - 这将增加空间使用量达到“数据大小”

      sudo ntfsresize -s 100G /dev/mapper/loop0p1
      
    • TODO:缩小分区

  11. (不必要因为收缩不扩大?) 删除并重新创建循环设备,因为分区大小已更改

    sudo kpartx -dv sparse.img 
    sudo kpartx -av sparse.img 
    
  12. (可选)TODO 截断图像

  13. 检查使用 ntfsresize - 对我来说,这给了一个好的答案

    sudo ntfsresize -i /dev/mapper/loop0p1
    
  14. 插入目标驱动器 - 仔细检查你插入了正确的驱动器

  15. (不起作用,因为 ntfsresize 标记fs脏) partclone 图像到新驱动器

    sudo partclone.ntfs -o /dev/sdXX -s /dev/mapper/loop0p1 -b -L restore.log
    
  16. 代替 dd 图像到新驱动器 - 或者不给出大小或者比缩小的分区大小大10%

    sudo dd if=sparse.img of=/dev/sdXX
    
  17. 检查使用 ntfsresize - FAILS对我来说,这不应该发生,因为图像还可以,我们创建了相同的图像副本!

    sudo ntfsresize -i /dev/sda1
    
  18. 删除循环设备

    sudo kpartx -dv sparse.img
    
  19. 删除任何未被彻底删除的循环设备 - 如果还有一些持续存在,请重启或在网上搜索。

    sudo losetup -D 
    
  20. 最后你应该尝试启动磁盘然后运行Windows chkdsk / f。在那之后使用 gparted 将分区扩展到它的完整大小。

故障排除:

  • 如果 ntfsresize 要么 gparted 无法访问图像:exec chkdsk /f 来自源磁盘上的Windows。不使用 ntfsfix Linux的任何NTFS检查程序?

  • 如果 kpartx 无法创建循环设备:检查 losetup 并删除未使用的。

  • 如果你想摆脱过时的循环设备删除 sudo losetup -d 或搜索网络。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.