Safely remove is causing data loss
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
dolphin (Ubuntu) |
Confirmed
|
Undecided
|
Unassigned |
Bug Description
In short
When you do "Safely remove" on a removable device like USB stick in Dolphin file explorer, it does not guarantee you can safely remove it from the port. It does not wait till true copy completion.
Longer story
I was shocked last weekend when I went to my sister with a USB stick to show her some photos of mine. We've been watching them and suddenly at ~40% of the slideshow, a message started showing up saying that the TV can't read the file. The case was for the remaining 60% of the photos. Sadly we stopped. At home I checked that and indeed the rest of the files were corrupted.
I tried to replicate this several times:
1. Start copying files to the USB stick (~3.5GB of photos).
2. Wait until copy notification of 100% done.
3. Click "Safely Remove" on USB stick in KDE's Dolphin File Explorer.
4. Remove USB Stick from the port (BOOM! Data loss).
I couldn't believe that, but this behaviour is consistent. At first I was using a USB stick without a usage LED indicator, so I couldn't say if it is busy on the hardware level. Then I switched to an old Kingston USB stick with LED, and after step 3 (Click "Safely Remove" on USB stick), the usage LED was blinking for a few more minutes!!!
Reason
I've searched the net and this problem seems to be related to how Linux kernel buffers write operations to removable devices. There are suggestions out there mostly to reduce dirty_bytes kernel parameter value, but I think this is not a solution. Giving the user an impression that now he can safely remove the stick while in reality the copy process is in progress is a no-go. KDE apparently is being given a false sign from the kernel that the copy process is completed. But it is finished only from the shell's perspective. At the point of 100% done shell notification, it has just been fully moved to write cache. Then the kernel writes it slowly at real USB stick transfer speed to true completion. That is my understanding.
Temporary solution
The only solution I have found for now that works is the sync command. Before pulling out the USB stick, just call sync in the command line. That flushes all the buffers and waits until truly done. I confirmed that with the usage LED indicator on my Kingston stick. The LED stopped blinking right after the sync command returned.
Solution
That is the task to do. Please fix this issue as this is a very basic, common use case of the file explorer.
ProblemType: Bug
DistroRelease: Ubuntu 20.04
Package: dolphin 4:19.12.3-0ubuntu1
ProcVersionSign
Uname: Linux 5.4.0-53-generic x86_64
NonfreeKernelMo
ApportVersion: 2.20.11-
Architecture: amd64
CasperMD5CheckR
CurrentDesktop: KDE
Date: Wed Nov 18 21:35:32 2020
InstallationDate: Installed on 2020-10-18 (31 days ago)
InstallationMedia: Kubuntu 20.04.1 LTS "Focal Fossa" - Release amd64 (20200731)
SourcePackage: dolphin
UpgradeStatus: No upgrade log present (probably fresh install)
Status changed to 'Confirmed' because the bug affects multiple users.