LINUX.ORG.RU
ФорумAdmin

Низкая скорость ntfs тома

 , ,


0

1

Добрый день. Начальные условия: SSD диск, 2 раздела - EXT4 и NTFS. На первом Debian 12, на втором винда. Второй примонтирован в /mnt/win.

Проверка скорости осуществляется командой

dd if=/dev/zero of=temp.tmp bs=1024 count=512000

Результаты для EXT4 раздела:

524288000 bytes (524 MB, 500 MiB) copied, 3.33399 s, 157 MB/s
524288000 bytes (524 MB, 500 MiB) copied, 3.09018 s, 170 MB/s

Результаты для NTFS раздела если в fstab он примонтирован как ntfs

524288000 bytes (524 MB, 500 MiB) copied, 47.2099 s, 11.1 MB/s
524288000 bytes (524 MB, 500 MiB) copied, 56.3911 s, 9.3 MB/s
524288000 bytes (524 MB, 500 MiB) copied, 69.1836 s, 7.6 MB/s

Аналогично если примонтирован как ntfs-3g

524288000 bytes (524 MB, 500 MiB) copied, 107.935 s, 4.9 MB/s
524288000 bytes (524 MB, 500 MiB) copied, 142.301 s, 3.7 MB/s

Ожидалось что скорость будет выше, но она оказалась еще ниже. Подскажите, пожалуйста, в чем дело и как добиться скорости записи того же порядка что скорость записи на ext4. Планируется на ntfs разделе держать данные, к которым должен быть одновременный доступ с обоих операционных систем (с учетом того что винда не умеет нормально работать с ext4 томами без костылей - делать наоборот не вариант).

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

Я пробовал в fstab оба варианта - ntfs-3g и просто ntfs, результат почти одинаков. С ntfs3 система не загружается, некорректное значение в fstab.

А в чем тогда преимущество exfat? Попробовать могу, у меня еще есть неразмеченное пространство.

Сказав «одновременно» я не совсем корректно выразился, имею в виду что загрузился в любую из 2 систем и вижу готовый примонтированный раздел без танцев с бубном, чтобы само работало.

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

Пересобираю ядро по инструкции https://phoenixnap.com/kb/build-linux-kernel включив опцию ntfs на этапе make menuconfig

На последнем шаге make install вылазит ошибка

Error! Bad return status for module build on kernel: 6.1.85 (x86_64)
Consult /var/lib/dkms/ntfs3/v27_20210901.lore/build/make.log for more information.

В указанном файле

./include/linux/gfp_types.h:337:25: warning: passing argument 1 of ‘bio_alloc’ makes pointer from integer without a cast [-Wint-conversion]
  337 | #define GFP_NOFS        (__GFP_RECLAIM | __GFP_IO)
      |                         ^
      |                         |
      |                         unsigned int
/var/lib/dkms/ntfs3/v27_20210901.lore/build/fsntfs.c:1451:37: note: in expansion of macro ‘GFP_NOFS’
 1451 |         struct bio *bio = bio_alloc(GFP_NOFS | __GFP_HIGH, nr_vecs);
      |                                     ^~~~~~~~
In file included from ./include/linux/blkdev.h:17:
./include/linux/bio.h:423:58: note: expected ‘struct block_device *’ but argument is of type ‘unsigned int’
  423 | static inline struct bio *bio_alloc(struct block_device *bdev,
      |                                     ~~~~~~~~~~~~~~~~~~~~~^~~~
/var/lib/dkms/ntfs3/v27_20210901.lore/build/fsntfs.c:1451:27: error: too few arguments to function ‘bio_alloc’
 1451 |         struct bio *bio = bio_alloc(GFP_NOFS | __GFP_HIGH, nr_vecs);
      |                           ^~~~~~~~~
./include/linux/bio.h:423:27: note: declared here
  423 | static inline struct bio *bio_alloc(struct block_device *bdev,
      |                           ^~~~~~~~~
./include/linux/gfp_types.h:337:25: warning: passing argument 1 of ‘bio_alloc’ makes pointer from integer without a cast [-Wint-conversion]
  337 | #define GFP_NOFS        (__GFP_RECLAIM | __GFP_IO)
      |                         ^
      |                         |
      |                         unsigned int
/var/lib/dkms/ntfs3/v27_20210901.lore/build/fsntfs.c:1455:41: note: in expansion of macro ‘GFP_NOFS’
 1455 |                         bio = bio_alloc(GFP_NOFS | __GFP_HIGH, nr_vecs);
      |                                         ^~~~~~~~
./include/linux/bio.h:423:58: note: expected ‘struct block_device *’ but argument is of type ‘unsigned int’
  423 | static inline struct bio *bio_alloc(struct block_device *bdev,
      |                                     ~~~~~~~~~~~~~~~~~~~~~^~~~
/var/lib/dkms/ntfs3/v27_20210901.lore/build/fsntfs.c:1455:31: error: too few arguments to function ‘bio_alloc’
 1455 |                         bio = bio_alloc(GFP_NOFS | __GFP_HIGH, nr_vecs);
      |                               ^~~~~~~~~
./include/linux/bio.h:423:27: note: declared here
  423 | static inline struct bio *bio_alloc(struct block_device *bdev,
      |                           ^~~~~~~~~
  CC [M]  /var/lib/dkms/ntfs3/v27_20210901.lore/build/frecord.o
make[2]: *** [scripts/Makefile.build:255: /var/lib/dkms/ntfs3/v27_20210901.lore/build/fsntfs.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [Makefile:2035: /var/lib/dkms/ntfs3/v27_20210901.lore/build] Error 2

То есть какая-то несовместимость количества и типа параметров вызова функции bio_alloc() в драйвере ntfs и в заголовках где эта функция объявлена. Что делать?

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

Сейчас вопрос в компиляции модуля ядра. Когда я буду знать сколько мне места надо на разделе с виндой, я его урежу до минимума и оставшееся место будет под раздел с данными. Но задача в том чтобы скорость доступа (как чтения так и записи) из Linux и Winows была адекватно одинаковая.

Dima_228
() автор топика