Simple high-performance utility for creating and validating checksums-based backups with full multiprocessing support
Support the project by buying and listening to my music 🎵
- 🟦 Bandcamp
- 🟧 SoundCloud
Or message me if you would like to donate 💰
Test conditions:
- Backup entire
/home/$USER
directory excluding.wine
(~171.1 GiB
) + external~10.6 GiB
MicroSD card (audio files) to the empty external F2FS (LUKS) SSD drive ~181.7 GiB
total- Checksum algorithm:
MD5
- Workload profile:
High
- 9 / 12 processes on Intel i7-9750H
- Create empty directories + generate
tree.txt
after backup
Result:
- Total time: ~17 minutes
- Files viewed: 924639, directories viewed: 153021
- Checksums calculated: 924468, errors: 0
- Files and directories copied: 924460, errors: 0
- Files and directories deleted: 0, errors: 0
- Directories created: 124569, errors: 0
Test conditions:
- Change some files and backup again entire
/home/$USER
directory excluding.wine
to the external F2FS (LUKS) SSD drive with existing backup - Checksum algorithm:
MD5
- Workload profile:
High
- 9 / 12 processes on Intel i7-9750H
- Create empty directories + generate
tree.txt
after backup
Result:
- Total time: ~6 min
- Files viewed: 1848965, directories viewed: 305398
- Checksums calculated: 924487, errors: 0
- Files and directories copied: 386, errors: 0
- Files and directories deleted: 24, errors: 0
- Directories created: 20, errors: 0
- Download executable from releases or build it yourself (see 🏗️ Build from source section)
- Add directories or files you want to backup by pressing
+
button in Files / directories to backup section - Select path using
📄+
or📁+
buttons or type it manually inside File / directory path to backup field- The priority of files / directories is from top to bottom. Use
⬆️
/⬇️
buttons to move input files / directories - If you want to exclude a file / directory from the backup, check
Skip
- The
🗑️
button will remove the current path from the input data (it will not be copied to the backup)
- The priority of files / directories is from top to bottom. Use
- Select output (backup) directory by pressing
Browse
button or type path manually near Where to save backup: - Change settings if you need:
-
Follow symlinks
- If set, during tree generation (before calculating checksums) and while copying files symbolic links will be followed (if supported by the system). Without this flag, symlinks will be created inside backup. Default:Unchecked
-
Delete entries from backup according to input data
- If set, those files inside the existing backup that don't exist in the input paths will be deleted. Without this flag, files from the backup will never be deleted. Default:Checked
Delete skipped entries
- If set, files in skipped paths will also be deleted from the existing backup. Without this flag, if files exist even in the skipped paths, they will not be deleted. Default:Unchecked
-
Create empty directories
- If set, all empty folders in the input paths will also be created in the backup. Without this flag, only non-empty directories will be copied. Default:Checked
-
Generate tree.txt file after backup
- If set, upon completion of the backup, atree.txt
file will be created with the following content:doc/ ├── _static/ │ ├── embedded/ │ │ ├── deep_file │ │ └── very/ │ │ └── deep/ │ │ └── folder/ │ │ └── very_deep_file │ └── less_deep_file ├── checksums.md5 ├── some_file └── tree.txt
Default:
Checked
-
Checksum algorithm:
- Select an algorithm for checksum calculating. Default:MD5
-
Workload profile:
- Select the impact of the backup on the system. The higher the value, the more CPU cores will be used. Default:Normal
-
Recalculate current backup checksum
- If set, the checksum of the existing backup will be recalculated each time. Without this value, the existing checksum file will be used for comparing existing data with input data and for finalchecksums.*
file Default:Unchecked
-
- Press
Start
button to start the backup process. Upon completion of the backup, you will get a copy of your data and a file with their checksums (as well as some useful statistics and atree.txt
file, ifGenerate tree.txt file after backup
option was enabled) - If after some time, you need to check whether the data in the backup has become corrupted, specify your backup directory using Where to save backup: and press
Validate
button. The checksums of all files inside the existing backup will be recalculated and compared with the existing file. At the output you will get statistics with the error rate and some other useful information
NOTE: It is recommended to select an output folder (where to save the backup) on the external drive. Select your valuable data as input and periodically use FloppyCat to update your backup!
NOTE: When backup home directory or system files, run FloppyCat as root, because some directories may not be readable by the current user!
- Install Python 3.10 / 3.11 or higher (not tested)
- Download source code
- Create venv
python -m venv venv
/python3 -m venv venv
/python3.10 -m venv venv
- Activate venv
source venv/bin/activate
(for Linux) /venv\Scripts\activate.bat
(for Windows) - Install requirements
pip install -r requirements.txt --upgrade
- Run
pyinstaller FloppyCat.spec
to build executable
NOTE: if you want to enable logging to console (STDOUT), pass
--enable_console_logging
argument while running FloppyCat
- Improve calculation of remaining time
- Add data compression
- Add data encryption
- Add dark theme
- Improve performance of checksum comparison and
tree.txt
generation
- Anyone can contribute! Just create a pull request
- The author of the project is not responsible for any damage caused to your data / CPU 🙃