LINUX.ORG.RU

Не форкнутый ядерный драйвер EXFAT с поддержкой Linux 2.6, 3 и 4

 ,


2

0

Итак, если не считать Embedded-реализации Tuxera и Paragon - существует две реализации файловой системы exfat для Linux:

  1. FUSE (не ядерная)
  2. Samsung:

Форк монтирует с правильными правами, в то время как оригинальный Самсунговский не-форк что-то мудрит с Windows ACL. Выбор очевиден - форк! Но вот лично мне кажется, что раз форк патчили-перепатчили энтузиасты, внося туда новые возможности, то он (по моим субъективным ощущениям) может работать нестабильно. Однако я не могу привести ни одного доказательства и скорее всего вру. :-)

Пример использования не-форка:

$ tar xf exfat-1.2.19.tar.gz
$ cd exfat-1.2.19
$ make
$ su
Пароль:
# mkdir /lib/modules/`uname -r`/kernel/fs/exfat
# cp *.ko /lib/modules/`uname -r`/kernel/fs/exfat
# depmod -a
# modprobe exfat_core
# modprobe exfat_fs
# mkdir /mnt/exfat
# mount -t exfat /dev/sdb1 -o rw,uid=1000,gid=1000,dmask=0002,fmask=0003 /mnt/exfat
# exit
$

Правило HAL /etc/hal/fdi/policy/10-exfat.fdi
// Помогите создать правило udev, хотя udisks2 в моём Debian 8 монтирует с UID, поэтому наверно не надо

<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
   <device>
       <match key="volume.fstype" string="exfat">
           <match key="@block.storage_device:storage.hotpluggable" bool="true">
               <merge key="volume.fstype" type="string">exfat</merge>
               <merge key="volume.policy.mount_filesystem" type="string">exfat</merge>

               <append key="volume.mount.valid_options" type="strlist">dmask=</append>
               <append key="volume.mount.valid_options" type="strlist">fmask=</append>
               <append key="volume.mount.valid_options" type="strlist">silent</append>
               <append key="volume.mount.valid_options" type="strlist">uid=</append>
               <append key="volume.mount.valid_options" type="strlist">gid=</append>
               <append key="volume.mount.valid_options" type="strlist">allow_other</append>

               <merge key="volume.policy.mount_option.dmask=0002" type="bool">true</merge>
               <merge key="volume.policy.mount_option.fmask=0003" type="bool">true</merge>
               <merge key="volume.policy.mount_option.uid=1000" type="bool">true</merge>
               <merge key="volume.policy.mount_option.gid=1000" type="bool">true</merge>
               <merge key="volume.policy.mount_option.allow_other" type="bool">true</merge>
               <merge key="volume.policy.mount_option.silent" type="bool">true</merge>

           </match>
       </match>
   </device>
</deviceinfo>

Linux 3.9 и 3.10

свежая жмурятина!

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

Намекаю что ТС не просто так завёл тему.

anonymous ()

Пример использования в CentOS 7:

cp *.ko /lib/modules/3.10.0-123.el7.x86_64/kernel/fs/exfat

Слака там ->
Осиль хотя бы kabi tracking (weak-modules), а ещё лучше возьми dkms, а то в шапочном ядре исчезающе малое число символов подпадает под этот самый kabi stability promise. dkms для центоса правда патчить придётся, так как этот самый kabi tracking его эффективно превращает в тыкву, но это как раз таки мелочи жизни.

d_a ★★★★★ ()

свежих патчей
3.9 и 3.10
свежих

Ооооуууукей

Pinkbyte ★★★★★ ()

ОПу -20 за 4.2

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

Основная проблема - это найти версии 1.2.6, 1.2.7 и так далее. Самсунг их прячет! Я и 1.2.5 еле нашёл... На http://opensource.samsung.com/ нужно выкачивать исходные тексты ПО для планшетов,и выковыривать оттуда. А для этого нужно знать точный поисковой запрос.

Кто мешает пользоваться форком? Да в принципе никто - тем более что форку не надо -o rw,uid=1000,gid=1000,dmask=0002,fmask=0003. Но ты сам посмотри, как сильно они перелопатили все исходники! По моему мнению, оригинальный модуль работает лучше, стабильнее.

Я опустил руки. Ребят, помогите найти ≥ 1.2.6!

ZenitharChampion ★★★★★ ()

Добавил версию 1.2.12, взял отсюда. На каких ядрах Linux работает - не знаю. На 4.0 не собирается. Требуется тестирование сообщества на ядрах < 4.0. По идее, должно работать с Linux 3.19, но в exfat_super.c упоминается максимум 3.10.

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

Замечательно! Под 2.6.37 не компилируется:

  CC [M]  /home/zenitur/exfat-1.2.12/exfat_super.o
