Используют ли какие-либо распространенные файловые системы ОС хэши, чтобы избежать повторного хранения одних и тех же данных содержимого?

Многие системы хранения файлов используют хэши, чтобы избежать дублирования данных содержимого одного и того же файла (среди прочего), например, Git и Dropbox используют SHA256. Имена файлов и даты могут быть разными, но если контент генерируется с одним и тем же хэшем, он никогда не сохраняется более одного раза.

Кажется, это было бы разумно сделать в файловой системе ОС, чтобы сэкономить место. Существуют ли какие-либо файловые системы для Windows или * nix, которые делают это, или есть веская причина, по которой ни одна из них не работает?

Это, по большей части, устранило бы необходимость в утилитах для поиска дубликатов файлов, потому что в этот момент единственное место, которое вы бы сэкономили, было бы для записи файла в файловой системе, что для большинства пользователей не имеет значения.

Редактировать: возможно, это может привести к сбою сервера, но я чувствую, что разработчики с большей вероятностью поймут проблемы и связанные с ними компромиссы.


person D'Arcy Rittich    schedule 14.12.2009    source источник
comment
Пример использования — мой друг с тысячами видеофайлов, многие из которых являются дубликатами видео с разными именами. Он пишет некоторый код, чтобы хешировать их все и выяснить, какие из них являются одним и тем же видео, чтобы он мог удалить дубликаты, и мне пришло в голову, что файловая система может справиться с этим за него.   -  person D'Arcy Rittich    schedule 15.12.2009


Ответы (6)


ZFS поддерживает дедупликацию с прошлого месяца: http://blogs.oracle.com/bonwick/en_US/entry/zfs_dedup

Хотя я бы не назвал это «распространенной» файловой системой (на самом деле, в настоящее время она поддерживается только *BSD), на нее определенно стоит обратить внимание.

person FRotthowe    schedule 14.12.2009
comment
Я планирую построить файловый сервер, и именно из-за ZFS я выбираю Solaris. - person liori; 15.12.2009
comment
Согласно Википедии, вы можете использовать ZFS в Linux. - person strager; 21.07.2013

Это сэкономит место, но затраты времени непомерно высоки. Упомянутые вами продукты уже связаны с io, поэтому вычислительные затраты на хеширование не являются узким местом. Если вы хешируете на уровне файловой системы, все операции ввода-вывода, которые и так медленные, будут ухудшаться.

person Matt    schedule 14.12.2009
comment
Но вам не нужно будет хэшировать все файлы, а только те, которые имеют тот же размер, что и другой файл... - person D'Arcy Rittich; 15.12.2009
comment
Но как узнать, что есть другой файл такого же размера? Сохраните ли вы его как индекс в таблице файловой системы? Затем добавление/обновление файлов становится дорогим для поддержки поиска файлов того же размера. Технически вы, конечно, можете хешировать файлы и пытаться обнаруживать дубликаты, но, поскольку io уже является ограничителем скорости для такого количества операций, я не уверен, что вы можете сделать что-то, что было бы достаточно производительным и при этом было бы на 100 процентов точным. - person Matt; 15.12.2009
comment
Интересно - только что прочитал сообщение в блоге Sun (спасибо FR) - кажется, что утверждение состоит в том, что производительность в конечном итоге станет компромиссом из-за сохраненной записи на диск, о чем я не подумал. Хранение башей по-прежнему является проблемой, но предполагается, что хеш-таблица помещается в память, что, вероятно, верно, если предположить, что машина с большим объемом памяти также будет иметь много памяти. - person Matt; 15.12.2009
comment
Извините за опечатки - пишу с телефона, понимаете :) - person Matt; 15.12.2009
comment
Имея список из n файлов с различными размерами, вы можете определить, сталкивается ли размер файла за время O (log n), используя список, или O (1), если вы набираете хэш-код самих размеров - это быстро и используется только когда размер файла изменения, например новый файл, изменить. это также не нужно делать в момент сохранения, например. его можно добавить в список дел файловой системы и завершить, когда он не так занят или сохранение файлов стабилизируется. - person Bill; 27.01.2014

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

Количество дублирующихся данных на большом предприятии с тысячами пользователей ошеломляет. Многие из этих пользователей хранят одни и те же документы, исходный код и т. д. в своих домашних каталогах. Отчеты 50-70% дедуплицированных данных часто встречаются, что экономит много места и куча денег для крупных предприятий.

Все это означает, что если вы создаете какую-либо общую файловую систему на LUN, экспортированном файлером NetApp, вы получаете дедупликацию бесплатно, независимо от того, какая файловая система создана на этом LUN. Ваше здоровье. Узнайте, как это работает здесь и здесь.

person Sudhanshu    schedule 08.01.2010

NTFS имеет хранилище с одним экземпляром.

person blowdart    schedule 14.12.2009
comment
Спасибо, отсюда blogs.techrepublic.com.com/datacenter/?p=266 найденное хранилище с одним экземпляром также будет включено в Windows Server 2008, но только в выпуске Storage. Эта функция не будет доступна в других версиях. Он также реализован в Exchange. - person D'Arcy Rittich; 15.12.2009
comment
В следующей версии Exchange его нет. Однако это реализовано и в Windows Home Server, под которым находится Win2003. - person blowdart; 15.12.2009

btrfs поддерживает онлайн-дедупликацию данных на уровне блоков. Я бы рекомендовал duperemove, поскольку необходим внешний инструмент.

person Tom Hale    schedule 27.02.2017

Чтобы заставить это работать в файловой системе, потребуется изрядное количество работы. Во-первых, пользователь может создавать копию файла, планируя отредактировать одну копию, в то время как другая остается нетронутой, поэтому, когда вы устраняете дублирование, созданная таким образом жесткая ссылка должна давать семантику COW.

Во-вторых, права доступа к файлу часто зависят от каталога, в который помещено имя этого файла. Вам нужно будет убедиться, что при создании скрытой жесткой ссылки разрешения были правильно применены на основе ссылки, а не только местоположения фактического контента.

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

Это кажется мне немного похожим на эффект второй системы — решение проблемы спустя долгое время после того, как проблема перестала существовать (или, по крайней мере, иметь значение). С текущими жесткими дисками, стоящими менее 100 долларов США за терабайт, мне трудно поверить, что это сэкономит большинству людей место на жестком диске на целый доллар. В этот момент трудно представить, чтобы большинству людей было не все равно.

person Jerry Coffin    schedule 14.12.2009
comment
Интересно, я не знал о COW. Второй момент не вызывает беспокойства, так как вы игнорируете расположение контента, все разрешения будут основываться на ссылке. Что касается третьего пункта, хранение одной копии имеет смысл только на том же физическом диске, как только появится новый диск (насколько в любом случае может сказать ОС), потребуется дублирующая копия содержимого. - person D'Arcy Rittich; 15.12.2009
comment
Что касается вашего последнего замечания, все дело в размере файла, который постоянно растет. Было бы неплохо иметь возможность, особенно. поскольку содержимое файловой системы вскоре может распространиться по облаку, поэтому компромисс между вычислениями и временем xfer будет стоить того (а-ля Dropbox). - person D'Arcy Rittich; 15.12.2009
comment
1. Как редактирование влияет на ситуацию? Когда вы пишете файл, вы проверяете, существует ли он уже. Если нет, вы записываете его и добавляете хэш в хеш-таблицу в памяти. Простой. 2. Разумеется, разрешения хранятся в FAT отдельно от содержимого. 3. Конечно, вы делаете это только на отдельных дисках, а не между дисками. - person PRMan; 21.03.2019