mhddfs — Монтирование нескольких разделов в одну директорию

Хочу рассказать о том, как смонтироват в одну директорию два раздела.
Честно говоря, никогда не задумывался о такой возможности, пока не попался клиент с подобным пожеланием. Поначалу мне показалось что это невозможно, но покопавшись в интернете нашел пару интересных статей. За основу в работе была взята статья с сайта hotbits.ru. Но в статье монтировали разделы одного и того же диска, мне же предстояло смонтировать разделы с разных дисков. Как оказалось, нет никакой разницы.
В качестве операционной системы использовалась Ubuntu 14.04.

Первое что необходимо сделать, это создать сами разделы.
В моём случае это был раздел /dev/sda3 находящийся на системном диске и раздел /dev/sdb1, который занимал весь второй диск.

Монтируем оба раздела. Для этого в /mnt создадим точки монтирования.

~# mkdir /mnt/sda3
~# mkdir /mnt/sdb1
~# mount /dev/sda3 /mnt/sda3
~# mount /dev/sdb1 /mnt/sdb1

Смотрим что получилось

~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        85G  1.1G   79G   2% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            3.9G  4.0K  3.9G   1% /dev
tmpfs           796M  412K  796M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.9G     0  3.9G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/sda3       826G   73M  784G   1% /mnt/sda3
/dev/sdb1       917G   72M  871G   1% /mnt/sdb1

Далее устанавливаем специальную утилиту mhddfs, которая и позволит нам объеденить оба эти раздела в один.

~# apt-get install mhddfs

Монтировать оба раздела будем в директорию в /home.
Для этого выполним:

~# mhddfs /mnt/sda3,/mnt/sdb1 /home

mhddfs: directory '/mnt/sda3' added to list
mhddfs: directory '/mnt/sdb1' added to list
mhddfs: mount to: /home
mhddfs: move size limit 4294967296 bytes

Проверим

~# df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/sda1             85G  1.2G   79G   2% /
none                 4.0K     0  4.0K   0% /sys/fs/cgroup
udev                 3.9G  4.0K  3.9G   1% /dev
tmpfs                796M  412K  796M   1% /run
none                 5.0M     0  5.0M   0% /run/lock
none                 3.9G     0  3.9G   0% /run/shm
none                 100M     0  100M   0% /run/user
/dev/sda3            826G   73M  784G   1% /mnt/sda3
/dev/sdb1            917G   72M  871G   1% /mnt/sdb1
/mnt/sda3;/mnt/sdb1  1.8T  144M  1.7T   1% /home

Всё смонтировалось и в итоге мы имеем вместо двух раздельных точек монтирования размером 826Гб и 917Гб, одну объёмом 1.8Tб.

В оригинальной статье использовалась опция монтирования -o allow_other, которая позволяет иметь доступ к разделу другим пользователям, но мне она не нужна, потому что пользователь в системе один.

А теперь отмонтируем (или размонтируем) /home и сделаем так, чтобы разделы монтировались при загрузке системы. Это естественно, никто не будет каждый раз монтировать разделы вручную, но для монтирования во время загрузки нужно добавить модуль fuse.

~# echo "fuse" >> /etc/modules

И теперь подправим /etc/fstab добавив в него следующие строки:

/dev/sda3 /mnt/sda3 ext4 defaults 0 2
/dev/sdb1 /mnt/sdb1 ext4 defaults 0 2
mhddfs#/mnt/sda3,/mnt/sdb1 /home fuse defaults,mlimit=10G 0 0

mlimit=10G показывает, что на любом из разделов должно оставаться не менее 10 гигабайт свободного места. Это значит, что если свободного места останется 10 гигабайт, то на этот раздел больше не будет производиться запись.

И теперь осталось проверить всё ли мы правильно прописали в fstab. Делаем:

~# mount -a
mhddfs: directory '/mnt/sda3' added to list
mhddfs: directory '/mnt/sdb1' added to list
mhddfs: mount to: /home
mhddfs: move size limit 10737418240 bytes

Ошибок нет, следовательно всё в порядке. Проверяем:

 ~# df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/sda1             85G  1.2G   79G   2% /
none                 4.0K     0  4.0K   0% /sys/fs/cgroup
udev                 3.9G  4.0K  3.9G   1% /dev
tmpfs                796M  412K  796M   1% /run
none                 5.0M     0  5.0M   0% /run/lock
none                 3.9G     0  3.9G   0% /run/shm
none                 100M     0  100M   0% /run/user
/dev/sda3            826G   73M  784G   1% /mnt/sda3
/dev/sdb1            917G   72M  871G   1% /mnt/sdb1
/mnt/sda3;/mnt/sdb1  1.8T  144M  1.7T   1% /home

Всё на месте, задача выполнена. Для уверенности можете перезагрузить систему.

И кстати, копировать файлы можно как в объединённую директорию /home, так и в директории /mnt/sda3 или /mnt/sdb1. Файлы всё равно появляются в /home как будто они лежат на одном разделе. Причём подмечено, что если копировать в /home, то файлы копируются на раздел, который находится первым в порядке монтирования, то есть на sda3. Предполагаю, что это будет происходить до тех пор, пока не будет достигнут лимит в 10 Гб, и только затем файлы начнут копироваться на sdb1.

На этом всё.

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

© Habrahabr.ru