LINUX.ORG.RU

минимизация потерь ФС при внезапном выключении

 ,


0

2

Есть устройство с ОС Linux. Оно пишет архив данных 2 мегабайта в секунду (16 Мбит/с) на SSD накопитель с интерфейсом SATA. Тест dd показывает что в принципе накопитель может принимать до 20 мегабайт в секунду.

Файловая система - NTFS-3G, ОС - OpenEmbedded Fido.

Суть задачи сделать так чтобы потери были меньше секунды, однако в реальности они достигают чуть ли не 30-ти секунд.

Была опробована идея с опцией sync - да, так хвост данных не теряется в момент выключения, однако много данных просто теряется из-за чудовищно низкой скорости работы с накопителем.

т.е. без sync всё быстро но пол минуты просто теряется (поток 2 мегабайта), а с sync слишком медленно пишет. Моя программа получает поток по сети, а когда пишет - буферизует 512 КБайт и когда в буфере больше этого числа - пишет на диск в отдельном потоке.

Как быть? Может перейти на exFAT? А может поставлять драйвер для ext если смена ФС тут поможет в принципе? А может настроить размеры буферов? Или надо применять какой-то особый прием когда работаешь в режиме sync? Подскажите, у кого опыт есть?

Используй ядерный драйвер Paragon NTFS. У меня он записан в /etc/fstab так:

/dev/disk/by-id/ata-WDC_WD3200AAKS-00L9A0_WD-WMAV29399663-part1 /windows             ufsd    rw,uid=1000,gid=1000,dmask=0002,fmask=0003 0 0
ZenitharChampion ★★★★★
()
Ответ на: комментарий от ZenitharChampion

Почему ты уверен что именно это поможет? Нет проблем с производительностью (2 мегабайта в секунду всего), проблема с медленной работой режима sync, а без sync много теряется.

I-Love-Microsoft ★★★★★
() автор топика

А точно это ФС является узким местом? dd дает 20MB/sec на /dev/sdX или на ФС? Если ФС не является узким местом, то можно попробовать подтюнить работу с page cache. Смотри Docmunetation/sysctl/vm.txt на предмет dirty_*

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

Под Арм нет - там блоб.

Exfat-nofuse есть под ARM, но я не уверен что его можно запихнуть на SSD. У кого-то на ЛОРе был опыт с HDD - несовместимость полнейшая!

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

У меня в линуксе так. Втыкаю флешку. Копирую фильм 700 Мб. Секунда - и всё скопировалось. Да ладно?!

1). Хочу чтобы копировалось, как на HDD: сколько скопировалось, столько и показывает.

Смотрим на индикатор на Flash-диске. Мигает совсем недолго, а потом перестаёт. Да ладно?! Если не нажимать «Отмонтировать», то продолжится мигание только через минуту - флешка тупо минуту ничего не делает. Если нажать «Отмонтировать», то сразу начинается интенсивное мигание на 5 минут, а GNOME показывает просьбу подождать.

2). Хочу, чтобы флешка не решала постоять отдохнуть, а записывала всё сразу.

И наконец, 2 файла одновременно. Когда был ребёнком, взрослые дали мне флешку и сказали «скопируй 2 файла». Копирую первый. Когда осталось 10 секунд, копирую второй. «А вот это ты зря». 10 секунд чудесным образом превратились в... нет, не в 20, а в 2 минуты.

3). Копирование в два потока снижает скорость работы флешки в разы. Пусть Konqueror и Nautilus научатся копировать последовательно, а не параллельно! Когда видят, что это Flash, а не HDD!

Когда я спрашивал на ЛОРе, мне советовали опцию sync. Ну сделал - скорость упала до 180 килобайт в секунду (для сравнения, под виндой в один поток - 10 Мб/сек). Но процесс копирования отображается в реальном времени, не спорю.

А когда я прописал «sync» в /etc/fstab системы, установленной на флешку (ext2, а не FAT + SquashFS), система не загрузилась - остановилась на каком-то моменте. Вернул как было.

4). Похоже что sync - вреден. Нужно другое решение проблемы!

> Почему ты уверен что именно это поможет?

Когда на / закончилось место, я скопировал «rpmbuild» на NTFS. Идея оказалась неудачной: после создания пакета у всех бинарников не было параметра исполнения. Тогда я создал образ 32 Гб с файловой системой ext2. Пакеты стали получаться правильными.

Но возникла проблема. Компильнётся на огромной скорости много-много файлов, а потом подвисание, и FUSE ест 100% одного ядра. Потом ещё порция, и снова. Сделал chkdsk - не помогло. Тогда я поменял NTFS-3G на Paragon NTFS, и проблема исчезла.

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

Смотрим на индикатор на Flash-диске. Мигает совсем недолго, а потом перестаёт. Да ладно?! Если не нажимать «Отмонтировать», то продолжится мигание только через минуту - флешка тупо минуту ничего не делает. Если нажать «Отмонтировать», то сразу начинается интенсивное мигание на 5 минут, а GNOME показывает просьбу подождать.

Как минимизировать время «отдыха» флэшки? Чтобы не долго копило в буфер?

I-Love-Microsoft ★★★★★
() автор топика

Пиши в raw сразу на диск, без посредничества файловой системы.

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

Вот так записывается медленней, но гарантировано

/mnt/android auto auto,rw,user,relatime,async,flush,nofail,umask=0000,iocharset=utf8,codepage=866 0 0

bryak ★★★★
()

Если не обязательна совместимость с офтопиком, для начала избавься от fuse - любая «нативная» ФС будет работать быстрее

Ну и купи ИБП

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

«Нельзя просто так взять и купить», система встраиваемая, суть как раз в ИБП - аккумуляторы ставить нельзя, максимум суперконденсатор/ионистр, так что внезапно пропадает питание и нужно потерять не больше секунды.

sync только что замерил с ntfs-3g лишь 750 килобайт в секунду осиливает в режиме sync, больше уже нет, а это в 3 раза медленнее чем надо

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от annulen

Придется попробовать, либо как советуют «Пиши в raw сразу на диск» если под офтопом возможно читать флэшку без ФС.

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от Dead

Кстати, кажется там есть именно то что мне надо, узнаваемые 30 секунд...

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от Dead

Смотри Docmunetation/sysctl/vm.txt на предмет dirty_*

В итоге это оказалось реально рабочим решением, поставил

/proc/sys/vm/dirty_expire_centisecs = 50
/proc/sys/vm/dirty_writeback_centisecs = 25
и добился потерь меньше чем 1 секунда по факту! Всё успевает теперь. ФС не была узким местом.

ZenitharChampion

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