Ошибки файловой системы
-
Shell копирует кусочками по 4Кб? Ёбаный стыд... Идём на рекорд.
Ну это я потом поправлю (размер буфера шелл), тем более еще нашлось несколько проблемок с шелл.
Но, похоже, что при массовых системных операциях (у меня - файловых, у Акрона - создания кнопок), в системе отваливаются кнопки - старые не реагируют, новые не создаются. И меню рисуется абы как.
Будем воспроизводить.
1я попытка копирования 922Мб файла шелом завершилась провалом на примерно 512Мб - ошибка копирования и вышеописанный песец системы.
2я попытка прошла успешно (сразу после перезагрузки) и без последствий. Заняла в фоне примерно 4ч15 минут, загрузка CPU была 3-5%
Тестирование копии прошло успешно unzip -t file.zip - повреждений нет
Кстати, вот пример скрипта для засечек времени
cd /usbhd0/1/programs
date
echo unzip started
unzip cmake -d/hd0/1/cmt
waitfor
date
Но, похоже, что при массовых системных операциях (у меня - файловых, у Акрона - создания кнопок), в системе отваливаются кнопки - старые не реагируют, новые не создаются. И меню рисуется абы как.
Будем воспроизводить.
1я попытка копирования 922Мб файла шелом завершилась провалом на примерно 512Мб - ошибка копирования и вышеописанный песец системы.
2я попытка прошла успешно (сразу после перезагрузки) и без последствий. Заняла в фоне примерно 4ч15 минут, загрузка CPU была 3-5%
Тестирование копии прошло успешно unzip -t file.zip - повреждений нет
Кстати, вот пример скрипта для засечек времени
Spoiler:
#SHScd /usbhd0/1/programs
date
echo unzip started
unzip cmake -d/hd0/1/cmt
waitfor
date
Поправленная версия shell копирует тот же файл за 4м:20с
Тем не менее, программы, которые пишут мелкими кусками (unzip etc), будут работать все также медленно, без отложенного кэша записи.
Тем не менее, программы, которые пишут мелкими кусками (unzip etc), будут работать все также медленно, без отложенного кэша записи.
В 60 раз быстрее.
Но всё равно медленно. Какой размер буфера?
Но всё равно медленно. Какой размер буфера?
Буфер 1Mb, но не более половины свободной памяти (уменьшаем при нехватке с шагом :2)
Для виртуалки нормальная скорость - в сравнении KFM примерно одинаково.
Для виртуалки нормальная скорость - в сравнении KFM примерно одинаково.
0CodErr wrote:Размер должен возвращаться.
Ну так ты всё же понял для чего это нужно?Pathoswithin wrote:Ну так я мог бы исправить документацию вместо кода.
Судя по сообщению в чате, похоже понял
Pathoswithin « Пн фев 06, 2017 8:33 pm » В документации написано "Если файлы в папке кончились раньше, чем было прочитано запрошенное количество, то функция прочитает, сколько сможет, после чего вернёт eax=6".
*facepalm* Там про файл, а там про папку, чему ты это вообще...
Мдам.. похоже ты всё-таки не понял
С файлом аналогично. Только вместо количества блоков будет количество прочитанных/записанных байтов.
С файлом аналогично. Только вместо количества блоков будет количество прочитанных/записанных байтов.
У папки количество блоков находится в БДВК, а в ebx только дублируется. Папка всегда читается полностью, не зависимо от количества запрошенных блоков, потому есть смысл попробовать прочитать какое-то количество наугад. При чтении файла в статический буфер тоже можно так сделать, но обычно сначала нужно узнать его размер. При записи в файл достаточно проверить наличие ошибки.
"При чтении файла в статический буфер тоже можно так сделать, но обычно сначала нужно узнать его размер." - Узнаётся из записи файла в ФС, причём любой ФС.Pathoswithin wrote:У папки количество блоков находится в БДВК, а в ebx только дублируется. Папка всегда читается полностью, не зависимо от количества запрошенных блоков, потому есть смысл попробовать прочитать какое-то количество наугад. При чтении файла в статический буфер тоже можно так сделать, но обычно сначала нужно узнать его размер. При записи в файл достаточно проверить наличие ошибки.
"При записи в файл достаточно проверить наличие ошибки." - Какой? - Записался/Не дописался/Не записался/...
Программист не тот, кто постоянно пишет КОД, а тот кто сможет понять чужой КОД!!!
КЭП? А вот для файлов оно не дублируется.Pathoswithin wrote:У папки количество блоков находится в БДВК, а в ebx только дублируется.
Pathoswithin wrote:есть смысл попробовать прочитать какое-то количество наугад
Дополнительный системный вызов?Pathoswithin wrote:сначала нужно узнать его размер
Ты когда-нибудь занимался обработкой файлов? Вполне типичные примеры:
Code: Select all
While BytesRead > 0 Do ... ;
Code: Select all
Repeat
..............
ReadFile ... ;
..............
Until (BytesRead < ReadBufferSize);
Ну а при записи в файл достаточно проверить наличие ошибки. Что не так?
С одной стороны, насколько знаю, у нас сейчас в KolibriOS или записано всё, или ничего. Будет ли оно так всегда?
Но с другой, вообще попадаются исходники в сети, в которых идёт проверка if bytesWritten < ...
Наткнулся ещё на https://www.linux.org.ru/news/opensourc ... quote]Если ваша файловая система возвращает ENOSPC при закрытии файла через вызов close(), а не при записи в него через write() ...[/quote]Но у нас сейчас нет дескрипторов. Вроде сейчас такой проблемы в KolibriOS нет?
Но с другой, вообще попадаются исходники в сети, в которых идёт проверка if bytesWritten < ...
Наткнулся ещё на https://www.linux.org.ru/news/opensourc ... quote]Если ваша файловая система возвращает ENOSPC при закрытии файла через вызов close(), а не при записи в него через write() ...[/quote]Но у нас сейчас нет дескрипторов. Вроде сейчас такой проблемы в KolibriOS нет?
Что поменялось с работой с путями в нескольких последних ревизиях?
unzip перестал находить файл архива, если я шелл запускаю с флэшки
при этом
pwd
/<сердечко>/usbhd0/1/PROGRAMS - заглавными
если я делаю пару смен каталога - на другой диск и обратно - сердечко и заглавные буквы из pwd пропадают и все работает
похоже, проблема в сердечке, заглавные буквы не влияют
флешка - FAT
но самому шеллу сердечко не мешает
unzip перестал находить файл архива, если я шелл запускаю с флэшки
при этом
pwd
/<сердечко>/usbhd0/1/PROGRAMS - заглавными
если я делаю пару смен каталога - на другой диск и обратно - сердечко и заглавные буквы из pwd пропадают и все работает
похоже, проблема в сердечке, заглавные буквы не влияют
флешка - FAT
но самому шеллу сердечко не мешает
В последних ревизиях я курочил только ext.
Who is online
Users browsing this forum: No registered users and 0 guests