UnionFS

Материал из OpenWiki
Перейти к: навигация, поиск

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

Вот и всё. А добавлять/удалять директории можно простым дописыванием в начало скрипта.