Saturday, February 28, 2026

Linux file copier with checksum feature | Movero

On Windows I used to use TerraCopy to ensure the files were correctly copied using checksum but I couldn't find something similar on Linux with features that I wanted so I decided to build one.
Movero is a customizable file copier utility that can verify the data integrity using xxHash checksum. It features a graph that displays the speed versus time for an overview of the read/write performance. It is mainly designed for Linux but since it is written in C++ and Qt6 it can be adapted for Windows if desired.
Since the default file copier in Linux cannot be replaced, the solution is to use a service menu to add a "Paste with Movero" in the right-click menu.
Completed transfers are highlighted in supported file managers using D-Bus.

Contents

 

 Features

  • Hybrid Sync Strategy: Balances data integrity and speed by batch-flushing data to disk (64MB default) to minimize I/O wait times.
    • Hardware Verification: Optionally bypasses the Linux Page Cache using posix_fadvise and O_DIRECT to ensure files are read directly from physical storage during checksum verification.
      • Generate fill data: Can generate files with a specific size up to the specified fill size, useful for testing for a fake flash drive.
        • Speed graph: Displays the speed versus time for an overview of the read/write performance. 
        Movero - File copier for Linux
        Copying a file

        Movero - File copier for Linux (paused)
        Copier paused
         
        Movero - File copier for Linux (settings)
        Settings

        Advanced Technical Implementation

        It implements several low-level Linux kernel optimizations:

          • Memory Alignment: Uses std::aligned_alloc with 4096-byte boundaries to support O_DIRECT I/O.
          • Zero-Cache Verification: Implements the fdatasync + POSIX_FADV_DONTNEED sequence to guarantee that verification hashes are calculated from the platter/NAND, not RAM.
          • D-Bus Integration: Communicates with org.freedesktop.FileManager1 to highlight completed transfers in supported file managers. 


          Download

          Source files can be found on:

          GitHub: https://github.com/silo0074/Movero

          Codeberg: https://codeberg.org/silo0074/Movero

          On each site there is a Releases page from where packages such as .deb, .rpm, .pkg can be downloaded and installed.

           

          Installation

          Binary Installation (Recommended)

          Download the latest .deb (Ubuntu/Debian) or .rpm (Fedora/openSUSE) from the Releases page. Note on Installation: Since these packages are not signed by a central authority, your package manager (YaST/DNF) may warn you about a "Signature verification failed." You can safely proceed by choosing "Ignore" or installing via CLI with the --allow-unsigned-rpm (zypper) or --nogpgcheck (dnf) flag.

          Make it executable

          chmod +x ./Movero-1.0.0-x86_64.rpm

          Sha256 Checksums: You can verify the integrity of the downloaded binary using this command

          sha256sum --check ./Movero-1.0.0-x86_64.rpm.sha256

          Via Terminal:

          • openSUSE:
          sudo zypper install --allow-unsigned-rpm ./Movero-1.0.0-x86_64.rpm
          • Fedora:
          sudo dnf install --nogpgcheck ./Movero-1.0.0-x86_64.rpm
          • Ubuntu/Debian:
          sudo apt install ./Movero-1.0.0-x86_64.deb
          • Arch:
          sudo pacman -U ./movero-1.0.0-x86_64.pkg.tar.zst
           

          System Requirements

          If you are running a minimal installation, ensure you have the following:

          • Qt 6.5+ (Widgets and DBus modules)
          • libxxhash
          • Linux Kernel 5.1+ (Required for sync_file_range used in hybrid sync)

          The package manager should install dependencies automatically.


          Configuration & Settings

          The application Settings can be accessed using the start menu.

          General & UI

          • Language & Style: Change the application language and interface theme.
          • Log History: Enable or disable the tracking of transferred files and errors.
          • Sanitize Filenames: Automatically replaces characters unsupported by the destination file system with Unicode equivalents to prevent transfer failures. Linux supports all characters in the filename except '/' but if you have a Windows file system such as NTFS, you should enable this.
          • Select Files: Automatically highlights the copied files in your file manager once the process is complete.

          Copier Performance

          • Force Sync Threshold: Files larger than this value are forced to disk (fdatasync) to ensure physical integrity. High-speed NVMe users can set this lower for maximum safety. When the data is not flushed to disk using fdatasync, the checksum will most likely be compared against the data in RAM which doesn't reflect the integrity of the final data on the disk. When copying a large amount of small files, the speed will decrease if the checksum is enabled and the file size is larger than this threshold.
          • Disk Space Safety Margin: Set a minimum amount of free space (default 50MB) that must remain on the destination drive before the copy starts.
          • Copy Buffer Size: Adjustable memory buffer. While it supports up to 1024MB, 8MB is usually optimal for balancing syscall overhead and CPU cache performance.
          • Dry run mode: can be used to generate a test file with a specific size or generate fill data where the number of files is automatically calculated based on the desired fill size. Can be used to test for a fake flash drive where the declared size is greater than the available flash memory.

          UI

          • History Size: Control how many seconds of history are visible on the graph.
          • Max Speed (MB/s): Set the "floor" for the graph's Y-axis. The graph will dynamically scale upward if your transfer speed exceeds this value.
          • Preview Mode: "Preview file transfer window" allows you to test the UI and graph behavior without actually writing any data to disk.


          Build from Source

          To compile Movero from source, ensure you have Qt6 (Core, Gui, Widgets, DBus, LinguistTools) and libxxhash installed on your system.

          Prerequisites

          OpenSuse/Fedora (for Fedora replace zypper with dnf):

          sudo zypper install CMake gcc-c++ mold lld xxhash-devel \
          qt6-base-devel qt6-tools-devel qt6-widgets-devel qt6-linguist-devel

          Ubuntu:

          sudo apt install cmake g++ mold lld libxxhash-dev \
          qt6-base-dev qt6-base-dev-tools qt6-tools-dev

          Compile

          Linux (Debian/Ubuntu/Fedora)

          # Clone the repository
          git clone https://github.com/silo0074/Movero.git
          cd Movero
          
          # Create a build directory
          mkdir build && cd build
          
          # Configure and build
          cmake ..
          make -j$(nproc)
          
          # Install (Optional)
          sudo make install
           

          Packaging

          You can generate native Linux packages (.deb or .rpm) using CPack:

          # Generate a Debian package
          cpack -G DEB
          
          # Generate an RPM package
          cpack -G RPM

          Built With

          C++ 17 - The core programming language.

          Qt 6 - Used for the graphical user interface, D-Bus integration, and cross-platform system logic.

          xxHash - Extremely fast non-cryptographic hash algorithm used for checksum verification.

          CMake - The build system used for compilation and packaging.  

           

          Donations

          Buy Me A Coffee
           

          License

          This project is licensed under the GPLv3 License.

          No comments:

          Post a Comment