Мой сайт
Главная | Каталог статей | Регистрация | Вход
Среда
12.12.2018
09:57
Приветствую Вас Гость | RSS
Главная » Статьи » Linux и Unix

mhddfs: объединение нескольких файловых систем в одну большую виртуальную

Предположим, у вас есть три жёстких диска - на 80, 40 и 60 гигабайт. И 150 гигабайт музыки, которую надо на этих дисках хранить. Как лучше всего поступить в таком случае?

Два пути, которые были мне до недавнего времени известны, это:

или разложить музыку по трём дискам вручную, создав по одному каталогу «Music» на каждом диске;

или создать из этих дисков какой-нибудь RAID-массив.

Однако, первый метод довольно утомителен, так как каждый раз при добавлении новых файлов нужно решать, куда именно их положить, а потом помнить, где что хранится. Для упрощения последней задачи, можно делить музыку по дискам согласно какому-либо признаку, например по её жанру - а потом, столкнувшись с нехваткой места на диске с классической музыкой, перемещать часть её на диск с рок-музыкой, и расставлять вокруг подпорки из симлинков.

RAID же, хотя и решает эту проблему, всегда связан со значительной потерей либо надёжности хранения, либо полезного дискового пространства.

Но недавно, я случайно нашёл гораздо более удобное и гибкое решение описанной проблемы: mhddfs. Это модуль файловой системы для FUSE, позволяющий объединить несколько обычных файловых систем в одну большую «виртуальную», которая будет содержать в себе не только все файлы объединённых ФС, но и всё их свободное место. Кроме того, в отличие от других подобных модулей, этот не ограничивает возможность записи на виртуальную объединённую ФС, а автоматически распределяет новые файлы по тем физическим дискам, где ещё есть свободное место.

Пакет под названием mhddfs доступен в дистрибутивах DebianUbuntu, и, вероятно, во многих других.

Итак, предположим, три ваших жёстких диска примонтированы в каталоги /mnt/hdd1 /mnt/hdd2 and /mnt/hdd3. Это может выглядеть примерно так:

$ df -h

Filesystem Size Used Avail Use% Mounted on

...

/dev/sda1 80G 50G 30G 63% /mnt/hdd1

/dev/sdb1 40G 35G 5G 88% /mnt/hdd2

/dev/sdc1 60G 10G 50G 17% /mnt/hdd3

После установки mhddfs, можно создать новую точку монтирования - назовём её /mnt/virtual - и подключить в неё все три предыдущие. Пользоваться FUSE можно и не имея прав root, но для упрощения примеров предположим, что у нас они всё-таки есть.

# mkdir /mnt/virtual

# mhddfs /mnt/hdd1,/mnt/hdd2,/mnt/hdd3 /mnt/virtual -o allow_other

option: allow_other (1)

mhddfs: directory '/mnt/hdd1' added to list

mhddfs: directory '/mnt/hdd2' added to list

mhddfs: directory '/mnt/hdd3' added to list

mhddfs: move size limit 4294967296 bytes

mhddfs: mount point '/mnt/virtual'

Ключ «-o allow_other» здесь означает, что новая файловая система должна быть видна всем пользователям, а не только тому, кто её создал.

Результат будет выглядеть вот так:

$ df -h

Filesystem Size Used Avail Use% Mounted on

...

/dev/sda1 80G 50G 30G 63% /mnt/hdd1

/dev/sdb1 40G 35G 5G 88% /mnt/hdd2

/dev/sdc1 60G 10G 50G 17% /mnt/hdd3

mhddfs 180G 95G 85G 53% /mnt/virtual

Как видим, виртуальная файловая система успешно создана. Она суммировала общий объём всех трёх дисков (180G), объединила их использованное (95G) и свободное (85G) пространство. Если посмотреть список файлов и каталогов, находящихся в /mnt/virtual, можно увидеть, что там находятся все файлы со всех трёх дисков - другими словами, все три дерева каталогов там присутствуют в виде «наложения» друг на друга.

Что же произойдёт при попытке создать новые файлы или каталоги внутри /mnt/virtual? Вопрос довольно непростой, но автор mhddfs (кстати, наш соотечественник, Дмитрий Обухов) справился с ним «на отлично». При создании нового файла на виртуальной файловой системе, mhddfs выберет реальный диск для записи автоматически, в зависимости от порядка перечисления их в команде на монтирование и от наличия на них свободного места. Если на первом диске свободного места достаточно, т.е. не меньше значения mlimit из опций mhddfs (которое по умолчанию равно четырём гигабайтам) - файл будет создан там. Если места меньше, чем mlimit - файл будет создан на втором диске. Если и на нём места мало - файл будет создан на третьем диске. Если же на каждом из трёх дисков свободного места меньше, чем значение mlimit, будет выбран просто-напросто диск, где свободного места осталось больше всего.

Но это ещё не всё. Если какой-то из дисков исчерпает своё свободное пространство в процессе записи файла, запись не «обвалится»; mhddfs обойдёт эту неприятность абсолютно прозрачно, переместив уже записанные данные файла на другой диск (где места побольше) и продолжив дописывать последующие данные уже туда. Приложение, записывающее файл, ничего и не заметит (кроме, может быть, небольшой задержки при записи очередной порции данных).

Вот собственно и всё: теперь можно работать с файлами в /mnt/virtual абсолютно так же, как и с очень большим реальным диском - не заморачиваясь, что где хранится, что откуда читается, и т.д. Кроме того, благодаря тому, что всё свободное место всех дисков также объединено, можно не думать, на какой из дисков записать новые файлы - пока хотя бы на одном из них есть место, mhddfs сама оптимально разложит файлы, абсолютно без вашего вмешательства.

Если вы решите сделать, чтобы виртуальная объединённая ФС подключалась при каждой загрузке компьютера, можно добавить следующее в /etc/fstab:

mhddfs#/mnt/hdd1,/mnt/hdd2,/mnt/hdd3 /mnt/virtual fuse defaults,allow_other 0 0

Подробности см. в man mhddfs.

И последнее, но весьма важное, о чём стоит упомянуть. При внедрении любого настолько же «глобального» решения следует обязательно подумать о том, насколько проблематично будет, при необходимости, отказаться от его использования.

К счастью, в случае mhddfs, это очень просто. Если в какой-то момент, к примеру, купив новый жёсткий диск на 500 гигабайт, вы решите более не использовать виртуальную ФС, можно просто скопировать все файлы и каталоги с неё на новый диск, и размонтировать mhddfs. Данные, которые раньше были объединены виртуально, теперь будут объединены реально, на одном диске.

А благодаря тому, что сами файлы не разделяются на кусочки, хранимые на разных дисках (как в случае с RAID), даже в случае, если mhddfs почему-то вдруг перестанет работать (или неожиданно изчезнет с лица земли), можно будет просто скопировать содержимое всех подключенных ранее через неё дисков в один реальный каталог и получить то же самое их объединение, что и было видно через mhddfs.



Источник: http://romanrm.ru/mhddfs
Категория: Linux и Unix | Добавил: SAM (18.05.2010)
Просмотров: 2156 | Комментарии: 2 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Категории раздела
Мои статьи [1]
Linux и Unix [47]
Все про Linux и Unix
Windows [3]
Все про Windows
Администрирование [5]
Все для Системного администратора
Cisco [2]
Мой опыт работы с кисками
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Copyright MyCorp © 2018
    Бесплатный конструктор сайтов - uCoz