UnionFS
UnionFS - это файловая система, предназначенная для объединения нескольких директорий в одну. Существуют её реализации для Linux & Freebsd. Я буду говорить о UnionFS для Linux. UnionFS поставляется как модуль к ядру. В случае Gentoo linux достаточно набрать "emerge unionfs", в других дистрибутивах - ищите пакеты под свой менеджер. Итак, после установки - добавляем модуль unionfs в автозагрузку.
За основу для описания возьму FTP-сервер с девятью хардами. Все они смонтированы в /mnt/data*:
data1_180 data2_400 data3_400 data4_100 data5_300 data6_250 data7_400 data8_750 data9_750
На каждом из них есть директории Films, Soft, Games со своим содержимым. Всё это нужно смонтировать в /home/ftp/Films, /home/ftp/Soft, /home/ftp/Games соответственно.
Для удобства напишем скрипт /mnt/mount.sh:
#!/bin/bash # Перечислим директории с фильмами: D_FILMS=" /mnt/data1_180/Films/ /mnt/data2_400/FILMzzz/ /mnt/data4_100/Films/ /mnt/data3_400/FILMzzz/ /mnt/data5_300/FILMzzz/ /mnt/data6_250/FILMzzz/ /mnt/data7_400/FILMzzz/ /mnt/data8_750/Films/ /mnt/data9_750/Films/ " # С играми: D_GAMES=" /mnt/data1_180/Games/ /mnt/data2_400/GAMEzzz/ /mnt/data3_400/Games/ /mnt/data4_100/Games/ /mnt/data5_300/GAMEzzz/ /mnt/data6_250/GAMEzzz/ /mnt/data7_400/GAMEzzz/ /mnt/data8_750/Games/ /mnt/data9_750/Games/ " # С софтом: D_SOFT=" /mnt/data1_180/Soft/ /mnt/data2_400/Soft/ /mnt/data3_400/Soft/ /mnt/data4_100/Soft/ /mnt/data5_300/Soft/ /mnt/data6_250/Soft/ /mnt/data7_400/Soft/ /mnt/data8_750/Soft/ /mnt/data9_750/Soft/ " # Преобразуем эти списки каждый в одну строку вида "/folder1/:/folder2/:/folder3/....": for N in $D_FILMS do FILMS="$FILMS:$N" done for N in $D_GAMES do GAMES="$GAMES:$N" done for N in $D_SOFT do SOFT="$SOFT:$N" done # Собственно монтирование и отмонтирование: case "$1" in start) mount -t unionfs -o dirs=$FILMS none /home/ftp/Films/ mount -t unionfs -o dirs=$GAMES none /home/ftp/Games/ mount -t unionfs -o dirs=$SOFT none /home/ftp/Soft/ ;; stop) umount /home/ftp/Films umount /home/ftp/Games umount /home/ftp/Soft ;; *) echo "Usage: $0 start | stop" ;; esac
Вот и всё. А добавлять/удалять директории можно простым дописыванием в начало скрипта.