Назад | Перейти на главную страницу

дедупликация и индексация каталогов изображений на 150 машинах Linux

У меня есть клиент со 150 серверами Linux, разбросанными по различным облачным сервисам и физическим дата-центрам. Большая часть этой инфраструктуры - это приобретенные проекты / команды и уже существующие серверы / установки.

Клиент в основном занимается обработкой изображений, и многие серверы имеют большие SAN или локальные дисковые массивы с миллионами файлов jpeg / png.

На каждом ящике есть агент управления конфигурацией, я вижу, что многие диски на 100%, некоторые довольно пусты, и есть много дублированных данных.

Теперь у клиента есть доступ к CDN. Но на данный момент просто перечислить возможные варианты - непростая задача.

Есть ли какие-нибудь инструменты для создания полезных индексов всех этих данных?

Я вижу такие инструменты, как GlusterFS для управления этими распределенными файловыми системами и Hadoop HDFS

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

Что должно стать отправной точкой для создания индекса потенциальных кандидатов на дедупликацию?

Самый простой способ найти повторяющиеся файлы в нескольких системах - создать список файлов с их суммами MD5 для каждой системы, объединить их в один файл, а затем использовать sort + сценарий AWK для поиска дубликатов, как показано ниже:

Сначала запустите это на каждой из систем, заменив путь соответствующим образом:

#!/bin/sh
find /path/to/files -type f -exec md5sum {} \; |\
while read md5 filename
do
    echo -e "${HOSTNAME}\t${md5}\t${filename}"
done >/var/tmp/${HOSTNAME}.filelist

Это создаст файл /var/tmp/HOSTNAME.filelist на каждом хосте, который вам нужно будет скопировать в центральное место. После того, как вы собрали все эти списки файлов, вы можете запустить следующее:

#!/bin/sh
export LANG=C
cat *.filelist |sort -t$'\t' +1 -2 |\
awk '
BEGIN {
    FS = "\t"
    dup_count = 0
    old_md5 = ""
}

{
    if ($2 == old_md5) {
        if (dup_count == 0 ) {
            printf("\n%s\n", old_inline)
        }
        printf("%s\n", $0)
        dup_count++
    }
    else {
        dup_count = 0
    }
    old_md5 = $2
    old_inline = $0
}'

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

Да, и в качестве альтернативы первому сценарию (который запускается на каждом хосте) проверьте используемую систему резервного копирования, чтобы узнать, можете ли вы получить что-то подобное из отчета о резервном копировании (по крайней мере, что-то, что включает md5 и имя файла).