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 раз быстрее.
Но всё равно медленно. Какой размер буфера?
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:Ну так я мог бы исправить документацию вместо кода.
Ну так ты всё же понял для чего это нужно?
Судя по сообщению в чате, похоже понял
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 только дублируется.
КЭП?
А вот для файлов оно не дублируется.
Pathoswithin wrote:есть смысл попробовать прочитать какое-то количество наугад
Pathoswithin wrote:сначала нужно узнать его размер
Дополнительный системный вызов?
Ты когда-нибудь занимался обработкой файлов? Вполне типичные примеры:
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.