Page 7 of 13

Re: Ошибки файловой системы

Posted: Thu Feb 02, 2017 7:12 pm
by Pathoswithin
Shell копирует кусочками по 4Кб? Ёбаный стыд... Идём на рекорд.

Re: Ошибки файловой системы

Posted: Thu Feb 02, 2017 10:45 pm
by Siemargl
Ну это я потом поправлю (размер буфера шелл), тем более еще нашлось несколько проблемок с шелл.

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

Будем воспроизводить.

1я попытка копирования 922Мб файла шелом завершилась провалом на примерно 512Мб - ошибка копирования и вышеописанный песец системы.

2я попытка прошла успешно (сразу после перезагрузки) и без последствий. Заняла в фоне примерно 4ч15 минут, загрузка CPU была 3-5%
Тестирование копии прошло успешно unzip -t file.zip - повреждений нет

Кстати, вот пример скрипта для засечек времени
Spoiler:#SHS
cd /usbhd0/1/programs
date
echo unzip started
unzip cmake -d/hd0/1/cmt
waitfor
date

Re: Ошибки файловой системы

Posted: Mon Feb 06, 2017 3:40 pm
by Siemargl
Поправленная версия shell копирует тот же файл за 4м:20с

Тем не менее, программы, которые пишут мелкими кусками (unzip etc), будут работать все также медленно, без отложенного кэша записи.

Re: Ошибки файловой системы

Posted: Mon Feb 06, 2017 6:09 pm
by Pathoswithin
В 60 раз быстрее. :lol:

Но всё равно медленно. Какой размер буфера?

Re: Ошибки файловой системы

Posted: Mon Feb 06, 2017 8:17 pm
by Siemargl
Буфер 1Mb, но не более половины свободной памяти (уменьшаем при нехватке с шагом :2)

Для виртуалки нормальная скорость - в сравнении KFM примерно одинаково.

Re: Ошибки файловой системы

Posted: Tue Feb 07, 2017 9:02 pm
by 0CodErr
0CodErr wrote:Размер должен возвращаться.
Pathoswithin wrote:Ну так я мог бы исправить документацию вместо кода. :wink:
Ну так ты всё же понял для чего это нужно?
Судя по сообщению в чате, похоже понял
Pathoswithin « Пн фев 06, 2017 8:33 pm » В документации написано "Если файлы в папке кончились раньше, чем было прочитано запрошенное количество, то функция прочитает, сколько сможет, после чего вернёт eax=6".

Re: Ошибки файловой системы

Posted: Tue Feb 07, 2017 10:47 pm
by Pathoswithin
*facepalm* Там про файл, а там про папку, чему ты это вообще...

Re: Ошибки файловой системы

Posted: Tue Feb 07, 2017 11:03 pm
by 0CodErr
Мдам.. похоже ты всё-таки не понял :)

С файлом аналогично. Только вместо количества блоков будет количество прочитанных/записанных байтов.

Re: Ошибки файловой системы

Posted: Wed Feb 08, 2017 9:17 am
by Pathoswithin
У папки количество блоков находится в БДВК, а в ebx только дублируется. Папка всегда читается полностью, не зависимо от количества запрошенных блоков, потому есть смысл попробовать прочитать какое-то количество наугад. При чтении файла в статический буфер тоже можно так сделать, но обычно сначала нужно узнать его размер. При записи в файл достаточно проверить наличие ошибки.

Re: Ошибки файловой системы

Posted: Wed Feb 08, 2017 6:59 pm
by Artyom
Pathoswithin wrote:У папки количество блоков находится в БДВК, а в ebx только дублируется. Папка всегда читается полностью, не зависимо от количества запрошенных блоков, потому есть смысл попробовать прочитать какое-то количество наугад. При чтении файла в статический буфер тоже можно так сделать, но обычно сначала нужно узнать его размер. При записи в файл достаточно проверить наличие ошибки.
"При чтении файла в статический буфер тоже можно так сделать, но обычно сначала нужно узнать его размер." - Узнаётся из записи файла в ФС, причём любой ФС.
"При записи в файл достаточно проверить наличие ошибки." - Какой? - Записался/Не дописался/Не записался/...

Re: Ошибки файловой системы

Posted: Wed Feb 08, 2017 8:02 pm
by 0CodErr
Pathoswithin wrote:У папки количество блоков находится в БДВК, а в ebx только дублируется.
КЭП? :mrgreen: А вот для файлов оно не дублируется.
Pathoswithin wrote:есть смысл попробовать прочитать какое-то количество наугад
:shock:
Pathoswithin wrote:сначала нужно узнать его размер
Дополнительный системный вызов?

Ты когда-нибудь занимался обработкой файлов? Вполне типичные примеры:

Code: Select all

While BytesRead > 0 Do ... ;

Code: Select all

Repeat  
  ..............
  ReadFile ... ;  
  ..............
Until (BytesRead < ReadBufferSize);  
Можно читать While Not EOF, EOF будет означать, что прочитан последний кусок, но он не обязан быть равным размеру буфера. Вот в ebx и возвращается BytesRead.

Re: Ошибки файловой системы

Posted: Wed Feb 08, 2017 8:32 pm
by Pathoswithin
Ну а при записи в файл достаточно проверить наличие ошибки. Что не так?

Re: Ошибки файловой системы

Posted: Wed Feb 08, 2017 9:17 pm
by 0CodErr
С одной стороны, насколько знаю, у нас сейчас в KolibriOS или записано всё, или ничего. Будет ли оно так всегда?
Но с другой, вообще попадаются исходники в сети, в которых идёт проверка if bytesWritten < ...
Наткнулся ещё на https://www.linux.org.ru/news/opensourc ... quote]Если ваша файловая система возвращает ENOSPC при закрытии файла через вызов close(), а не при записи в него через write() ...[/quote]Но у нас сейчас нет дескрипторов. Вроде сейчас такой проблемы в KolibriOS нет?

Re: Ошибки файловой системы

Posted: Wed Feb 08, 2017 11:38 pm
by Siemargl
Что поменялось с работой с путями в нескольких последних ревизиях?

unzip перестал находить файл архива, если я шелл запускаю с флэшки
при этом
pwd
/<сердечко>/usbhd0/1/PROGRAMS - заглавными

если я делаю пару смен каталога - на другой диск и обратно - сердечко и заглавные буквы из pwd пропадают и все работает

похоже, проблема в сердечке, заглавные буквы не влияют

флешка - FAT

но самому шеллу сердечко не мешает

Re: Ошибки файловой системы

Posted: Thu Feb 09, 2017 1:21 pm
by Pathoswithin
В последних ревизиях я курочил только ext.