У меня есть довольно большой набор данных (~ 160 ТБ), который нужно время от времени доставлять клиенту. Этот набор данных состоит из довольно больших файлов, обычно от 2 до 20 ГБ каждый. Они существуют в файловой системе BeeGFS, работающей в RAID-кластере с общей емкостью 1,1 ТБ. В настоящее время, когда пришло время доставить данные, это делается следующим образом:
Я бы хотел просто выполните синхронизацию с смонтированной файловой системой, поэтому мне было интересно, есть ли доступная файловая система, которая может распределить пространство для хранения на нескольких дисках? Очевидные кандидаты - LVM и RAID, но проблема в том, что клиенту нужно иметь возможность читать каждый диск отдельно, что превосходит это (по крайней мере, насколько мне известно). Есть ли способ эмуляции LVM или чего-то подобного, но позволяющий читать отдельные диски довольно стандартным способом? По сути, это позволяет мне запустить одну операцию rsync, которая распределяет данные по нескольким отдельным дискам / файловым системам
. Данные поступают с машины redhat, поэтому до сих пор я просто использовал ext4 на USB-накопителях. Однако, если возможно, было бы очень полезно (хотя и не строго необходимо) для всех, если бы я мог использовать файловую систему, которая хорошо работает с Windows 10.
PS: У меня нет ограничений по количеству подключенных USB-накопителей. в то же время. Единственное реальное ограничение, которое у меня есть, заключается в том, что данные должны быть доступны для одного диска / файловой системы за раз.
создайте полный список файлов и размеров, например:
find /path -type f -printf "%s %h%f\n" > all_files.txt
запустите 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}
Теперь вы можете монтировать все диски по-разному точек (что-то вроде /mnt/send/partial-1
, /mnt/send/partial-2
,...), используя любую файловую систему, которую вы хотите в каждом из них.
В цикле вы rsync
с --files-from=FILE
с правой точкой монтирования. Что-то в этом роде:
for f in partial*
do
rsync --files-from=$f / /mnt/$f/
done