[Comm] USB-диск. безопасно извлечь

Damir Shayhutdinov =?iso-8859-1?q?damir_=CE=C1_tecon=2Eru?=
Чт Мар 16 13:19:03 MSK 2006


On Thu, Mar 16, 2006 at 11:49:20AM +0200, Gennadiy Redko wrote:
> Damir Shayhutdinov пишет:
> 
> > 
> > Оно не прибудет по-любому, пока есть -o sync. Поэкспериментируйте.
> > 
> Так что все-таки происходит?
> Если кэш устройства пустой, то sync не должен ничего писАть на
> флэш, даже будучи запущенным.
> А если не пустой - тогда почему бы и не записать ?
Э-эх *одевает профессорскую мантию и подготовливает длинную лекцию*

Есть такая программа - sync(1). Она делает системный вызов sync(2),
который сбрасывает все буферы файлов на диск.

В отличие от этой программы, есть такая опция монтирования (-o sync). Она
похожа на действие системного вызова sync, вызываемого постоянно. То есть
любые операции записи (write) будут блокированы до тех пор, пока данные 
физически не попадут на диск. (к этой опции есть альтернатива - опция O_SYNC
при открытии файла, но я про нее говорить здесь не буду).

Пишет программа на диск строчку из допустим 4 байт - и выполнение
программы приостанавливается, пока эти 4 байта физически не будут записаны.
И если программе надо допустим записать 1024 раза по 4 байта - то она будет
1024 раза ждать пока эти данные будут физически записаны (и блок флешки
будет перезаписан 1024 раза).

Но если монтировать без -o sync, то эти 1024 вызовов по 4 байта
операционной системой будут преобразованы в одну запись длиной 4096 байт,
что будет сделано гораздо быстрее, и, что важнее, асинхронно с выполнением
основной программы - то есть программа не будет ждать, а сможет выполнять
свои вычисления дальше.

Таким образом, в зависимости от опции -o sync в параметрах монтирования в 
вышеприведенном примере, запись 4096 байт может быть выполнена 1024
физическими записями на диск (с -o sync) и одной физической записью (без
-o sync или что то же самое, с -o async).
Износ флешки таким образом, при включенном -o sync и вышеописанном использовании 
ускоряется в тысячу раз. Это конечно экстремальный случай, для
иллюстрации, но задумайтесь, разве изменение метаинформацией о файлах
(что происходит при каких-то изменениях в файловой системе) не является
похожим случаем?


-- 
WBR,
Damir Shayhutdinov



Подробная информация о списке рассылки community