Назад | Перейти на главную страницу

Как смонтировать устройства rbd с драйвером предохранителя?

Это дополнительный вопрос от: Как смонтировать устройство rbd из fstab Который я спросил некоторое время назад.

Как смонтировать устройства rbd с драйвером предохранителя? (Я не могу использовать драйвер ядра из докера, не открывая множество привилегий)

Насколько я могу судить, я создаю запись в файле fstab примерно так:

id=client.admin /mnt fuse.ceph 0 0

Однако я не вижу, как указать блочное устройство rbd. Если я запустил это монтирование, я увижу файл в / mnt / mariadb1 (mariadb1 - это имя моего устройства rbd, созданного с помощью rbd create --size 250000 mariadb1)

Как мне на самом деле смонтировать его как файловую систему?

Примечание: Да, я бы действительно хотел использовать драйвер ядра rbd и смонтировать его с хоста, а затем открыть его в моем контейнере докеров, но ... Я использую CoreOS.

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

Я должен предположить, что вы имеете в виду RBD-fuse, когда говорите об этом, потому что ceph-fuse - это утилита cephfs и не имеет ничего общего с RBD.

Однако предпосылка вашего вопроса нарушается еще больше, потому что ваше понимание того, что rbd-fuse на самом деле неполный.

librbd предоставляет вам файл изображения, который хранится в Ceph. Большинство людей (через rbd map) используйте этот образ, чтобы предоставить псевдоблочное устройство в форме / dev / rbd *.

Единственная разница с rbd-fuse заключается в том, что он предоставляет свою собственную псевдо-файловую систему и предоставляет изображения в виде простых файлов, совместимых с POSIX, в отличие от блочных устройств.

Следовательно rbd-fuse не знает о фактическом содержимом файла изображения больше, чем rbd map делает.

При вызове rbd-fuse mountpoint любые изображения RBD внутри пула будут видны в mountpoint. Требуются параметры команды, в частности -p если вы используете другой пул в ceph, кроме rbd и -c если вы используете другой файл конфигурации, кроме /etc/ceph/ceph. Вы также можете выставлять отдельные изображения, используя -r.

Что делать с этими файлами - решать вам. Им может быть записана файловая система (имейте в виду, что Linux будет ворчать, поскольку они не являются специализированными блочными устройствами). Вы можете монтировать их как петлевые устройства, если присутствует файловая система.

$ rbd create test
# mkdir -p /rbd_images
# rbd-fuse /rbd_images
# mkfs /rbd_images/test
# mkdir -p /mnt/rbd_test
# mount /rbd_images/test /mnt/rbd_test

Должен представить что-то вроде следующего:

$ mount
rbd-fuse on /rbd_images type fuse.rbd-fuse (rw,nosuid,nodev)
/rbd_images/rbd_test on /mnt/rbd_test type ext4 (rw)

Будь то верный способ (для вашего использования) сделать это, хотя это другое дело. Однако он может предоставить вам доступ к изображениям RBD, которые в противном случае не поддерживались бы вашими системами. krbd версия.

Тип файловой системы ceph.fuse (и его ручной эквивалент ceph-fuse) используется для монтирования томов cephfs. Они принципиально отличаются от блочных устройств RADOS (RBD).

С одной стороны, RBD представляет собой блочное устройство, на котором хост-система может запускать файловую систему, как это было бы с физическим блочным устройством. Ceph ничего не знает о структуре файловой системы внутри RBD. С другой стороны, cephfs - это самостоятельная файловая система, то есть ceph управляет отдельными файлами и метаданными. Одним из последствий является то, что вы обычно можете смонтировать RBD только один раз, потому что два хоста, обращающиеся к одному и тому же блочному устройству, не имеют никаких средств для синхронизации доступа к нему, тогда как вы можете смонтировать cephfs много раз, как сетевая файловая система.