LINUX.ORG.RU
Форум — Talks  

Спустя 30 лет, в KDE починили копирование файлов

 , ,


0

2

Привет, чят!

Как нам всем хорошо известно, копирование файлов на флешки в линуксе всегда было сломано: процесс cp или индикатор копирования в твоём любимом файловом менеджере завершался успехом задолго до того, как файл был по-настоящему записан на диск. Но разработчики KDE не сдавались и, наконец, починили этот недостаток во всех программах, использующих KIO.

Тыц: https://blogs.kde.org/2026/10/27/fixing-kio-copy-to-usb-stick-and-network-filesystems/

Ъ: для этого потребовалось переписать кучу кода, используя странные системные вызовы типа sync_file_range (Linux only, BSD в пролёте) и запилить вообще достаточно сложную эвристику работы с файлами разного размера. И всё для того, ЛОРовец, чтобы ты мог скинуть фоточки на флешку и не просрать данные – фича, которая в Windows была практически из коробки.

Ждём аналогичных изменений в GNOME и прочих XFCE, там этого пока нет.

Ответ на: комментарий от unDEFER

Зачем чинить то что не сломано?

Если индикатор копирования показывает, что файл записан, а байт на диске при этом нет, это называется сломано.

yorshka
() автор топика
Ответ на: комментарий от yorshka

Я с вами не соглашусь, надо просто правильно отмонтировать и всё будет хорошо.

Всегда обожал эту фичу, особенно при работе с дискетами.

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

Компьютеры созданы для людей. И соответствовать они должны ментальной модели здорового разумного человека. Поменьше модальности/режимов, проще интерфейсы.

> Всегда обожал эту фичу, особенно при работе с дискетами.

В чём выгода? Ждать 5 минут завершение cp, потом ещё 10 минут unmount?

А если выключить машину до unmount, то ещё сработают таймауты и данные потеряются.

kaldeon ★★
()
Последнее исправление: kaldeon (всего исправлений: 1)

> для этого потребовалось переписать кучу кода, используя странные системные вызовы типа sync_file_range (Linux only, BSD в пролёте) и запилить вообще достаточно сложную эвристику работы с файлами разного размера

. Теперь операция копирования в KDE ≠ операция копирования в других местах.

. Сделано не прозрачно в одном месте, а кишками наружу в N мест.

Звучит не очень радужно.

> Ждём аналогичных изменений в GNOME и прочих XFCE, там этого пока нет.

Возможно, и не будет из-за цены поддержки.

kaldeon ★★
()

Making the copy correct is the easy part: call fsync() after every file, or open the destination with O_DIRECT and skip the cache. Both make copies several times slower, and they would slow down the fast local disks too, where nothing was wrong.

Не понял. Я могу подключить внешний HDD (и его внезапно вынуть). И основной тоже. Да и просто питание может отключиться внезапно.

Knowing which destinations need it, without asking them. The filesystem type does not show whether a device can be unplugged, and asking a network filesystem anything is a round trip to a server that may be slow.

Т.е. я могу что-то скопировать на network filesystem, сервер мне ответит, что всё хорошо скопировалось, а сам на самом деле на диск данные не запишет — опять неправду скажет.

Короче какая-то замудрёная бизнес-логика.

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

Я с вами не соглашусь, надо просто правильно отмонтировать и всё будет хорошо.

Это совершенно разные вещи. ГУЙ не должен врать, не смотря ни на какие опции монтирования.

seiken ★★★★★
()

Не вижу никаких проблем. Никто в здравом уме не выдергивает флешку, пока не завершилась запись. Просто надо принять, что запись заканчивается не по прогресс-бару, по сообщению «Теперь устройство может быть извлечено».

И да, ни разу не терял файлы по причине «недописанности», просто спокойно жду когда отмонтируется

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

Не буду с вами спорить. Я высказал свою точку зрения, вы - свою. Они не совпадают, ну и ладно.

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

В чём выгода?

В том, что файл доступен для чтения уже в тот момент, когда он скопировался с точки зрения буфера. Что физически на чипе байтики ещё не изменились — не мешает.

Ждать 5 минут завершение cp, потом ещё 10 минут unmount?

Ничем не хуже, чем ждать 15 минут завершения cp и при этом не иметь возможности полноценно работать с этим файлом.

