Defragger is een open-source grafische utility voor Linux die is ontworpen om bestandsfragmentatie te visualiseren en op te lossen. In tegenstelling tot veel andere tools is het geen wrapper rond bestaande command-line tools, maar maakt het direct gebruik van kernel-interfaces zoals EXT4IOCMOVE_EXT voor ext4.
Belangrijkste kenmerken:
- Visualisatie: Een adaptieve blokkaart die inzicht geeft in de allocatie van bestanden, metadata en vrije ruimte.
- Ondersteuning: Biedt online defragmentatie voor ext4 en offline defragmentatie en compactie voor FAT16/FAT32.
- Beveiliging: De applicatie is ontworpen met een strikte scheiding van privileges; de GUI en CLI draaien onbevoorrecht, terwijl bevoorrechte taken worden uitgevoerd door een via PolicyKit geautoriseerde helper.
- Technologie: De software is ontwikkeld in Rust, maakt gebruik van Qt 6 en KDE Kirigami, en is primair gericht op KDE Plasma.
De software bevindt zich momenteel in de alpha-fase en is dual-licensed onder de MIT- en Apache 2.0-licenties.
Defragger
Inleiding
Na de overstap naar Linux, meer dan 20 jaar geleden, ontdekte ik dat de Windows-utility die ik het meest miste de grafische schijfdefragmenteerder was.
Dit is niet omdat moderne Linux-bestandsystemen een wekelijks defragmentatie-ritueel nodig hebben. De oude blokkaart was een van die toevallige interfaces die de machine leesbaar maakten: je kon daadwerkelijk zien hoe het bestandsysteem zichzelf herorganiseerde.
Onlangs had ik echter een reproduceerbare opslaglay-out nodig tijdens het testen van een logger met een hoge doorvoersnelheid. Fragmentatie en extent-allocatie zorgden voor meetbare variantie, zelfs op NVMe, waardoor dit nostalgieproject een echt bestandsysteem-instrument werd.
Defragger laat zien hoe bestanden, vrije ruimte en metadata van het bestandsysteem zijn toegewezen, vindt gefragmenteerde bestanden en kan ondersteunde bestandsystemen reorganiseren zonder gebruik te maken van externe commando's zoals e4defrag of filefrag.
Waarschuwing
Dit is alpha-software voor bestandsystemen. Maak back-ups van belangrijke gegevens. Het ext4-pad is het meest getest. De schrijfondersteuning voor FAT is recenter en moet eerst worden gebruikt met volumes die vervangbaar zijn of volledig zijn geback-upt.
Veilig uitproberen
Voer het volgende commando uit: just demo
Dit decomprimeert de opzettelijk gefragmenteerde ext4-fixture van de repository, koppelt de kopie als een tijdelijk loop-device en opent Defragger. Selecteer het loop-device dat in de terminal wordt weergegeven. Bij het sluiten van Defragger wordt het tijdelijke image ontkoppeld en verwijderd; de demo schrijft niet naar uw echte volumes.
De demo vereist just, zstd, ondersteuning voor loop-devices en sudo voor het koppelen van het tijdelijke image. De applicatie zelf blijft onbevoorrecht.
Hoe het werkt
Defragger is geen wrapper rond bestaande command-line tools.
- Voor ext4: Het verkrijgt bestandsysteem-allocatiekaarten via
FSIOCGETFSMAP, brengt individuele bestanden in kaart via FSIOCFIEMAP en verplaatst extents met behulp van de EXT4IOCMOVE_EXT-interface van de kernel.
- Beveiliging: De grafische applicatie en de CLI draaien nooit als root. Bevoorrechte bewerkingen worden uitgevoerd door een beperkte, via PolicyKit geautoriseerde helper via D-Bus. De helper accepteert gevalideerde, ondoorzichtige operationele ID's in plaats van willekeurige paden of commando's.
- FAT: Klassiek FAT-schrijven is alleen offline mogelijk. Defragger valideert beide FAT-kopieën en bestandsketens, leest gekopieerde gegevens terug voordat de directory-metadata wordt omgeleid, en werkt gespiegelde allocatietabellen conservatief bij.
Raadpleeg de architectuurnotities voor de volledige privilegegrenzen, validatieregels en de volgorde van updates.
Functionaliteiten
- Analyseert fragmentatie en toont een adaptieve blokkaart van het bestandsysteem.
- Defragmenteert ext4-bestanden en offline FAT16/FAT32-volumes.
- Compacteert offline FAT16/FAT32-volumes door gegevens naar het begin van het bestandsysteem te verplaatsen.
- Maakt gebruik van PolicyKit voor bewerkingen die verhoogde toegang vereisen, terwijl de GUI en CLI onbevoorrecht blijven.
- Ondersteunt veilige annulering en rapporteert voortgang en uiteindelijke statistieken.
Ondersteunde omgeving
Defragger draait op Linux met Qt 6 en KDE Kirigami. KDE Plasma is het primaire doelsysteem, maar het project is niet specifiek voor Arch Linux. De bevoorrechte modus vereist systemd, PolicyKit en een actieve grafische PolicyKit-agent.
Ondersteuning per bestandsysteem
| Bestandsysteem | Analyse | Defragmentatie | Compactie |
| ext4 | Online | Online | — |
| FAT16/FAT32 | Online | Offline | Offline |
| FAT12 | Online | — | — |
| exFAT | Online | — | — |
De build vereist Rust 1.85 of nieuwer, CMake 3.24 of nieuwer, Qt 6 Base en Declarative, Kirigami, een Qt Quick Controls desktopstijl, PolicyKit en een C++ toolchain. Pakketnamen variëren per distributie.
Run vanuit broncode
De standaard ontwikkelbuild gebruikt een tijdelijke systemd-helper en vraagt om autorisatie via PolicyKit; deze hoeft niet eerst te worden geïnstalleerd.
cargo run --release
# of
just run
Run zonder de bevoorrechte helper wanneer systemd of PolicyKit niet beschikbaar is:
cargo run --release --no-default-features
De CLI accepteert apparaatpaden, mount-punten, apparaatsymlinks en loop-image-paden:
cargo run --release -p defragger-cli -- list
cargo run --release -p defragger-cli -- analyze /dev/nvme0n1p2
cargo run --release -p defragger-cli -- defrag /dev/nvme0n1p2 --yes
cargo run --release -p defragger-cli -- compact /dev/sdb1 --yes
Systeembrede installatie
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr
cmake --build build
sudo cmake --install build
sudo systemctl daemon-reload
Dit installeert de applicatie, de CLI, de door root beheerde D-Bus-helper, de systemd-service en de PolicyKit-acties. Zie de architectuurnotities voor de privilegegrenzen en implementatiedetails.
Licentie
Copyright 2026 Guillaume Binet. Defragger is dual-licensed onder de MIT-licentie of de Apache-licentie 2.0, naar keuze.
Componenten en assets van derden blijven onder hun respectievelijke licenties vallen. In het bijzonder is het applicatie-icoon afkomstig van het Breeze Icons-project van KDE; zie de toeschrijving en licentiedetails daarvan.
Defragger
Inleiding
Na de overstap naar Linux, meer dan 20 jaar geleden, ontdekte ik dat de Windows-utility die ik het meest miste de grafische schijfdefragmenteerder was.
Dit is niet omdat moderne Linux-bestandsystemen een wekelijks defragmentatie-ritueel nodig hebben. De oude blokkaart was een van die toevallige interfaces die de machine leesbaar maakten: je kon daadwerkelijk zien hoe het bestandsysteem zichzelf herorganiseerde.
Onlangs had ik echter een reproduceerbare opslaglay-out nodig tijdens het testen van een logger met een hoge doorvoersnelheid. Fragmentatie en extent-allocatie zorgden voor meetbare variantie, zelfs op NVMe, waardoor dit nostalgieproject een echt bestandsysteem-instrument werd.
Defragger laat zien hoe bestanden, vrije ruimte en metadata van het bestandsysteem zijn toegewezen, vindt gefragmenteerde bestanden en kan ondersteunde bestandsystemen reorganiseren zonder gebruik te maken van externe commando's zoals e4defrag of filefrag.
Waarschuwing
Dit is alpha-software voor bestandsystemen. Maak back-ups van belangrijke gegevens. Het ext4-pad is het meest getest. De schrijfondersteuning voor FAT is recenter en moet eerst worden gebruikt met volumes die vervangbaar zijn of volledig zijn geback-upt.
Veilig uitproberen
Voer het volgende commando uit: just demo
Dit decomprimeert de opzettelijk gefragmenteerde ext4-fixture van de repository, koppelt de kopie als een tijdelijk loop-device en opent Defragger. Selecteer het loop-device dat in de terminal wordt weergegeven. Bij het sluiten van Defragger wordt het tijdelijke image ontkoppeld en verwijderd; de demo schrijft niet naar uw echte volumes.
De demo vereist just, zstd, ondersteuning voor loop-devices en sudo voor het koppelen van het tijdelijke image. De applicatie zelf blijft onbevoorrecht.
Hoe het werkt
Defragger is geen wrapper rond bestaande command-line tools.
- Voor ext4: Het verkrijgt bestandsysteem-allocatiekaarten via
FSIOCGETFSMAP, brengt individuele bestanden in kaart via FSIOCFIEMAP en verplaatst extents met behulp van de EXT4IOCMOVE_EXT-interface van de kernel.
- Beveiliging: De grafische applicatie en de CLI draaien nooit als root. Bevoorrechte bewerkingen worden uitgevoerd door een beperkte, via PolicyKit geautoriseerde helper via D-Bus. De helper accepteert gevalideerde, ondoorzichtige operationele ID's in plaats van willekeurige paden of commando's.
- FAT: Klassiek FAT-schrijven is alleen offline mogelijk. Defragger valideert beide FAT-kopieën en bestandsketens, leest gekopieerde gegevens terug voordat de directory-metadata wordt omgeleid, en werkt gespiegelde allocatietabellen conservatief bij.
Raadpleeg de architectuurnotities voor de volledige privilegegrenzen, validatieregels en de volgorde van updates.
Functionaliteiten
- Analyseert fragmentatie en toont een adaptieve blokkaart van het bestandsysteem.
- Defragmenteert ext4-bestanden en offline FAT16/FAT32-volumes.
- Compacteert offline FAT16/FAT32-volumes door gegevens naar het begin van het bestandsysteem te verplaatsen.
- Maakt gebruik van PolicyKit voor bewerkingen die verhoogde toegang vereisen, terwijl de GUI en CLI onbevoorrecht blijven.
- Ondersteunt veilige annulering en rapporteert voortgang en uiteindelijke statistieken.
Ondersteunde omgeving
Defragger draait op Linux met Qt 6 en KDE Kirigami. KDE Plasma is het primaire doelsysteem, maar het project is niet specifiek voor Arch Linux. De bevoorrechte modus vereist systemd, PolicyKit en een actieve grafische PolicyKit-agent.
Ondersteuning per bestandsysteem
| Bestandsysteem | Analyse | Defragmentatie | Compactie |
| ext4 | Online | Online | — |
| FAT16/FAT32 | Online | Offline | Offline |
| FAT12 | Online | — | — |
| exFAT | Online | — | — |
De build vereist Rust 1.85 of nieuwer, CMake 3.24 of nieuwer, Qt 6 Base en Declarative, Kirigami, een Qt Quick Controls desktopstijl, PolicyKit en een C++ toolchain. Pakketnamen variëren per distributie.
Run vanuit broncode
De standaard ontwikkelbuild gebruikt een tijdelijke systemd-helper en vraagt om autorisatie via PolicyKit; deze hoeft niet eerst te worden geïnstalleerd.
cargo run --release
# of
just run
Run zonder de bevoorrechte helper wanneer systemd of PolicyKit niet beschikbaar is:
cargo run --release --no-default-features
De CLI accepteert apparaatpaden, mount-punten, apparaatsymlinks en loop-image-paden:
cargo run --release -p defragger-cli -- list
cargo run --release -p defragger-cli -- analyze /dev/nvme0n1p2
cargo run --release -p defragger-cli -- defrag /dev/nvme0n1p2 --yes
cargo run --release -p defragger-cli -- compact /dev/sdb1 --yes
Systeembrede installatie
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr
cmake --build build
sudo cmake --install build
sudo systemctl daemon-reload
Dit installeert de applicatie, de CLI, de door root beheerde D-Bus-helper, de systemd-service en de PolicyKit-acties. Zie de architectuurnotities voor de privilegegrenzen en implementatiedetails.
Licentie
Copyright 2026 Guillaume Binet. Defragger is dual-licensed onder de MIT-licentie of de Apache-licentie 2.0, naar keuze.
Componenten en assets van derden blijven onder hun respectievelijke licenties vallen. In het bijzonder is het applicatie-icoon afkomstig van het Breeze Icons-project van KDE; zie de toeschrijving en licentiedetails daarvan.