[identity profile] adrianov.livejournal.com posting in [community profile] useless_faq
Почему программам дефрагментации требуется намного больше времени, чем удвоенное время чтения и последующей записи данных? (Один раз переместить фрагментированные данные в пустое место, другой раз записать на освободившееся место дефрагментированные).

Date: 2008-03-20 03:15 pm (UTC)
From: [identity profile] bmx.livejournal.com
Насколько мне известно, алгоритм сложнее — он перемещает наиболее часто используемые данные поближе к началу диска.

Date: 2008-03-20 03:16 pm (UTC)
From: [identity profile] probegi.livejournal.com
Так надо ж еще подумать, куда какие данные переписывать.
хехе

Date: 2008-03-20 03:22 pm (UTC)
From: [identity profile] czz.livejournal.com
Вы измеряли? :)

Когда места на диске достаточно, примерно так и должно происходить по времени. А если место мало, то программе приходится данные по всякому рекомбинировать, и там может быть больше, чем два чтения и две записи.

Date: 2008-03-20 04:38 pm (UTC)
From: [identity profile] rundot.livejournal.com
когда места на диске достаточно, дефрагментации, как правило, не происходит :-)
если, конечно, это не базы данных, которые, для ускорения обработки, пишутся абы-как )

Date: 2008-03-20 05:30 pm (UTC)
From: [identity profile] toh-rus.livejournal.com
хм.. а я как-то читал, что во время любой инсталляции проги/игры даннык пишутся тоже абы как, ради быстроты установки

Date: 2008-03-20 04:43 pm (UTC)
From: [identity profile] dali-bude.livejournal.com
во-первых, алгоритм сложный.
во-вторых, данные копируются маленькими кусочками, уходит время на перемещение головок.

Date: 2008-03-20 07:25 pm (UTC)
From: [identity profile] basile.livejournal.com
Вообще-то, нормальные программы дефрагментации приблизительно с такой скоростью и работают. Поделку, вставленную в винды просьба не упоминать. ;)
Дополнительное время тратится в основном на проверку правильно ли перезаписаны данные. Поскольку данные читаются из разных мест диска (и головка всё время прыгает туда-сюда), да ещё и не по одному разу, это сильно увеличивает время проверки корректности перезаписи.
Грубо говоря, программа дефрагментации не уверена что в (быстрой) оперативной памяти машины всё абсолютно безглючно и перепроверяет всё по нескольку раз.
Edited Date: 2008-03-20 07:26 pm (UTC)

Date: 2008-03-20 10:22 pm (UTC)
From: [identity profile] http://users.livejournal.com/_qwerty/
1. Чтобы сначала переписать в другое место, а потом скопировать на правильное, этого другого места должно быть достаточно - т.е. диск должен быть хотя бы наполовину пуст. Если это не так, нужен более сложный алгоритм.

2. Параллельно с дефрагментатором работают другие процессы, которые пишут и читают файлы. Поэтому дефрагментатор не может заранее спланировать, что и куда перемещать, и далее следовать плану. Существующий файл может оказаться непереместимым, изменить размер, на запланированном для него месте может образоваться другой файл.

3. Кроме данных на диске есть служебные записи файловой системы. Правильная программа дефрагментации не удаляет ссылок на старое место хранения данных до тех пор, пока не убедится, что они записаны на новое место. При этом принудительно выключается кэширование.

4. Физическое перемещение головок.

Date: 2008-03-21 01:40 pm (UTC)
From: [identity profile] pan-2.livejournal.com
потому что вы слабо представляете принципы и алгоритмы работы современного дефрагментатора в современной ОС.

если вам нужно радикально ускорить процесс - сделайте образ диска ghost'ом или acronis'ом в файл а потом залейте назад. чтение всё-равно намного быстрее не будет (т.к. данные дефрагментированы), а вот запись будет почти потоковой, в разы быстрее

Date: 2008-03-23 11:00 am (UTC)
From: [identity profile] noop.livejournal.com
Потому что в общем случае при ограниченном количестве свободной памяти задача эта весьма и весьма труднорешаема. А еще потому, что программы предпочитают очень сильно перестраховываться на случай отключения питания. Т.е. пусть лучше у ста человек тормозит, чем у одного потеряется уйма данных.