如何使用 Windows 附带的本机工具将稀疏文件从一个 NTFS 卷复制或移动到另一个 NTFS 卷,同时保持稀疏性?如果无法使用本机工具执行此操作,那么来自受信任供应商的免费应用程序可以执行此操作吗?肯定有一个命令提示符命令或 powershell 命令可以执行此操作。
我有一个 250GiB 的文件,占用了 20GiB 的磁盘空间,我希望它在移动时继续只占用 20GiB。谢谢。
答案1
您无法使用标准 Windows 工具来完成此操作。
但有一个实用功能。转到http://www.flexhex.com/docs/articles/sparse-files.phtml,下载并解压 sparse.zip。
然后从命令行运行:
cs.exe c:\src.dat d:\dest.dat
文件将被复制并保持稀疏性。
答案2
使用赛格威并使用选项挂载文件系统sparse
。然后,支持稀疏文件的 Unix 命令(例如cp
、dd conv=sparse
和rsync -S
)将正确地创建或复制文件作为稀疏文件。正如人们所预料的那样,简单的输出重定向不会创建稀疏文件。
请看下面的演示。
$ mount -o sparse D: /tmp/mnt
mount: warning - /tmp/mnt does not exist.
$ cd /tmp/mnt
$ dd conv=sparse if=/dev/zero seek=10000 of=sparse count=1
1+0 records in
1+0 records out
512 bytes copied, 0.0101909 s, 50.2 kB/s
$ ls -lh sparse
-rw-rw-r--+ 1 dds None 4.9M Sep 5 13:05 sparse
$ du -h sparse
0 sparse
$ cp sparse sparse-cp
$ dd conv=sparse if=sparse of=sparse-dd
10001+0 records in
10001+0 records out
5120512 bytes (5.1 MB, 4.9 MiB) copied, 0.0500354 s, 102 MB/s
$ rsync -S sparse sparse-rsync
$ cat sparse >sparse-fail-cat
$ cat sparse | dd conv=sparse of=sparse-cat-dd
$ ls -lh sparse*
-rw-rw-r--+ 1 dds None 4.9M Sep 5 13:05 sparse
-rw-rw-r--+ 1 dds None 4.9M Sep 5 13:15 sparse-cat-dd
-rw-rw-r--+ 1 dds None 4.9M Sep 5 13:06 sparse-cp
-rw-rw-r--+ 1 dds None 4.9M Sep 5 13:11 sparse-dd
-rw-rw-r--+ 1 dds None 4.9M Sep 5 13:19 sparse-fail-cat
----rw----+ 1 dds None 4.9M Sep 5 13:06 sparse-rsync
$ du -h sparse*
0 sparse
0 sparse-cat-dd
0 sparse-cp
0 sparse-dd
4.9M sparse-fail-cat
0 sparse-rsync
答案3
在 Windows 上我最终使用了六、WinHex可以做到这一点,或者更确切地说,是它的取证兄弟 X-Ways Forensics。GUI 在菜单中有一个选项可以稀疏地复制文件。
答案4
我写了一个小脚copy-sparse-windows.sh
本来复制文件,使其尽可能稀疏。这需要msys2
或类似的,具体来说sh
,truncate
和rsync
。
它使用 Windowsfsutil
工具设置稀疏标志,truncate
创建一个大的空文件,并rsync
复制非零内容。
据我了解,其他一些答案不会创建新的稀疏区域。我想通过尽可能地添加稀疏区域来减小大型 VM 磁盘映像的大小。
#!/bin/sh -euv
from=$1 to=$2
touch "$to"
fsutil sparse setflag "$to"
truncate --reference "$from" "$to"
rsync --archive --inplace --no-whole-file --verbose --progress "$from" "$to"