Копировать | перемещать разреженные файлы в NTFS в Windows
Как я могу скопировать или переместить разреженный файл с одного тома NTFS на другой том NTFS, сохраняя разреженность, используя встроенные средства, включенные в Windows? Если нет способа сделать это с помощью встроенных инструментов, то что такое бесплатное приложение от надежного поставщика, которое будет делать это? Конечно, есть команда командной строки или команда powershell, которая сделает это.
У меня есть файл размером 250 ГБ, который занимает 20 ГБ дискового пространства, и я хотел бы, чтобы он продолжал занимать только 20 ГБ, когда я его перевожу. Благодарю.
4 ответа
Вы не можете сделать это с помощью стандартных инструментов Windows.
Но есть утилита. Перейдите по http://www.flexhex.com/docs/articles/sparse-files.phtml, загрузите и распакуйте sparse.zip.
Затем запустите из командной строки:
cs.exe c:\src.dat d:\dest.dat
Файл будет скопирован с сохранением разреженности.
Используйте Cygwin и смонтируйте файловую систему с 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
Со стороны Windows я в конечном итоге использовал WinHex для этого, а точнее, своего брата-криминалиста X-Ways Forensics. GUI имеет опцию в меню, чтобы копировать файлы редко.
Я написал небольшой сценарийcopy-sparse-windows.sh
скопировать файл, сделав его как можно более разреженным. Это требуетmsys2
или подобное, в частностиsh
, , и .
Он использует окнаfsutil
инструмент для установки разреженного флага,truncate
создать большой пустой файл иrsync
для копирования ненулевого содержимого.
Насколько я понимаю, некоторые другие ответы не создают новых редких регионов. Я хотел уменьшить размер большого образа диска виртуальной машины, добавляя разреженные области везде, где это возможно.
#!/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"