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

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

У меня есть довольно большой набор данных (~ 160 ТБ), который нужно время от времени доставлять клиенту. Этот набор данных состоит из довольно больших файлов, обычно от 2 до 20 ГБ каждый. Они существуют в файловой системе BeeGFS, работающей в кластере RAID с общей емкостью 1,1 ТБ. В настоящее время, когда пришло время доставить данные, это делается следующим образом:

  1. Создайте основной индекс файлов и их размеры
  2. Подсчитайте размер файлов до 4 ТБ и создайте субиндекс указанных файлов из основного индекса.
  3. Копирование файлов на USB-накопители емкостью 4 ТБ
  4. Повторяйте шаги 2 и 3, пока не будет скопирован весь набор данных.
  5. Подарите клиенту картонную коробку флешки

Я хотел бы просто выполнить rsync для подключенной файловой системы, поэтому мне было интересно, есть ли доступная файловая система, которая может распределить пространство для хранения на нескольких дисках? Очевидные кандидаты - LVM и RAID, но проблема в том, что клиенту нужно иметь возможность читать каждый диск отдельно, что превосходит это (насколько мне известно, по крайней мере). Есть ли способ эмуляции LVM или чего-то подобного, но позволяющий читать отдельные диски довольно стандартным способом? По сути, это позволяет мне запустить одну операцию rsync, которая распределяет данные по нескольким отдельным дискам / файловым системам.

Данные поступают с машины redhat, поэтому до сих пор я просто использовал ext4 на USB-накопителях. Однако, если возможно, для всех было бы очень полезно (хотя и не обязательно), если бы я мог использовать файловую систему, которая хорошо работает с Windows10.

PS: У меня нет ограничений по количеству одновременно подключаемых USB-накопителей. Единственное реальное ограничение, которое у меня есть, заключается в том, что данные должны быть доступны для одного диска / файловой системы за раз.

  1. создайте полный список файлов и размеров, например:

    find / path -type f -printf "% s% h% f \ n"> all_files.txt

  2. запустить awk, который разбивается all_files.txt на части в зависимости от общего размера каждой части (MAXSIZE - это заполнитель для максимального размера в байтах)

    BEGIN {total=0;part=0;}
            {total += $1;
            if (total > MAXSIZE) {part++;total=0;}
            $1="";print substr($0,2) >> "partial-"part}
  1. Теперь вы можете смонтировать все диски в разных точках монтирования (что-то вроде /mnt/send/partial-1, /mnt/send/partial-2, ...), используя любую файловую систему, которую вы хотите в каждой из них.

  2. В петле вы rsync с участием --files-from=FILE в правую точку монтирования. Что-то в этом роде:

    for f in partial*
    do
        rsync --files-from=$f / /mnt/$f/
    done