У меня есть две генты с иксами: 32битная и 64битная. Кроме того, есть samba сервер с единственной шарой на полтора терабайта. На шаре лежит текстовый файл.
Открываю текстовый файл редактором gedit, и в 32битной системе он не открывается с ошибкой ENODEV.В 64битной системе через strace вижу, что используются обычные функции вроде fstat, fcntl, mmap, но с 64 битным параметром типа off_t, который содержит размер, смещение в файле итп. Собственно как и положено в amd64... Все работает, файл открывается.
В 32битной же системе off_t 32битный. Поэтому для работы с большими файлами дополнительно существуют функции mmap2, fstat64, fcntl64 итд. Однако обычные fstat, fcntl и mmap все еще присутствуют. Ошибка ENODEV возвращается функцией
mmap2(NULL, 562, PROT_READ, MAP_PRIVATE, 8, 0) = -1 ENODEV (No such device)
Пример с редактором простой, но та же неприятность есть и с другими программами (в том числе системными типа ldconfig), которые не заменить так же просто, как редактор. Причина снова в mmap2. Вопрос вобщем один - как побороть эту проблему? А если конкретнее то:
1. Как запретить работу с большими файлами (mmap2 итп) локально для определенной точки монтирования и монтируемого девайса? А может произвольного каталога? Или произвольной программы?
2. Как запретить работу с большими файлами глобально для всей системы?
3. Какую сетевую файловую систему взять вместо самбы чтобы расшарить большое хранилище с одного сервера <10 клиентам?
Также интересуют ваши соображения и опыт по этому вопросу относительно любой невиндовой оси и, как вариант, альтернативные способы решения.
Спасибо за внимание :)