usb FlashDrive :: скорость копирования на флэшку

имеем пачку(26 шт) файлов(картинок) по 250-400 кб каждая.

монтируем флэшку и копируем файлы на нее

mount -t vfat -o iocharset=koi8-r,sync /dev/sdb /dvd
cp -rv /drive-c/scan/immod /dvd/

скорость закачки при этом порядка 3-5Kб\сек

идем другим путем

mount -t vfat -o iocharset=koi8-r,async /dev/sdb /dvd
cp -rv /drive-c/scan/immod /dvd/

щдем пару секунд...
скорость закачки при этом порядка 2-2.2Mб\сек

на сколько я понял все дело в размере пакета, которым система пытается закинуть очередной кусок данных, я прав или я вру ?

возможна ли при синхронной работе таже производительность ? и какими опциями ее можно добиться...

Sync не рекомендуется

Опция Sync для монтирования флешек не рекомендуется - убивает флешки, низкая скорость записи.
Для нормальной работы и "быстрого извлечения" рекомендуется опция flush

Пример строки из /etc/fstab
/dev/sde1 /mnt/usbdisk auto flush,noauto,user,umask=000 0 0

...Хотя параметр flush вроде бы предназначен только для vfat разделов...

Дополнительно ещё использую правло udev для отмонтирования вытащенных флешек.

Если не трудно

Если не трудно привидите правила udev. =))

Правила отмонтирования

В качестве начала рекомендую почитать
http://ru.gentoo-wiki.com/ HOWTO Udev и автомонтирование носителей

Далее я изменил логику :
Монтируются флешки у меня через fstab , записями

/dev/sde1 /mnt/usbdisk auto flush,noauto,user,umask=000 0 0
/dev/sdf1 /mnt/usbdisk2 auto flush,noauto,user,umask=000 0 0

То есть после извлечения их надо только отмонтировать.

Скрипт /etc/udev/rules.d/10-flash-umount.rules :
# umount mounted flash
SUBSYSTEM=="block", KERNEL=="sd??", ACTION=="remove", RUN+="/etc/udev/scripts/udev-flash-umount %k"

Скрипт /etc/udev/scripts/udev-flash-umount :
#!/bin/bash
LOG="/var/log/udev"
sleep 1
DEV=`echo $1 | sed -n '/^sd[a-z][1-9]\?/p'`

if [ "$DEV" != "" ]; then
echo "--- `date` ---" >> $LOG
echo "Unmounting /dev/$DEV" >> $LOG
umount /dev/$DEV >> $LOG 2>&1
fi

Не забываем chmod u+x /etc/udev/scripts/udev-flash-umount

было это давно и неправда, но

Wadlax написал(а):
...Хотя параметр flush вроде бы предназначен только для vfat разделов...

раньше (непомню когда) монтировали через sync, но потом в ядре нечто поменяли и добавили flush - с тех пор sync стал заметно тупить 250-300к и его попросили неиспользовать на флэшках...

wi@wi ~ $grep flash

wi@wi ~ $grep flash /etc/fstab
/dev/sda1 /mnt/flash vfat noauto,user 0 0

Собсно и все. ИМХО лучше не бывает. Судя по лампочке на флеху инфа записывается по umount. Что собсно и требуется. И работает шустро ибо кеш, и флэху не напрягает ибо количество циклов записи ограничено. В пост про правила удев для умаунта выдернутой флехи не въехал.Куда оно инфу сбрасывать из кеша будет непонятно. Вообще даже в винде умаунт изобрели специально для флэх. "Извлечь устройство" называется. Автоматизировать сей процесс конторе MS так и не удалось :)

ента

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

енто в двухтонке да, там если не отмонтируеш, будь уверен, ты лишился того что только что закачал )

эту политику в

эту политику в винде ХР можно менять

мейби, никогда

мейби, никогда не ковырял...

В винде есть

В винде есть "Извлечение" :)

Для флешек есть "политики" Либо - Оптимизировать для быстрого извлечения , либо Оптимизировать для скорости (вроде так)
Первое - это запись на флешку сразу - достигается в Линуксе использованием команды flush .
Второе - это как раз запись через кэш - запись очень быстрая, данные просто скидываются в кэш и оттуда постепенно записываются на флешку.
В 2к была оптимизация для скорости. В ХР по умолчанию стоит оптимизация для извлечения. Но особо догадливые этого не знают и продолжают водить мышкой и нажимать Безопасно извлечь. Так дольше и безопаснее.

Мне же приятней записать и просто вытащить флешку из разьёма. Особо полезно когда торопишься. Можно вытаскивать флешку и без правил УДЕВ. Но! Тогда система будет думать , что у вас устроёсво /dev/sde1 (к примеру) ещё примонтировано. И При вставке флешки ещё раз система даст её имя /dev/sdf1 . И так далее - /dev/sdg1... У меня устройства прописаны в fstab и перестают монтироваться.

Использую правило УДЕВ для unmount УЖЕ ИЗВЛЕЧЁННОЙ флешки - чтоб не занимала имя.
Ну и выдёргиваю флешки из разьёма. С умом :)

"Куда оно инфу сбрасывать из кеша будет непонятно." - на флешку вообще-то :)))

A:

wi написал(а):
...И работает шустро ибо кеш, и флэху не напрягает ибо количество циклов записи ограничено....

А: можно ли варьировать размером этого кэша, и устанавливать периодичность сброса кэша на флэшку ?
А: можно ли такойже механизм применить для раздела HDD? скажем выставить кэшь на /var метров 30(ессно /var - точка монтирования одного из разделов...), и жить на аккумуляторе еще на час-полтора подольше =)

_______________________________________
грех обманывать компиляторы в субботу

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".