Page 2 of 2

Портит файл при копировании

Posted: Sat 27 Jul, 2019 15:40
by Nicko

Latest post of the previous page:

Жаль, что на этом форуме нельзя (или я не нашёл как) редактировать сообщения.

1) Дефрагментатор вообще не дружит с распределёнными файлами, а не только плохо скопированными.

2) В Total Commander была поддержка распределённых файлов, но много лет назад автор отказался от собственных функций копирования и стал использовать CopyFileEx. Не смотря на это, в HELPе TC указано, что:
Use default method only
The default built in copy method (via ReadFile/WriteFile) is relatively slow, but also reliable.
3) Попробовал проделать все операции с файлом размера 5 Гбайт, а не 20-40 Мбайт, и ничего подобного смоделировать не мог. Возможно, что это связано с размерам блока самого торрента и работой uTorrent.

Портит файл при копировании

Posted: Sat 27 Jul, 2019 18:50
by DrKnS
Nicko, если вы считаете, что копирование sparse-файлов работает неправильно, приведите минимальный пример, воспроизводящий проблему.
Без торрентов, дефрагментаторов, оптимизаторов и экскурсов в историю более других менеджеров.

Портит файл при копировании

Posted: Sat 27 Jul, 2019 20:12
by Nicko
Я, скорее, описывал ситуацию и хотел с вашей помощью разобраться - что же происходит, чем сообщал о неправильной работе.

Ситуация такова: uTorrent каким-то чудесным образом записывает неполные блоки в файл и fsutil sparse query выдаёт регион, содержащий эти данные, хотя он, наоборот, должен быть пустым. Копирование и доступ к файлу чем угодно, не поддерживающим распределённые файлы, переносит эти данные в новый файл, который уже не является распределённым. Об этом и писал автор темы.

К сожалению, попытки установить регион, используя fsutil или sparser.exe, убирают эти данные из файла - я не могу вам передать файл и смоделировать ситуацию.

Портит файл при копировании

Posted: Sat 27 Jul, 2019 22:07
by DrKnS
Насколько я понимаю:
- При копировании sparse-файлов в общем случае не гарантируется, что они остантутся sparse (но Far пытается, при отключенной системной функции)
- Сохранение позиций и размеров allocated ranges при копировании не гарантируется. Мы читаем их из исходного файла и пишем в новый, но ОС может переаллоцировать так, как ей удобнее, при первом доступе к файлу.
- fc /b не должно находить различий при условии, что в файлы больше никто не пишет.