Comments 49
Простите, а где, собственно, ссылка?
Скорее всего вот: amdf.pp.ru/sparser.php
UFO just landed and posted this here
Мне попадался файл — образ DVD диска для запуска пиратской версии игры. Там информации было немного, только в начале, а остальное состояло из нулей. Образ надо было монтировать как есть, удалять нули нельзя. Вот я его таким образом укоротил.
А обычная компрессия NTFS разве не дала бы тот же результат?
Способ безусловно интересный, но возможности практического применения мне кажутся не очевидными.
Способ безусловно интересный, но возможности практического применения мне кажутся не очевидными.
На самом деле sparse-структуры нужно класть в файлы уже нормально сериализованными. Но и этому может найтись применение где нибудь.
Интересно буду знать.
В принципе для качалок может пригодиться… Однако работа с большими файлами — это обычно и длительная работа. Обычно такое пространство резервируется сразу. Но неприятно будет, оставив файл качаться-рендериться, вернувшись, увидеть что операция FAIL из-за нехватки места.
Наверное иначе чем в энтерпрайзе это и не пригодится…
Наверное иначе чем в энтерпрайзе это и не пригодится…
В чем преимущество записывать заполненные нулями файлы на диск?
UFO just landed and posted this here
В последней команде пропущено имя файла.
fsutil sparse setrange test.nul 0 10000000000
ой как интересно
почитайте про thin provisioning и deduplication, будете удивлены.
в мире еще столько неизведанного…
почитайте про thin provisioning и deduplication, будете удивлены.
в мире еще столько неизведанного…
вот щас у меня будет шара в пару терабайтов на DC++ хабе =)
мужик, ты жжешь! мне было удивительно интересно это узнать)
извините, я не понял из статьи, это надо специально такие файлы создавать? Или как во всех юнихах: делаешь seek за конец файла — получаешь sparse файл?
Специально устанавливается атрибут, а потом ещё размечаешь sparse-область.
>Или как во всех юнихах: делаешь seek за конец файла — получаешь sparse файл?
Только что проверил — на FAT разделах не пашет ;) Видимо это не свойство ОС, а свойство файловой системы, которое, впрочем, ось должна уметь использовать.
Только что проверил — на FAT разделах не пашет ;) Видимо это не свойство ОС, а свойство файловой системы, которое, впрочем, ось должна уметь использовать.
Виндозная win32api.SetFilePointer заполняет все пространство нулями. Она именно записывает данные в полном объеме. Типа «для безопасности». Отучить ее от этого нельзя. А под файловые истсемы *nix на самом деле имеет место простое указание в файловом дескрипторе, что файл занимает от сих и до сих, без непосредственной очистки места.
UFO just landed and posted this here
Небольшое дополнение для тех, кто будет использовать спарзфайлы.
Если программа сначала создала разреженный файл, а потом начала дописывать блоки в середине этого файла, возможна совершенно дикая фрагментация этого файла.
Примерно такая ситуация возникает, если в emule рабочие файлы сделать разреженными.
Вопрос насколько фрагментация опасна для NTFS спорный, но, на мой взгляд, замедление все-таки имеет место
Если программа сначала создала разреженный файл, а потом начала дописывать блоки в середине этого файла, возможна совершенно дикая фрагментация этого файла.
Примерно такая ситуация возникает, если в emule рабочие файлы сделать разреженными.
Вопрос насколько фрагментация опасна для NTFS спорный, но, на мой взгляд, замедление все-таки имеет место
Хочу подметить, что emule не помечает области разряженными.
И еще при скачивании со скоростью 100 МБит/c размазанность файла не спасает.
И еще при скачивании со скоростью 100 МБит/c размазанность файла не спасает.
В параметрах emule есть пункт «Использовать разреженные файлы»
eMule самым превосходным образом помечает файлы разрежёнными (sparce), если поставить соответствующую галочку:
У меня, как видите, эта галочка не поставлена, и не только чтобы не происходило дичайшей фрагментации, но и чтобы на диске всегда либо хватало места, либо с самого начала закачка останавливаласьиз-за его нехватки. А не то несколько sparse-закачек могли бы со временем мешать друг другу, вступая в борьбу за свободное место на диске.
У меня, как видите, эта галочка не поставлена, и не только чтобы не происходило дичайшей фрагментации, но и чтобы на диске всегда либо хватало места, либо с самого начала закачка останавливалась
Ну, справедливости ради, sparse files в NTFS придумывалось не для eMule ;)
А для разных специфических применений, типа (сходу что пришло в голову) льется со спутника или радиотелескопа прерывистый поток данных, во многие терабайты объемом, но по преимуществу пустой внутри, только изредка в нем проскакивают небольшие, но очнь важные кусочки, с которыми потом предстоит работать.
То что большинство впервые узнало про sparse files, несмотря на то, что он в NTFS с середины 90-х (с NT4.0) показывает слабую применимость его для бытового использования.
А для разных специфических применений, типа (сходу что пришло в голову) льется со спутника или радиотелескопа прерывистый поток данных, во многие терабайты объемом, но по преимуществу пустой внутри, только изредка в нем проскакивают небольшие, но очнь важные кусочки, с которыми потом предстоит работать.
То что большинство впервые узнало про sparse files, несмотря на то, что он в NTFS с середины 90-х (с NT4.0) показывает слабую применимость его для бытового использования.
О! Спасибо, как раз сам собирался писать — перенес тут диски виртуалок на другой винт :)
Вот только в архиве лежит CS.exe:
Stream copy program: www.flexhex.com
Usage:
CS fromstream tostream
Example:
CS c:\some.txt d:\file.dat:text
Сдается мне, что это не оно.
Вот только в архиве лежит CS.exe:
Stream copy program: www.flexhex.com
Usage:
CS fromstream tostream
Example:
CS c:\some.txt d:\file.dat:text
Сдается мне, что это не оно.
Тьфу! Извиняюсь, имя архива перепутал.
Судя по названию это тема еще одного поста про малоизвестные «фишки» NTFS — NTFS Streams. ;)
Обычный win32 CopyFile, которым пользуется проводник, успешно копирует потоки файлов NTFS сам.
>Сам по себе атрибут ещё не приводит к экономии дискового пространства. Нужно ещё разметить внутри файла область, которая будет освобождена.
С вот этим непонятно. Допустим есть файл размером 10 Гб, который не весь забит нулями — если задать область целиком файл, то что произойдёт? И наоборот, файл из одних нулей, задали область, а потом начали в эту область писать?
P.S. Понятно, что самому можно поэкспериментировать, но может готовый ответ есть :)
С вот этим непонятно. Допустим есть файл размером 10 Гб, который не весь забит нулями — если задать область целиком файл, то что произойдёт? И наоборот, файл из одних нулей, задали область, а потом начали в эту область писать?
P.S. Понятно, что самому можно поэкспериментировать, но может готовый ответ есть :)
Допустим есть файл размером 10 Гб, который не весь забит нулями — если задать область целиком файл, то что произойдёт?
Будет полностью забит нулями.
И наоборот, файл из одних нулей, задали область, а потом начали в эту область писать?
Будет выделяться на диске место под новые данные. Возможно даже из той области которую занимали раньше нули.
А если копировать такой файл каким нибудь ТоталКомандером, то во первых файл становится своего указанного размера (возможно ТК сбивает атрибуты при копировании), а во вторых у меня после нескольких копирований потерялось свободное место на диске, помогло только chkdsk.
ТК не поддерживает копирование/перемещение разреженных файлов с сохранением размера, и не факт что будет в ближайшем будущем.
Но это умеет FAR Manager (начиная с версии 2.0, впрочем есть спец. билд линейки 1.7.x).
Но это умеет FAR Manager (начиная с версии 2.0, впрочем есть спец. билд линейки 1.7.x).
Значит вот, для ленивых, создаём батник со следующим кодом:
Варьируя первую и вторую строчку, можно менять размеры и названия файлов. По умолчанию — 762-меговые файлы, имена которых задаются случайно.
Кидаем в папку, в которой хотим это дело создать и запускаем хоть сто раз. Единственно, если хотим сделать псевдо-500меговый файл, то на диске должно быть свободно 500 мегов. На одну секунду.
set bigfile=video(%random%).avi
set razmer=800000000
fsutil file createnew "%bigfile%" %razmer%
fsutil sparse setflag "%bigfile%"
fsutil sparse setrange "%bigfile%" 0 %razmer%
Варьируя первую и вторую строчку, можно менять размеры и названия файлов. По умолчанию — 762-меговые файлы, имена которых задаются случайно.
Кидаем в папку, в которой хотим это дело создать и запускаем хоть сто раз. Единственно, если хотим сделать псевдо-500меговый файл, то на диске должно быть свободно 500 мегов. На одну секунду.
Sign up to leave a comment.
Разреженные файлы в NTFS