将 NTFS 分区转换为 ext4 - 如何复制数据?

将 NTFS 分区转换为 ext4 - 如何复制数据?

我想将D:\包含所有数据的分区从 NTFS 转换为 ext4,互联网告诉我应该执行以下操作:

  1. 将所有分区缩小到最小大小
  2. 备份我的数据(通过克隆 GParted 中的分区完成)
  3. 将分区格式化为 ext4(尚未完成,但也不是那么难)
  4. 将备份复制到驱动器
  5. 删除备份并增加所有分区

我不知道如何完成第 4 部分。我真的可以像复制文件夹一样复制整个驱动器吗?是否有专门的工具可以做到这一点?如何确保不会错过系统隐藏的任何文件夹或符号链接等?如果这很重要,我有一个 Ubuntu Live USB 棒可以使用。

答案1

1. FreeFileSync GUI 工具(Windows、Mac、Linux)

为了确保你不会错过任何数据,我强烈建议使用像免费文件同步。它是图形化的、免费的、开源的、跨平台的(Windows、Mac、Linux)。只要确保不要搞砸了,不要复制回去,删除所有内容!不过,这并不难,因为它是图形化的,而且非常用户友好。

只需设置文件夹即可来源在左边和目的地,然后点击右上角的齿轮并选择“镜像”选项以从左到右镜像,然后按左上角的“比较”按钮。一旦确定需要复制的内容,它将弹出一个信息屏幕,显示它将要做什么(它将创建、覆盖或删除多少个文件等)。确保垃圾桶旁边没有任何东西(表示要删除的内容),或者您看到预期的要删除的文件,用垃圾桶和减号标记,然后按“同步”按钮开始。瞧!易于使用。以下是屏幕截图:在此处输入图片描述

2. rsync 命令行工具(Linux、带有 Cygwin 的 Windows)(又名:“如何使用 rsync”):

如果你正在从 Linux 进行复制,你当然也可以使用 FreeFileSync,但如果你是命令行专家,你可能会喜欢rsync更好。它是一种纯命令行工具,使用起来更困难,但仍然非常强大,尽管不如 FreeFileSync 强大,因为它不能很好地处理双向同步。以下是我最喜欢的几个rsync命令:

  1. 从源复制到目标,保留目标中不冲突的任何内容:

     sudo rsync -rah --stats --info=progress2 '/path/to/source' '/path/to/destination'
    

    或者,添加--verbose,或者仅添加-v(或者-rahv在我的情况下)也可以获得将要复制的内容的完整列表。

    可选地,添加--dry-run以显示什么发生了但实际上尚未发生。

    或者,您也可以将要复制的整个文件列表记录到stdout.log这样的文件中,并将任何错误记录到stderr.log这样的文件中。在这里,我通过删除来删除进度指示器--info=progress2,这样日志文件就不会到处都是进度信息:

     (sudo rsync -rah --verbose --dry-run --stats '/path/to/source' '/path/to/destination' | tee -a '/path/to/stdout.log') 3>&1 1>&2 2>&3 | tee -a '/path/to/stderr.log'
    

    --dry-run准备实际复印时,请从上面删除。请务必查看打印出来的统计段落(因为您有--stats),位于标准输出日志在实际运行脚本之前,请检查文件,以确保一切看起来都很好。

    以下是执行 MIRROR 选项后获得的输出示例--stats。请注意,它正在删除一些文件。请特别注意这一点,因为删除文件是无法撤消的(至少没有特殊的软件恢复工具)。只需记住它是永久删除它们,不要将它们发送到某种回收站或其他地方,所以要小心!

    文件数:102,033 (reg:89,638,dir:9,867,链接:2,502,特殊:26)
    创建的文件数:3 (reg:3)
    删除的文件数:9,861 (reg:9,360,dir:474,链接:27)
    传输的常规文件数:25
    文件总大小:8.12G 字节
    传输的文件总大小:35.30M 字节
    文字数据:35.30M 字节
    匹配的数据:0 字节
    文件列表大小:917.43K
    文件列表生成时间:0.007 秒
    文件列表传输时间:0.000 秒
    发送的总字节数:38.33M
    接收的总字节数:1.02M

    发送 38.33M 字节 接收 1.02M 字节 7.15M 字节/秒
    总大小为 8.12G 加速比为 206.37

  2. 从源镜像到目标,这也意味着删除目的地中的任何事物不在源(请注意上面显示的统计输出中的“已删除文件数”行),添加--delete --delete-excluded(即使我们还没有排除任何内容,一旦你了解了语法,--exclude=PATTERN你就会意识到你想要这个--delete-excluded标志)。

    首先,安全的试运行版本:

     (sudo rsync -rah --verbose --dry-run --stats --delete --delete-excluded '/path/to/source' '/path/to/destination' | tee -a '/path/to/stdout.log') 3>&1 1>&2 2>&3 | tee -a '/path/to/stderr.log'
    

    现在危险 危险 危险——如果你反向执行源和目标,可能会删除所有内容版本(因此在继续之前请检查 stdout.log 末尾的统计输出):

     (sudo rsync -rah --verbose --stats --delete --delete-excluded '/path/to/source' '/path/to/destination' | tee -a '/path/to/stdout.log') 3>&1 1>&2 2>&3 | tee -a '/path/to/stderr.log'
    

    现在的版本不会保存任何日志文件,以防你想查看实时进度并在末尾有统计段落,但是在 stdout.log 中没有复制或删除的单个文件的日志,也没有在 stderr.log 中打印错误:

     sudo rsync -rah --info=progress2 --stats --delete --delete-excluded '/path/to/source' '/path/to/destination'
    
  3. 这只是 rsync 的开始。请阅读手册:man rsync,或在线阅读:https://linux.die.net/man/1/rsync,请记住,你可以混合搭配我上面展示的许多选项。其他真正有用的事情包括设置源文件.txt文件,以及排除.txtfile,分别用于包含和排除文件和路径列表。分别使用选项--files-from='/path/to/source.txt'和执行此--exclude-from='/path/to/exclude.txt'操作。这非常有用。最后,这与选项配合得很好--relative。最后,完整的 Bash 脚本可能看起来像这样:

      (sudo rsync $OPTIONS $SRC $DEST | tee -a $LOG_STDOUT) 3>&1 1>&2 2>&3 | tee -a $LOG_STDERR
    

    ...$SRC您的源路径在哪里(在本例中为相对的所有文件的路径源文件.txt文件(例如简单地/使所有内容相对于您的根目录),$DEST是您的目标路径,$LOG_STDOUT是您想要记录 stdout 信息的路径,$LOG_STDERR是您想要记录 stderr 信息的路径,$OPTIONS可能看起来像这样:

     -rah --verbose --stats --relative --info=progress2 --delete --delete-excluded --dry-run --files-from='/path/to/source.txt' --exclude-from='/path/to/exclude.txt'
    

    当然,如上所述,您可能希望根据需要删除--verbose、、、和、和,具体取决于您正在执行的操作--relative--info=progress2--delete--delete-excluded--dry-run

重要提示:对于 exFAT 和 FAT 文件系统,您想要使用rsync...

另请参阅我的回答:在 FAT 和 exFAT 文件系统中使用 rsync 的最佳设置

也可以看看:

  1. [我的问答]如何在 Ubuntu Live USB 安装盘上安装 FreeFileSync
  2. [我的答案]问Ubuntu:用cp复制文件时如何显示传输进度和速度?
  3. [我的答案]Unix 和 Linux:是否可以查看 cp 速度和复制百分比?
  4. [我的答案]询问 Ubuntu:如何更改外部硬盘中驱动器的权限?

相关内容