А если выключить машину до unmount, то ещё сработают таймауты и данные потеряются.

Так не надо выключать машину до unmount. Её и с новым поведением если во время копирования выключить, данные потеряются. Нет разницы.

CrX ★★★★★
()

скинуть фоточки на флешку и не просрать данные

А что разработчики кде сделают в случае если юзер ударит по флешке молотком?

ya-betmen ★★★★★
()
Ответ на: комментарий от unDEFER

Я с вами не соглашусь, надо просто правильно отмонтировать и всё будет хорошо.

А если это сетевая шара и соединение отвалилось? Тоже надо «правильно отмонтировать»?

И, наконец, как мне отменить копирование файлов в твоей модели? Я решил закинуть 100500 файлов, внезапно в середине мне приспичило пойти по своим делам с этой флешкой. Чо делать чтобы реально скопированные файлы записались корректно, а остальные отменить?

Писечка на торте, про которую там пишут – операция перемещения. В старых реалиях ты перемещаешь файл на медленную флешку, и он какое-то время существует только в кэше в оперативе, потому что с диска он удалён, а на флешку не записан. Если в данный момент что-то случается, файл улетает в /dev/null. Ну вообще не круто. В новом варианте старая копия файла удаляется только когда новая 100% гарантированно записана.

yorshka
() автор топика
Последнее исправление: yorshka (всего исправлений: 2)
Ответ на: комментарий от Chord

Просто надо принять, что запись заканчивается не по прогресс-бару, по сообщению «Теперь устройство может быть извлечено».

Это неудобно

tiinn ★★★★★
()

Хорошие, положительные, изменения.

tiinn ★★★★★
()

фича, которая в Windows была практически из коробки.

Чего?

Это в линуксе sync гарантированно скидывал кеши на диски. А в венде - это всегда был лютый пердолинг и «Извлечь устройство» вообще ни разу не гарантирует скидывание кешей на флешку, потому что венду писали криворукие долбодятлы.

Stanson ★★★★★
()
Ответ на: удаленный комментарий

На винде сидит 80%, но там ровно также тупые юзера выдергивают флешки и потом удивляются, куда делись файлы, прибегают и умоляют найти файлы которые исчезли «сами по себе». Половина из них про безопасное извлечение даже не слышали. И что, снижает это как-то количество виндоюзеров?

Chord ★★★★★
()

Кстати, а чего никто не запилит новость про куртку, которого поймали на измене? Якобы спал с китайской шпиёнкой

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

Зачем чинить то что не сломано?

Нам лет 20 это говорили про гномовский диалог открытия/сохранения файла, он не нуждается в изменениях, дополнительные фичи противоречат какой-то там концепции. А потом просто сделали нормальный. Оказалось, что была-то полная фигня, а стало удобно.

Мне, как пользователю, вообще наплевать почему так. Это всрато и неудобно – нужно быть полным ретардом, чтобы считать это нормальным.

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

Нет. Штаны через голову одевать - это неудобно, и привычка здесь не причём. Копирование на флешку, которое по факту не копирование - это баг, и это необходимо было исправить.

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

Не понял. Я могу подключить внешний HDD (и его внезапно вынуть). И основной тоже. Да и просто питание может отключиться внезапно.

Ага. Раньше у тебя косячными вышло бы неопределённое число файлов. Сейчас максимум один, который в полёте в текущий момент времени.

Т.е. я могу что-то скопировать на network filesystem, сервер мне ответит, что всё хорошо скопировалось, а сам на самом деле на диск данные не запишет — опять неправду скажет.

Это уже проблема сервера. Но по крайней мере теперь ты знаешь, что если твой гуй написал тебе, что файл отослан на сервер, то он реально отослан, а не завис в файловом кэше на твоей машине.

yorshka
() автор топика
Ответ на: комментарий от Chord

Удобство - это всего лишь дело привычки

Кресло должно быть по форме жопы, а не наоборот ☝️

frunobulax ★★★★★
()

Что еще раз подтверждает тезис о том, что кдешники латентные вендузятники

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

А гуй тут причем? Так работает и вполне себе cli cp. Сказано же хотите целостность - делайте fsync. Не хотите целостность - не делайте

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

