Задача
Необходимо объединить несколько существующих разделов в один без потери информации. Такое может случиться, если заранее не был задействован LVM, а необходимо расширить пространство, например, для торрентов.
Решения
Решений существует как минимум два.
aufs2
aufs2 — файловая система, реализующая каскадно-объединённое монтирование для файловых систем Linux. Помимо унаследованного от UnionFS функционала здесь реализованы RW-ветки и балансировка записи, что идеально подходит для решения поставленной задачи.
Следует заметить, что aufs2 не включена в mainline-ядро. Но она есть:
- в Debian Lenny (в Testing и Sid уже, к сожалению, нет);
- в Ubuntu (так как LiveCD Ubuntu построен с применением этой ФС);
- в Zen-kernel и Liquorix.
Также можно самостоятельно пропатчить и собрать ядро, используя standalone-версию aufs2. Для дебиановцев рекомендую, если нет желания возиться с компиляцией ядра, воспользоваться готовыми пакетами Liquorix, подключив репозиторий так, как указано на странице проекта.
Если с ядром разобрались, то необходимо позаботиться о userspace-утилитах. В Debian'е есть готовые пакеты (несмотря на отсутствие поддержки со стороны ядра), поэтому их можно поставить одной командой:
sudo aptitude install aufs-tools
Если готовых пакетов в дистрибутиве нет, их можно взять с официального сайта aufs.
Теперь к делу. Допустим, есть два смонтированных раздела:
- старый с кучей торрентов: /media/torrents;
- и новый на только-что купленном винчестере: /media/new_storage.
Для того, чтобы эти два раздела были видимы как один, необходимо выполнить следующую команду:
sudo mount -t aufs none /media/storage -o br:/media/torrents=rw:/media/new_storage=rw,create=mfs,sum
Здесь:
- br: ветка1=rw: ветка2=rw:… — список т. н. веток, т. е. смонтированных разделов, которые будут объединены в один;
- create=mfs — главный параметр, указывающий на то, что для записи будет выбираться та ветка, которая имеет больше свободного места. Без указания этого параметра «слойка» из разделов не будет работать так, как задумано;
- sum — указывает, что в утилитах типа df или pydf будет выводиться суммарный размер разделов и свободного места на них для объединённого раздела.
В /etc/fstab такая запись должна иметь вид:
none /media/storage aufs br:/media/torrents=rw:/media/new_storage=rw,create=mfs,sum 0 0
mhddfs
В отличие от aufs, mhddfs — ФС пространства пользователя, работающая через fuse. В Debian'е есть готовый пакет, который устанавливается командой:
sudo aptitude install mhddfs
Монтирование производится командой:
sudo mhddfs /media/torrents,/media/new_storage /media/storage -o default_permissions,allow_other
В /etc/fstab соответствующая запись имеет вид:
mhddfs#/media/torrents,/media/new_storage /media/storage fuse default_permissions,allow_other 0 0
Стоит заметить, что ни aufs2, ни mhddfs не позволяют одному файлу находится частично на одном, частично — на другом разделе. Также отмечу, что после размонтирования слойки ко всем файлам будет доступ через исходные точки монтирования. Часть файлов окажется на одном разделе, часть — на другом.
Выводы
Если необходимо быстрое и простое решение, то большинству пользователей будет достаточно mhddfs. Но стоит помнить, что aufs2 работает на уровне ядра, поэтому производительность в этом случае выше. К тому же, mhddfs в значительно большей степени нагружает процессор, а скорость записи/считывания несколько ниже, чем в aufs2.
Спасибо за внимание. Комментарии, замечания и пожелания приветствуются.