KDE, USB 드라이브로 파일 복사 시 부정확한 알림에 대한 15년 된 버그를 수정하다
KDE
이 버그 리포트는 2011년에 제기되었으며, KDE 데스크톱에서 제거 가능한 USB 플래시 드라이브로 파일을 복사할 때 부정확한 알림과 관련되어 있습니다. 완료 진행률 및 완료 알림은 데이터가 실제로 제거 가능한 저장 장치에 기록되는 것이 아니라 로컬 캐시에만 복사하는 것을 반영합니다. 따라서 KDE 데스크톱은 파일이나 여러 파일이 이미 USB 플래시 드라이브로 복사되었다고 암시하지만, 실제로는 아직 쓰여지지 않았을 수 있습니다.
KDE 개발자 Méven Car는 오늘 이 15년 된 버그 리포트에 관한 흥미로운 KDE 블로그 게시물을 작성했습니다. 이 보고서는 77개 이상의 댓글과 17개 이상의 중복된 버그 리포트를 기록했습니다. 현재의 KDE Plasma 안정화 버전에서도, 제거 가능한 저장 장치로 복사 완료를 성공적으로 마쳤을 때 파일 완료 여부를 정확하게 보고하는 알림은 여전히 부정확합니다.
USB 스토리지에 파일 복사가 완료되었는지 정확하게 전달하는 적절한 솔루션을 마련하는 과정은 KDE에게 매우 길고 사소하지 않은(non-trivial) 작업이었습니다:
"적절한 도구는 아주 초기에 등장했습니다. 보고서가 올라온 지 이틀 후, Christoph Feck는 '어떤 동기화 유형 호출(sync type calls)이 유발할 수 있는 대규모 속도 저하를 일으키지 않으면서 데이터가 실제로 디스크에 있는지 알 수 있는 방법'이 있는지 물었습니다. 2주 후, 보고자는 Alan Stern의 답변인 sync_file_range()를 전달했고, Christoph는 그것이 '정확히 우리가 필요로 하는 것'처럼 보였다고 답했습니다. 이것은 2011년 9월이었으며, 현재 KIO가 사용하고 있는 호출입니다."
그 후 몇 년 동안은 사용자들의 확인과 17개의 중복 보고 외에는 별다른 일이 없었습니다. 2021년, Nate Graham이 이 문제를 최고 우선순위로 제기했는데, 이는 이동(move) 작업 시 원본 파일이 삭제되지만 복사본은 여전히 메모리에 남아있었기 때문입니다. 2022년에는 그가 Disks & Devices 앱릿을 수정하여 장치를 제거할 때 아직 쓰기가 진행 중임을 설명하도록 했습니다. 2024년에는 Christoph가 Linux 6.5의 cachestat() 호출을 테스트했는데, 이는 파일 중 메모리에서 여전히 더티(dirty)한 부분이 얼마나 되는지 보고하지만, 한 번에 하나의 파일에 대해서만 가능했습니다.
이 버그는 저에게 '화이트 웨일(white whale)'과 같았습니다. 저는 2018년부터 KIO에 기여해 왔으며, 여전히 그 아래에서 Linux 스토리지 스택이 어떻게 작동하는지 배우고 있습니다. 저는 2024년에 두 번 시도했지만 sync_file_range()를 제대로 구현하지 못했습니다. MR 1718에서는 sync_file_range() 경로가 주석 처리된 상태로 남아 있었습니다. KIO MR 1764와 Dolphin MR 862에서는 작업자(worker)가 방금 작성한 청크의 쓰기 백(writeback)을 기다렸는데, 이는 시작조차 하지 않았던 것이었기에 아예 기다리지 못했습니다. 막 작성된 창 이전의 창을 기다리는 것이 작동하게 만드는 핵심이었습니다. 안타깝게도 저나 어떤 리뷰어도 이 문제를 발견하지 못했습니다.
그 이후에 다른 기여자 한 명이 복사본에 대한 캐시를 끄는 방안을 MR 2162에서 제안했으나, 이는 폐쇄되었습니다.
KDE Frameworks 6.32에서는 sync_file_range() 호출을 활용하여 데이터가 USB 스토리지로 복사될 때의 시점을 완료 대화 상자(completion dialog)에 정확하게 반영할 것입니다.
이 15년 된 버그 보고서를 수정하기 위한 긴 여정에 대해 궁금한 분들은 KDE.org 블로그에서 모든 기술적 세부 사항을 확인할 수 있습니다.