usb FlashDrive :: скорость копирования на флэшку
raskapulk 8 апреля, 2008 - 02:25
имеем пачку(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
было это давно и неправда, но
раньше (непомню когда) монтировали через 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:
А: можно ли варьировать размером этого кэша, и устанавливать периодичность сброса кэша на флэшку ?
А: можно ли такойже механизм применить для раздела HDD? скажем выставить кэшь на /var метров 30(ессно /var - точка монтирования одного из разделов...), и жить на аккумуляторе еще на час-полтора подольше =)
_______________________________________
грех обманывать компиляторы в субботу