/home/zenitur/exfat-1.2.12/exfat_super.c: In function ‘exfat_revalidate_ci’:
/home/zenitur/exfat-1.2.12/exfat_super.c:366:2: error: ‘flags’ undeclared (first use in this function)
/home/zenitur/exfat-1.2.12/exfat_super.c:366:2: note: each undeclared identifier is reported only once for each function it appears in
/home/zenitur/exfat-1.2.12/exfat_super.c: At top level:
/home/zenitur/exfat-1.2.12/exfat_super.c:459:2: warning: initialization from incompatible pointer type
/home/zenitur/exfat-1.2.12/exfat_super.c:460:2: warning: initialization from incompatible pointer type
/home/zenitur/exfat-1.2.12/exfat_super.c:465:2: warning: initialization from incompatible pointer type
/home/zenitur/exfat-1.2.12/exfat_super.c:466:2: warning: initialization from incompatible pointer type
/home/zenitur/exfat-1.2.12/exfat_super.c: In function ‘setup_dops’:
/home/zenitur/exfat-1.2.12/exfat_super.c:2210:5: error: ‘struct super_block’ has no member named ‘s_d_op’
/home/zenitur/exfat-1.2.12/exfat_super.c:2212:5: error: ‘struct super_block’ has no member named ‘s_d_op’
make[4]: *** [/home/zenitur/exfat-1.2.12/exfat_super.o] Ошибка 1
make[3]: *** [_module_/home/zenitur/exfat-1.2.12] Ошибка 2
make[2]: *** [sub-make] Ошибка 2
make[1]: *** [all] Ошибка 2
make[1]: Выход из каталога `/usr/src/linux-2.6.37.6-0.20-obj/x86_64/desktop'

Вот скрин графического diff. Где там у них баг-трекер?

ZenitharChampion ★★★★★ ()

Большое обновление (1.2.12 - 1.2.19) с поддержкой Linux 3.18

ZenitharChampion ★★★★★ ()

А на пердолиться?

Я вчера взял Kingston FURY USB 3.0

Через стандартный fuse exfat в Ubuntu скинул 11 гб файл.

Nautilus перекидывал его 6 минут. При отмонтировании ещё 30 секунд что-то дописывалось.

Я очень сильно сомневаюсь, что на десктопе от ядренного модуля можно получить какие-то преимущества. Зато проблем запросто.

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

Не думаю что стоит ждать проблем. Судя по всему, модуль создавался не реверс-инжинирингом, а по спецификациям. Был скандал, что Samsung не показывал драйвер exfat, хотя там есть GPL-ный код VFAT. Мне кажется что не просто так прятал :-)

После скандала драйвер показали, но обновления фиг найдёшь! Этот релиз я выдрал из прошивки Galaxy S7.

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

Я очень сильно сомневаюсь, что на десктопе от ядренного модуля можно получить какие-то преимущества.

Ты сомневаешься, а я убедился и теперь всегда в новое ядро добавляю exfat-nofuse. Отлично работает, сейчас на 4.5.3.

Разница в том, что при его использовании при интенсивном копировании больших объемов — система не становится раком из-за 12309, в отличие от fuse-какахи. Хотя скорость копирования — та же.

slon ()

у меня есть сомнения в стабильности работы форка

Завязывай с этим.

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

ntfs-3g через fuse ужасно работает, особенно на флэшке. Не думаю что exfat сильно лучше.

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

На флешке NTFS неэффективен! Давай объявню на примере: как-то меня попросили записать 2 фильма на флешку (2 файла по 700 Мб). Копирую первый, видя что осталось 10 секунд, ставлю копироваться второй. Вдруг «осталось 10 секунд» у первого файла превратилось в «осталось 2 минуты». Друг, для которого я копировал, объяснил что флешки не умеют быстро в 2 потока.

NTFS в 1 поток не умеет, так как журналирование. Работать-то работает, но медленнее FAT32 или Exfat! Последнюю потому и создали, что NTFS неэффективен на флешках. А FAT32 - на больших разделах.

Что касается линуксовых ФС, можно использовать ext2, а можно ext4 без журнала. Журнал убирается командой:

tune2fs -O ^has_journal /dev/sdb1
ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от anonymous

Лучше. Я сравнил. exfat через fuse под линуксами быстрее чем ntfs через fuse этак процентов на 30%

Ну это в принципе логично. И да, NTFS на флешках по определению - это извращения.

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

Ну не знаю. Так то я за более чем 10 лет не видел.

Вот пульсы хрипят и глючят до сих пор, хотя уже версия к 10 близится. Тиринги там, убогость иксов. Это все пожалуйста.

Но вот 12309. Я конечно в него верю, но мне кажется, его сильно переоценивают.

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

Но вот 12309. Я конечно в него верю, но мне кажется, его сильно переоценивают.

Та не. 12309 это просто синоним «кампутир пачиму-то тормозит», потому его легко воспроизвести множеством способов.

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

Когда-то я зарепортил на Лурку 4.2 про ядро 2.6.18. Что «12309 это регрессия, а раньше (2.6.18) бага не было». Конечно я ошибался: это же не баг, а совокупность багов.

А вот недавно установил CentOS 5 на Pentium III. И там 12309 реально нет. Оказалось что я был прав? Ну вот например, Firefox 45 трётся ушами о 512 Мб памяти, система своппится. Плеер не лагает, всё что не браузер - не лагает. Всё тормозит, но на новых системах как будто бы тормозит в прогрессии.

Я думаю что причина в https://en.wikipedia.org/wiki/O(1)_scheduler, который упразднили в ядре 2.6.23.

// Кстати. Я заметил что в новых линуксах, когда программа тормозит, нет такого что нажатия на мышку игнорируются, 2 из 3 программа не слышит. Хотя клава слышит все - кнопки с опозданием, но нажимаются! В старом линуксе эта проблема стоит в полный рост! В шутеры нипаиграть в динамичных моментах...

ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 4)

Добавил правило HAL. Помогите сделать правило для современных дистров, таких как Debian Jessie 8.0! Там Linux 3.16

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