LINUX.ORG.RU
ФорумAdmin

OverlayFS и объединение произвольного количества каталогов

 ,


1

3

Почитал я про новый overlayfs, который добавили в linux 3.18, и что-то не проникся. Как там можно объединить в одно пространство пару десятков каталогов? Всё в rw. Или, допустим, два из них - в ro.

Кажется, оно тянет на замену AUFS3 только в элементарных случаях. Я рано обрадовался?

$ git grep FILESYSTEM_MAX_STACK_DEPTH
fs/ecryptfs/main.c:     if (s->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) {
fs/overlayfs/super.c:   if (sb->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) {
include/linux/fs.h:#define FILESYSTEM_MAX_STACK_DEPTH 2
Deleted
()

Если я правильно понял документацию, OverlayFS позволяет стекировать два слоя, один в RW, второй — в RO. Но результат стекирования можно опять стекировать с чем-нибудь ещё. Однако множественных RW-веток (как в aufs3) нет.

post-factum ★★★★★
()
Ответ на: комментарий от tailgunner

- Что «15»?
- А что «приборы»?!

Не больше двух (трёх, если считать самый нижний слой) слоёв ФС можно накладывать. Но можно просто увеличить константу и пересобрать ядро. Главное после этого потестить что в ядре нигде не происходит переполнение стека.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 3)
Ответ на: комментарий от Deleted

Не больше двух (трёх, если считать самый нижний слой) слоёв ФС можно накладывать

Прекрасно. А overlayfs со всеми своими слоями считается одним уровнем или несколькими?

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

overlayfs одной операцией монтирования может объединять только две директории - lower и upper. Но в качестве lower и upper можно указывать уже примонтированную другую overlayfs. При монтировании из lower и upper берётся максимальное значение s_stack_depth и добавляется единица. Если s_stack_depth получается больше FILESYSTEM_MAX_STACK_DEPTH, то выдаётся ошибка:

	sb->s_stack_depth = max(upperpath.mnt->mnt_sb->s_stack_depth,
				lowerpath.mnt->mnt_sb->s_stack_depth) + 1;

	err = -EINVAL;
	if (sb->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) {
		pr_err("overlayfs: maximum fs stacking depth exceeded\n");
		goto out_put_workpath;
	}

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

overlayfs одной операцией монтирования может объединять только две директории - lower и upper.

Уже почти 2 суток lower может быть несколько :)

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

О как... Но то linux-next, а значит пока не считается =).

Deleted
()
Ответ на: комментарий от Chaser_Andrey

Но lower - только ro? Вопрос прежний - можно объединить n rw?

А как именно это должно работать? Я с aufs не знаком, потому такой вопрос.

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

Например, у меня объединено пару десятков аккаунтов Yandex Disk в одно файловое пространство в сотни Гб, куда я лью шифрованные бэкапы.

Там можно указать произвольное количество слоев, причём первые имеют более высокий приоритет (если есть дубликаты). Также можно на лету внедрять новый слой под произвольным индексом. Для каждого слоя можно указать, можно ли туда писать или нет.

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

Жесть какая... Нет, overlayfs сейчас так не может. И вряд ли когда-нибудь сможет.

Deleted
()
Ответ на: комментарий от Chaser_Andrey

Для каждого слоя можно указать, можно ли туда писать или нет.

И если есть два писабельных слоя, как выбирается целевой?

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

http://aufs.sourceforge.net/aufs3/man.html#Policies to Select One among Multi...

В моем случае у меня mfs:

Selects a writable branch which has most free space. In order to keep the performance, you can specify the duration (’second’) which makes aufs hold the index of last selected writable branch until the specified seconds expires. The seconds is upto 3600 seconds. The first time you create something in aufs after the specified seconds expired, aufs checks the amount of free space of all writable branches by internal statfs call and the held branch index will be updated. The default value is 30 seconds.

Chaser_Andrey ★★★★★
() автор топика
1 августа 2016 г.
Ответ на: комментарий от Chaser_Andrey

А не в курсе, есть ли какая либо оверлей ФС, которая умела бы в регулярные выражения. Т.е. целевая ветка для записи выбиралась бы на основе регулярок примененных к пути по которым выполняется запись?

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

Свою простую Fuse? Да можно наверно и свое простое ядро быстро накидать, но боюсь мне не по зубам. А впрочем - что почитать по теме?

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

А я правильно понимаю что tdp работает так - пусть есть два слоя rw с такими каталогами:
1:
/a/ab/
/b/bb/

2:
/a/ab/abc/
/b/

Слой 1 смонтирован поверх слоя 2. Тогда если файл создается в /a/ab/ он будет создан слое 1, а если в /a/ab/abc/ то в слое 2. В /b/ в слой 2 вообще невозможно будет что-то записать. Даже если не в /b/bb/. А каталог /c/ будет создан в слое 1.

Так?

Suntechnic ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.