У меня есть довольно большой набор данных (~ 160 ТБ), который нужно время от времени доставлять клиенту. Этот набор данных состоит из довольно больших файлов, обычно от 2 до 20 ГБ каждый. Они существуют в файловой системе BeeGFS, работающей в кластере RAID с общей емкостью 1,1 ТБ. В настоящее время, когда пришло время доставить данные, это делается следующим образом:
Я хотел бы просто выполнить rsync для подключенной файловой системы, поэтому мне было интересно, есть ли доступная файловая система, которая может распределить пространство для хранения на нескольких дисках? Очевидные кандидаты - LVM и RAID, но проблема в том, что клиенту нужно иметь возможность читать каждый диск отдельно, что превосходит это (насколько мне известно, по крайней мере). Есть ли способ эмуляции LVM или чего-то подобного, но позволяющий читать отдельные диски довольно стандартным способом? По сути, это позволяет мне запустить одну операцию rsync, которая распределяет данные по нескольким отдельным дискам / файловым системам.
Данные поступают с машины redhat, поэтому до сих пор я просто использовал ext4 на USB-накопителях. Однако, если возможно, для всех было бы очень полезно (хотя и не обязательно), если бы я мог использовать файловую систему, которая хорошо работает с Windows10.
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