pie*_*mes 3 ntfs hard-drive partitioning ext4
我想将我D:\所有数据的分区从 NTFS 转换为 ext4,互联网告诉我应该执行以下操作:
而且我不知道如何做第 4 部分。我真的可以像复制文件夹一样复制整个驱动器吗?有专门的工具吗?如何确保我不会错过系统隐藏的任何文件夹或符号链接等?如果这很重要,我有一个 Ubuntu live USB-Stick 可以使用。
为确保您不会遗漏任何数据,我强烈建议您使用像FreeFileSync这样好的文件复制工具。它是图形化的、免费的、免费和开源的,并且是跨平台的(Windows、Mac、Linux)。只要确保不要搞砸并向后复制,删除所有内容!然而,这并不难做到,因为它是图形化的并且非常用户友好。
只需使用左侧的源和右侧的目标设置文件夹,然后单击右上角的齿轮并选择“镜像”选项从左到右镜像,然后按左上角的“比较”按钮。一旦确定需要复制什么,它就会弹出一个信息屏幕,显示它将要做什么(它将创建、覆盖或删除多少文件等)。确保您在垃圾桶旁边看不到任何东西(指示要删除的内容),或者您看到要删除的预期文件,用垃圾桶和减号标记,然后按“同步”按钮开始。瞧!便于使用。这是一个屏幕截图:
如果您正在从 Linux 进行复制,当然您也可以使用 FreeFileSync,但如果您是命令行大师,您可能会rsync更喜欢。它是一个仅限命令行的工具,更难使用,但仍然非常强大,尽管不如 FreeFileSync 强大,因为它不能很好地处理双向同步。下面是一些我最喜欢的rsync命令:
从源复制到目标,在目标中留下任何不冲突的内容仍然完好无损:
sudo rsync -rah --stats --info=progress2 '/path/to/source' '/path/to/destination'
Run Code Online (Sandbox Code Playgroud)
或者,添加--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'
Run Code Online (Sandbox Code Playgroud)
--dry-run当准备好实际制作副本时,从上面删除。在真正运行脚本之前,请务必查看stdout.log文件--stats末尾的 stats 段落打印输出(因为您有),以确保它看起来不错。
下面是--stats通过执行下面的 MIRROR 选项获得的输出示例。注意它正在删除一些文件。请注意这一点,因为删除文件无法撤消(至少在没有特殊软件恢复工具的情况下不能)。请记住,它是永久删除它们,而不是将它们发送到某种回收站或其他东西,所以要小心!
文件数:102,033(注册:89,638,目录:9,867,链接:2,502,特殊:26)
创建文件数:3(注册:3)
删除文件数:9,861(注册:9,360,目录: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
从源到目标的镜像,这意味着还要删除目标中不在源中的任何内容(注意上面显示的统计输出中的“已删除文件数”行),添加--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'
Run Code Online (Sandbox Code Playgroud)
现在危险危险危险 - 如果您执行源和目标向后版本,则可以删除所有内容(因此在继续之前检查 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'
Run Code Online (Sandbox Code Playgroud)
现在版本不保存到任何日志文件,以防您只想查看实时进度和最后的统计段落,但没有在 stdout.log 中复制或删除单个文件的日志,或打印错误在 stderr.log 中:
sudo rsync -rah --info=progress2 --stats --delete --delete-excluded '/path/to/source' '/path/to/destination'
Run Code Online (Sandbox Code Playgroud)
而这只是 rsync 的开始。阅读手册:man rsync,或在线:https://linux.die.net/man/1/rsync,并记住您可以混合和匹配我上面显示的许多选项。其他真正有用的事情包括设置一个source.txt文件和一个exclude.txt文件,分别包含和排除文件和路径列表。分别使用选项--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
Run Code Online (Sandbox Code Playgroud)
...$SRC您的源路径在哪里(在这种情况下,是source.txt文件中所有文件的相对路径,例如简单地使所有内容都相对于您的根目录),是您的目标路径,是您的路径'd想记录您的标准输出信息,是您想记录标准错误信息的路径,可能如下所示:/$DEST$LOG_STDOUT$LOG_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'
Run Code Online (Sandbox Code Playgroud)
而且,当然,如上所述,您可能希望根据需要删除--verbose、--relative、--info=progress2、--delete和--delete-excluded和--dry-run,具体取决于您在做什么。