LINUX.ORG.RU

FusePy и смежные вопросы


0

1

1. Можно ли считать ФС полноценной без xattr? Т.е. насколько их поддержка на самом деле нужна?

2. Использует ли ФС и ее софт st_nlink? Т.е. является ли адекватная информация там жизненно важной хотя бы для чего-то?

3. От каких uid/gid положено производить манипуляции с nod'ами? По дефолту, как я вижу, оно пишет от рута, а touch/mkdir не изменяют uid/gid записанных файлов. Т.е. если я трогаю /mpoint/something_brown от имени user, то файл будет создан от рута. Верно ли тут юзать fuse_get_context(), или дефолтное поведение является правильным ?

4. Вопрос по жестким ссылкам. Они вообще не создаются, link() не вызывается.

link mpoint/111/ mpoint/222
link: невозможно создать ссылку «mpoint/222» на «mpoint/111/»: Операция не позволяется
-> getattr / (None,)
<- getattr {'st_nlink': 2, 'id': 0, 'st_mode': 16877}
-> getattr /111 (None,)
<- getattr {'st_mtime':  'id': 50L ....}
-> getattr /222 (None,)
<- getattr '[Errno 2] No such file or directory'
По логу она даже не попыталась вызывать link()

При этом аналогичная строка выполняется для хоста:

touch /tmp/shi
link /tmp/shi /tmp/shi1
ls -lah /tmp | grep shi
-rw-r--r--  2 user user       0 Фев  6 06:12 shi
-rw-r--r--  2 user user       0 Фев  6 06:12 shi1

5. С какими правами должен монтироваться корень? По дефолту он «st_mode=(S_IFDIR | 0755), st_nlink=2» - сойдет?

6. Блокировками должна заниматься ОС через lock() / release()?

1. Можно

2. Это счётчик ссылок? Большинству программ пофиг. Но всяким rsync итп нет.

3. не распарсил

4. хз

5. в смысле? это обычная папка, руководствоваться логикой. не?

6. хз

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

3. Мой юзер в группе fuse, маунчу от юзера. Значит ли это, что файлы должны создаваться от имени юзера? Сейчас у меня так оно и происходит, но я параноик.

5. Т.е. перед маунтом прочитать атрибуты маунтпоинта и их подставить корню в fuse?

6. С блокировками я пока ничего не делал, это теоретический вопрос.

Все как обычно - open() возвращает хендл, с какими флагами режима открыт файл мы как бы знаем. RW-методы юзят этот хендл и можно предположить, что если файл открыт в режиме w*, значит проще всего всем остальным давать по рукам, пока запись не будет завершена, т.е. пока не будет вызван release(). Но это чето некрасиво :/

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

Но все эти блокировки и синхронизации чреваты глюками, а я отнюдь не гуру, поэтому может кто-то этим уже занимался и знает где что почитать?

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

Вот ты такие вопросы интересные задаёшь. Fuse это инструмент. Он создан чтобы творить добро и помогать людям. Как тебе нравится так и делай, ты же не божишься создать posix-compliant filesystem (или как это называется).

Короче, как тебе нужно так и делай. Но я всё же выскажу свою точку зрения, если тебе интересно.

3. Обычно ожидается что владелец файла это его создатель. Но так бывает не всегда, см. всякие биты прав на папках.

5. Не, традиционно поведение другое. При монтировании у папки становятся права корня. Т.е. менять ничего не нужно.

6. Блокировки это жопа. Литература по этому точно есть, но я не помню, увы, книжки которую читал.

Традиционно есть две модели advisory locking и mandatory locking. Можешь нагуглить это и посмотреть как работает. Обычно делается advisory locking который подразумевает что приложение должно прислушиваться к «советам файлухи» (выставленным явным образом блокировкам). Если приложение не слушается то это проблемы приложения. Т.е. пока не сделано явных блокировок каким-нить flock() (или lockf(), я их путаю) поведение файлухи не детерминировано.

А как блокировки разруливать... Думаю литература по тредам и всяким спинлокам, мутексам, фьютексам, хремутаксам и семафорам наведёт на правильные мысли. Можешь создать отдельную тему в девелопмент по исключительно этому вопросу, тут есть подкованный в этих вопросах народ.

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

ты же не божишься создать posix-compliant filesystem (или как это называется).

Дело в том, что я это пишу не совсем для себя, поэтому вопросы на тему поведения ФС у кого-то могут возникнуть.

Пойду гуглить локи. :)

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