Кстати, а чего никто не запилит новость про куртку, которого поймали на измене?

Кого? Какую куртку?

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

A local fixed disk does not need any of this, and keeps the current behaviour exactly. With the removable policy forced onto a local disk for testing, the 3000 small files took 1.55 s against 1.54 s before the change.

Он не делает никакие синки, если он думает, что пишет на «local fixed disk».

Т.е. если он записывал на «local fixed disk» и питание внезапно пропало, то похериться может всё.

Это всё эвристики и костыли.

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

Так работает и вполне себе cli cp

Это технические детали. Меня как пользователя не волнует, какие там в кишках ОС кэши. Я просто копирую файлы в ГУЕ. Я что, должен каждый раз лезть в консоль и что-химичить, чтобы просто скопировать несчаст ый фаил?

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

Что еще раз подтверждает тезис о том, что кдешники латентные вендузятники хотят комфорта.

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

Кого? Какую куртку?

Забейте. Хуанг изменял жене с китайской шпионкой. Ой-ой-ой, кто запилит новость на ЛОРе? Уж не я.

tiinn ★★★★★
()

Ъ: для этого потребовалось переписать кучу кода, используя странные системные вызовы типа sync_file_range (Linux only, BSD в пролёте) и запилить вообще достаточно сложную эвристику работы с файлами разного размера.

Вот это напрягает. Нет, на БСД-то вообще наплевать. А вот то, что это неочевидный прыжок в гамаке с сальто - может и в Линусе когда-то сломается…

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

Да, так. Потому что целостность встает в противоречие с производительностью. Если я компилирую какой-то проект мне совершенно фиолетово, что промежуточные файлики полностью фиксируются на диске после того как соответствующая строка выхлопа мейк файла появилась на экране, а не до этого. А вот время сборки конечного результата меня волнует

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

Это кейс уже не простого юзера и подобное поведение можно бы включить в настройках самому. Ну а что касается обычного юзерленда, то думаю большинству важней целостность на диске

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

Да не факт. Вот браузер, с которого вы читаете лор, создает тыщи мелких файликов за день, и юзеру важнее быстрее увидеть содержимое страницы, а не когда там файлики браузерного кэша просинкаются на диск и что они могут внезапно сломаться при выключении питания

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

не вижу проблемы браузерах, уж поверь пишу с офтопа, открытых вкладок больше сотни, что-то не напрягает. больше того, в офтопе еще и запись в файл атомарная по большей части, в отличии от, тоже не напрягает

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

Да не факт. Вот браузер, с которого вы читаете лор, создает тыщи мелких файликов за день, и юзеру важнее быстрее увидеть содержимое страницы, а не когда там файлики браузерного кэша просинкаются на диск и что они могут внезапно сломаться при выключении питания

А потом у тебя после ребута на главной ЛОРа член вместо пингвина, потому что файлик в кеше побился.

yorshka
() автор топика

вроде так работает

rsync -ah --partial --info=progress2 'откуда' 'куда' && sync
endspiel
()

в Windows была практически из коробки

«Безопасное извлечение устройства» для тебя шутка?

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

«Безопасное извлечение устройства» для тебя шутка?

про работе с флешками ни разу не пользовался. Продуманные UI проектируются так, что наиболее частые операции реализуются с наименьшими телодвижениями. Если какой-то USB девайс требует непременно его извлекать явно, то при чём тут USB флешки?

seiken ★★★★★
()

фича, которая в Windows была практически из коробки

Ну 4.2 же

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

У старых пердунов уже деменция старческая. Не трогай их.

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

Конечно не видишь, они же не синхронно пишутся. Атомарность в ntfs для метаданных, а не для данных. Так что пример мимо

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

ну ну, прямо мимо, самописный логер не даст соврать, да на тредах, да через файл, да давно на sql переделан, ибо нужна была кросс и то что работало под офтопом в лине стало проблемой. я бы даже сказал проблемой стала графическая тулза, которая этот файл читала, она по заветам отдельная и изолентой примотанная :)

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

Конечно не видишь

ну так собственно мне и все равно раз не вижу :)

Morin ★★★★★
()
Вы не можете добавлять комментарии в эту тему: только для зарегистрированных, score>=50.