LINUX.ORG.RU

OverlayFS и сетевые файловые системы

 , , ,


0

1

Есть намерение монтировать объединённое дерево каталогов из удалённой сетевой ФС и расположенного локально RW-слоя поверх неё. Перво-наперво пробуем смонтировать удалённую ФС через NFS. В документации на OverlayFS сказано, что использовать NFS (и следует полагать, что и другие сетевые ФС тоже) в качестве upper не получится, но про lower наоборот сказано, что он может располагаться на какой угодно ФС. Однако при попытке использовать каталог со смонтированной сетевой ФС как lowerdir для OverlayFS начинаются странности.

В случае с NFS — файлы и каталоги, которые приходят из NFS-ветки, отказываются перемещаться и переименовываться.

$ sudo mount -t nfs4 -o nfsvers=4.2 remote.local:/remotedir /mnt/net/remote
$ sudo mount -t overlay overlay -o \
> lowerdir=/mnt/net/remote,\
> upperdir=/home/user/.upper_for_remote,\
> workdir=/home/user/.workdir_for_remote \
> /home/user/merge
$ cd ~/merge
$ mv ./catalogue ./rename_catalogue
mv: невозможно переместить './catalogue' в './rename_catalogue': Неподдерживаемая операция

Спрашивается, для кого вообще подключены upperdir и workdir? В самой смонтированной NFS всё переименовывается как следует, то есть проблема не с правами из-за странностей NFS idmap. (А победить их было непросто...) В /home смонтирован отдельный раздел, если это важно.

Ну хорошо, удалённую ФС можно смонтировать и по SSHFS. К тому же в ней есть и встроенная авторизация, и понятный IDmapping.

Вот только и с ней не всё так просто. OverlayFS с SSHFS в качестве lower вообще откажется монтироваться, если не указать опцию user_allow_other в /etc/fuse.conf и не смонтировать саму SSHFS с -o allow_other. Без этих опций FUSE даже руту будет отказывать в чтении смонтированного содержимого.

$ sshfs remoteuser@remote.local:/mnt/remote /home/user/net/sshfs_remote/ -o idmap=user
$ sudo mount -t overlay overlay -o [опции...]\
> /home/user/merge
mount: /home/user/merge: cannot mount overlay read-only.
$ sudo ls ~/net/remote/
ls: невозможно получить доступ к '/home/user/net/sshfs_remote/': Отказано в доступе

(И кстати, в случае с NFS на сервере необходимо экспортировать каталог с no_root_squash, иначе будет точно такая же ошибка.)

Но это не беда, указываем эти опции и перемонтируем SSHFS. Отлично, теперь root может читать содержимое смонтированной ФС. Однако монтироваться OverlayFS и в этом случае по-прежнему не станет, но ошибка уже становится другой:

mount: /home/user/merge: mount(2) system call failed: Устаревший дескриптор файла.

Ещё более странно. И что с таким вообще делать в общем случае?

Но в целом и это ещё не беда. Эту ошибку можно обойти при помощи немного странного workaround: смонтировать в качестве ещё одной lowerdir ещё одну OverlayFS, полностью составленную из каталогов на той же ФС, куда смонтирован объединённый каталог. Обычный каталог почему-то не подходит, с ним будет точно такая же ошибка про устаревший дескриптор.

-o lowerdir=/home/user/another_overlayfs:/home/user/net/sshfs_remote

Ну наконец-то смонтировалось! Хоть и выглядит это всё немного странно. Однако это ещё не всё. Остались небольшие косметические недоработки. В получившемся объединённом каталоге Dolphin может добавлять теги только к тем файлам и каталогам, метаданные которых уже скопированы в верхний слой. Например, для этого можно совершить временное переименование над желаемым файлом или каталогом. Ну и вручную сделать attr -s тоже можно, но Dolphin не понимает, что к этим файлам тоже можно добавлять xattrs.

(Кстати говоря, появившаяся в 4.19 возможность копирования в верхний слой только метаданных пришлась тут очень к месту, даже безотносительно манипуляций с xattrs. А то даже переименовать файл без полного copy_up было невозможно.)


Так всё-таки какой же способ монтировать сетевую ФС в нижний слой самый правильный? Что не хватает OverlayFS для перемещения и переименования в варианте с NFS? Как монтировать SSHFS без второго вспомогательного lower? И возможно ли как-нибудь обойти эту необходимость в предварительном metadata_copy_up, чтобы Dolphin смог добавлять теги к файлам сразу?

Ах да, дистрибутив — Arch, ядро — 4.20.0, если это важно.

[Тема вроде бы как на стыке Admin и Desktop — значит, отправляется в General. Логично?]

файлы и каталоги, которые приходят из NFS-ветки, отказываются перемещаться и переименовываться.

«Это норма» (C).

Я на это напарывался, там «особенности», вроде как в последних ядрах что-то починили, но точно не помню.

Dark_SavanT ★★★★★ ()
Ответ на: комментарий от Dark_SavanT

Весело, ничего не скажешь.

А в последних — это в каких? Вот в 4.19 в OverlayFS точно добавили возможность копирования в верхний слой только метаданных, что тоже очень удобно, но всё-таки не совсем про lower на NFS.

toyo-chi ()