Копировать | перемещать разреженные файлы в 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"
Другие вопросы по тегам