- De kernel-schrijfcache en de vm.dirty_*-parameters hebben een doorslaggevende invloed op de waargenomen kopieersnelheid in Linux.
- Door de geheugeninstellingen aan te passen en gebruik te maken van pre-compressie wordt de tijd die nodig is om grote bestanden van trage schijven te kopiëren verkort.
- Het SCP-commando maakt veilige en efficiënte overdrachten mogelijk, met opties zoals -C, -lo en -P om de prestaties en bandbreedte te optimaliseren.
- De keuze tussen SCP en SFTP, en de combinatie van console- en grafische tools, biedt de flexibiliteit om bestanden snel in verschillende omgevingen te verplaatsen.
Als je dagelijks met Linux werkt, heb je waarschijnlijk wel eens de frustratie ervaren van een eindeloos langzame voortgangsbalk tijdens het kopiëren van grote bestanden , of het nu naar een USB-stick, een andere server via het netwerk of tussen interne schijven is. Ondertussen gaat alles op dezelfde hardware razendsnel in Windows met 60-80 MB/s. Het is een frustrerend gevoel en geeft de indruk dat Linux "traag" is in het verplaatsen van data.
De realiteit is veel genuanceerder: het systeem werkt anders, de kernel gebruikt agressieve schrijfcaches, er zijn conservatieve standaardinstellingen en het bestandssysteemtype, de kopieermethode en zelfs de verbindingsversleuteling spelen ook een rol. Door te begrijpen wat er "onder de motorkap" gebeurt, kun je het systeem nauwkeurig afstellen en de prestaties die je op andere systemen ziet, veel beter benaderen.
Waarom lijken bestandskopieën in Linux zo traag?
Een van de meest voorkomende klachten is het enorme snelheidsverschil tussen Linux en Windows bij het kopiëren van grote hoeveelheden data (of zelfs terabytes) naar een externe USB-schijf . Sommige gebruikers melden praktijkvoorbeelden: op Windows haalt dezelfde externe schijf een stabiele snelheid van 60-80 MB/s, terwijl op Linux het kopiëren weliswaar goed begint, maar snel terugvalt naar 2-10 MB/s. Hierdoor duurt het overzetten van meerdere terabytes dagen in plaats van uren.
In andere scenario's, bijvoorbeeld bij het overzetten van een videocollectie van 1-3 GB tussen twee Linux-servers, worden snelheden van ongeveer 20 MB/s behaald met rsync, vergeleken met 100 MB/s met Samba vanaf een Windows-machine als tussenliggende server. Op het eerste gezicht lijkt dit tegenstrijdig: rsync is efficiënt, maakt gebruik van SSH en zou in theorie de snelste optie moeten zijn.
Dit alles wekt de indruk dat er een hardnekkige kernelbug is die het onmogelijk maakt om Linux te gebruiken voor grote back-ups. In werkelijkheid worden deze problemen veroorzaakt door een combinatie van factoren: write caching, parameters van het geheugensubsysteem, USB-eigenschappen, bestandssysteemtype en de gebruikte tools . Door elk onderdeel nauwkeurig af te stemmen, kunnen we de prestaties aanzienlijk verbeteren.
Bovendien is het cruciaal om te begrijpen dat in Linux de snelheid die wordt weergegeven in het kopieerdialoogvenster of de voortgangsbalk niet altijd overeenkomt met wat er daadwerkelijk op de schijf gebeurt. Eerst worden de gegevens naar het RAM-geheugen gekopieerd en vervolgens in bursts naar het apparaat overgebracht , wat pieken, pauzes en dat vervelende gevoel van "het is vastgelopen" kan veroorzaken.

De schrijfcache van de kernel: de ogenschijnlijke echte boosdoener.
Linux maakt veelvuldig gebruik van RAM-geheugen om schijfbewerkingen te bufferen. Wanneer je gegevens naar een trage schijf kopieert, zoals een USB-harde schijf of flashdrive , schrijft het systeem niet direct alles naar het apparaat. Het slaat de gegevens eerst op in de cache (het tijdelijke geheugen) en begint pas op de achtergrond met het schrijven ervan wanneer aan bepaalde voorwaarden is voldaan.
Dit zorgt voor een misleidend effect: het kopiëren start op volle snelheid, de voortgangsbalk loopt razendsnel op, en dan lijkt de grafische interface plotseling minutenlang te bevriezen. In werkelijkheid is de cache vol, en nu is de kernel bezig om dat geheugen met tussenpozen naar het USB-apparaat te legen , terwijl tegelijkertijd geprobeerd wordt de computer bruikbaar te houden voor andere taken.
Als je een schijfmonitor gebruikt (zoals de KDE Plasma-widgets), zie je dit gedrag duidelijk: zeer hoge schrijfpieken gevolgd door "lege" periodes waarin bijna niets wordt geschreven . Deze pauzes tussen de pieken leiden juist tot lange wachttijden en een gevoel van algehele traagheid.
Bovendien houdt dit verband met een ander veelvoorkomend probleem: wanneer je klaar bent met kopiëren en de USB-schijf veilig wilt verwijderen, geeft het systeem aan dat je moet wachten omdat er nog steeds gegevens worden geschreven. Dit is geen foutmelding; het betekent dat een deel van de inhoud zich nog in de cache bevindt en nog niet fysiek naar het apparaat is overgebracht . Als je de USB-schijf op dat moment loskoppelt, loop je het risico dat bestanden beschadigd raken.
Een van de belangrijkste factoren voor het versnellen van gegevensoverdracht is het verminderen van de nutteloze pauzes tussen schrijfbewerkingen en ervoor zorgen dat de kernel de cache leegt voordat deze vol raakt, op een meer continue en voorspelbare manier . Verschillende parameters van het virtuele geheugensubsysteem spelen hierbij een rol.
Pas vm.dirty_* en andere parameters aan voor trage USB-drives.
Bij het kopiëren naar een USB-schijf, vooral als deze is geformatteerd in NTFS of FAT, kan inzicht in bepaalde kernelwaarden en weten hoe schrijfcache op externe schijven in te schakelen een groot verschil maken. Twee zeer belangrijke parameters zijn `vm.dirty_bytes` en `vm.dirty_background_bytes` , die bepalen hoe groot de schrijfcache mag worden voordat het systeem deze naar de schijf begint te schrijven.
Met behulp van commando's zoals:
echo $((120*1024*1024)) > /proc/sys/vm/dirty_bytes
echo $((60*1024*1024)) > /proc/sys/vm/dirty_background_bytes
We vertellen de kernel dat wanneer de data die geschreven moet worden die groottes bereikt (bijvoorbeeld 120 MB en 60 MB), hij niet moet wachten tot het geheugen verzadigd is en eerder moet beginnen met de overdracht . Dit vermindert de pauzes tussen de bursts die in de schijfmonitor te zien zijn en zorgt voor een soepelere overdracht.
Deze aanpassing is vooral merkbaar bij USB-schijven die met NTFS zijn geformatteerd, hoewel het geen wondermiddel is: de fysieke beperkingen van het apparaat blijven van toepassing . Wat het wel bereikt, is het voorkomen van die opstart- en stopcycli op volle snelheid die de gebruikerservaring negatief beïnvloeden en de snelheidsstatistieken vertekenen.
Voor schijven met native Linux-bestandssystemen zoals EXT4 kunt u nog een stap verder gaan en de activeringstijden van het schrijfproces aanpassen, gedefinieerd door `vm.dirty_writeback_centisecs` en `vm.dirty_expire_centisecs` . Standaard zijn deze waarden meestal zo ingesteld dat ze het systeem niet belasten, maar ze kunnen worden aangepast.
Bijvoorbeeld:
sysctl -w vm.dirty_writeback_centisecs=30
sysctl -w vm.dirty_expire_centisecs=500
Dit vermindert de frequentie waarmee de kernel de gewijzigde cache actief naar de schijf wegschrijft, waardoor de kloof tussen schrijfbursts verder wordt verkleind . In de praktijk ziet de I/O-grafiek er voller en minder schokkerig uit en worden grote kopieën sneller voltooid.
Als u wilt dat deze wijzigingen permanent zijn en niet verloren gaan bij het opnieuw opstarten, kunt u het volgende toevoegen aan het bestand: /etc/sysctl.conf vermeldingen zoals:
vm.dirty_bytes=125829120
vm.dirty_background_bytes=62914560
vm.dirty_writeback_centisecs=30
vm.dirty_expire_centisecs=500
Op deze manier start uw systeem altijd met deze agressievere schrijfparameters, wat op machines die vaak gegevens kopiëren naar USB-sticks of trage schijven resulteert in een veel minder frustrerende ervaring.

Impact van kernelverbeteringen op I/O-bewerkingen
De kernelgemeenschap heeft jarenlang gewerkt aan het verfijnen van het I/O-subsysteem, zodat zelfs in extreme scenario's (enorme kopieeracties naar trage schijven, systemen met weinig RAM, enz.) het hele bureaublad niet vastloopt en applicaties zoals de browser niet crashen . Recente kernelversies hebben mechanismen geïntroduceerd die specifiek bedoeld zijn om te voorkomen dat schrijfprocessen te veel geheugen en CPU-kracht verbruiken.
Er is onder andere gewerkt aan het beperken van het aantal geheugenpagina's dat tegelijkertijd in een "vuile" staat kan blijven en aan het prioriteren van de overdracht van dat geheugen naar de schijf. Dit is vooral merkbaar wanneer u kopieert naar een apparaat dat is geformatteerd in FAT32 of NTFS en tegelijkertijd het systeem probleemloos wilt blijven gebruiken.
In eerdere kernels kwam het vaak voor dat de grafische omgeving enkele seconden vastliep bij het verplaatsen van meerdere gigabytes naar een goedkope USB-stick . Met nieuwere versies en een redelijke geheugenconfiguratie is dit effect aanzienlijk verminderd, waardoor het kopiëren minder storend is.
Bovendien zien we in het Linux-ecosysteem constant nieuwe tools en hulpprogramma's verschijnen voor het analyseren van de prestaties van cachegeheugen, CPU en schijfsubsystemen, zoals perf c2c , waarmee gebruikers cachegebruikspatronen op moderne processors kunnen bekijken en knelpunten kunnen opsporen. Hoewel deze tools meer gericht zijn op ontwikkelaars en gevorderde beheerders, dragen ze bij aan een betere ervaring in veeleisende omgevingen.
Al dit werk wordt aangevuld met specifieke optimalisaties voor platforms zoals ARM en met steeds betere ondersteuning voor diverse hardware. Kortom, hoewel er nog ruimte voor verbetering is, is de staat van I/O-prestaties in Linux verre van een simpele "onopgeloste bug ". Het is eerder een balans tussen pure prestaties, stabiliteit en systeemresponsiviteit.
Praktische strategieën om het laden van zeer grote kopieën te versnellen
Naast het aanpassen van kernelparameters zijn er verschillende praktische trucs die elke gebruiker kan toepassen om de overdrachtstijd van grote hoeveelheden data drastisch te verkorten , zowel bij lokale kopieën als via het netwerk.
Een van de meest effectieve methoden, vooral bij duizenden middelgrote of grote bestanden, is om de gegevens eerst op de bron te comprimeren en vervolgens één groot bestand naar de tragere schijf te verplaatsen. Als u bijvoorbeeld een back-up wilt maken van uw mediabibliotheek (Plex, foto's, video's, enz.), kunt u een gecomprimeerd tar-archief maken:
tar -czf backup-plex.tar.gz /ruta/a/tu/mediateca
Nadat het tar.gz-bestand is aangemaakt, kopieert u het naar de USB-schijf of externe server. Een gebruiker die constant problemen ondervond met het kopiëren naar een USB-harde schijf, ontdekte dat deze aanpak (comprimeren, verplaatsen en decomprimeren op de bestemming) een enorme tijdsbesparing opleverde in vergelijking met het gebruik van rsync om mappen één voor één te verplaatsen.
Dit werkt vooral goed als uw bronschijf snel is (bijvoorbeeld een interne NVMe-schijf) en de bottleneck zich bevindt op de doelschijf of het netwerk. Comprimeren op de snelle schijf is meestal veel sneller dan continu schrijven naar de trage schijf, dus het verplaatsen van één groot bestand vermindert de overhead van duizenden bestandsopeningen en -sluitingen en verbetert de effectieve doorvoer aanzienlijk.
Ook bij netwerkoverdrachten tussen Linux-machines kun je veel winst behalen door te experimenteren met "on-the-fly" compressie met tools zoals scp of rsync , door bestanden over te dragen met Snapdrop , of zelfs door het SSH-versleutelingsalgoritme te wijzigen naar een lichter algoritme wanneer de CPU de beperkende factor is en niet het netwerk.
Een netwerk kopiëren met SCP: syntaxis en belangrijke opties
Wanneer je gegevens tussen servers (of tussen je pc en een server) moet verplaatsen, is de scp- opdracht een van de eenvoudigste en meest gebruikte methoden. SCP gebruikt SSH om een versleutelde point-to-point-verbinding tot stand te brengen, waardoor bestanden veilig worden overgedragen zonder dat je extra services zoals FTP hoeft in te stellen.
De basissyntaxis is vrijwel gelijk aan die van het commando. cp Vanuit Unix hoef je alleen de gebruiker en host van de bestemming toe te voegen. Bijvoorbeeld om een lokaal bestand naar een externe server te uploaden:
scp archivo-local.tar usuario@servidor:/ruta/de/destino/
Met dit commando wordt het bestand file-local.tar naar het opgegeven pad op de externe host gekopieerd . U wordt gevraagd om het wachtwoord van de gebruiker (of uw SSH-sleutel als u die hebt geconfigureerd). Om het omgekeerde te doen, namelijk een bestand van de server naar uw computer kopiëren:
scp usuario@servidor:/ruta/remota/archivo.tgz archivo-en-local.tgz
In dit geval wordt het bestand file.tgz van de server gedownload en op uw computer opgeslagen als file-in-local.tgz. Als u complete mappen met al hun inhoud wilt kopiëren, moet u de optie recursief toevoegen:
scp -r carpeta/ usuario@servidor:/ruta/destino/
Deze eenvoudige syntaxis is een van de redenen waarom veel beheerders de voorkeur geven aan SCP boven complexere alternatieven wanneer ze alleen gegevens hoeven te verplaatsen zonder extra complicaties . Bovendien hoeft u, omdat het SSH gebruikt, geen extra services te starten of nieuwe poorten open te stellen voor internet.
Versnel netwerkoverdrachten met SCP (-C, -c, -l, -P…).
Het scp-commando biedt een aantal opties die, mits correct gebruikt, de prestaties en de controle over bandbreedte en verbindingsbeveiliging aanzienlijk kunnen verbeteren. De meest nuttige opties voor het versnellen van overdrachten zijn de volgende.
De keuze -C Het activeert datacompressie tijdens het verzenden. Op relatief trage verbindingen (bijvoorbeeld een externe verbinding van slechts enkele Mbps) kan het comprimeren van data vóór verzending een enorm verschil maken. Er zijn gevallen bekend waarbij een bestand van ongeveer 93 MB zonder compressie een kopieertijd van ongeveer 1661 seconden had, terwijl dit met compressie veel sneller was. -C Het daalde tot ongeveer 162 seconden. ongeveer tien keer sneller.
Compressie is echter alleen nuttig als de data nog niet gecomprimeerd is. ZIP-, RAR-, ISO- en JPEG-afbeeldingen, enzovoort, worden met -C nauwelijks beter en kunnen zelfs iets slechter presteren vanwege het extra CPU-gebruik. Voor grote tekstbestanden, niet-gecomprimeerde databases, logbestanden of binaire bestanden kan het een uitstekend hulpmiddel zijn.
Met de optie -c kunt u het SSH-versleutelingsalgoritme kiezen dat tijdens de overdracht wordt gebruikt. Standaard is dit meestal AES-128, wat een goede balans biedt tussen beveiliging en prestaties. Als u echter om compatibiliteitsredenen een ander algoritme wilt gebruiken, kunt u bijvoorbeeld het volgende specificeren:
scp -c 3des archivo usuario@servidor:/ruta/
Je moet oppassen dat je -c (cipher) niet verwart met -C (compression), want ze doen totaal verschillende dingen. Het veranderen van de cipher leidt zelden tot een dramatische snelheidsverbetering op moderne computers, maar op oudere of zeer CPU-beperkte hardware kan het wel degelijk een verschil maken.
Om overbelasting van het netwerk te voorkomen bij het maken van zeer grote kopieën, kunt u de optie `-l` gebruiken . Deze optie beperkt de bandbreedte die door `scp` wordt gebruikt in kilobits per seconde. Bijvoorbeeld:
scp -l 400 archivo usuario@servidor:/ruta/
Het stelt een theoretisch maximum vast van ongeveer 50 KB/s (onthoud dat 8 bits = 1 byte). Dit is handig wanneer u automatische nachtelijke back-ups uitvoert of andere services hebt die u niet wilt belasten tijdens een grote back-up.
Als de SSH-server luistert op een niet-standaard poort, kunt u dit aangeven met -P (hoofdletter, omdat de kleine letter -p al voor iets anders wordt gebruikt). Bijvoorbeeld, als de service op poort 2249 draait:
scp -P 2249 archivo usuario@servidor:/ruta/
Tot slot zijn er nog andere handige opties, zoals -p om wijzigingstijden en machtigingen te behouden, -v om foutopsporingsinformatie weer te geven (geschatte snelheid, SSH-foutopsporingsberichten, enz.) of -q om de voortgangsmeter en niet-kritieke berichten te verbergen, wat handig is in scripts waar je geen overbodige informatie in de uitvoer wilt.
Beveiligde back-ups via proxy en geavanceerde SSH-configuraties
In veel bedrijven verloopt de toegang tot externe servers via een HTTP-proxy of iets dergelijks. Standaard communiceert scp niet rechtstreeks met de proxy , maar de SSH-client kan worden geconfigureerd om tools zoals Corkscrew te gebruiken om de verbinding te tunnelen.
De gebruikelijke workflow zou zijn om een bestand aan te maken. ~/.ssh/config met de benodigde instructies voor SSH om verbinding te maken met de proxy (bijvoorbeeld in 10.0.96.6:8080) en authenticatie door middel van een bestand ~/.ssh/proxyauth De gebruikersnaam en het wachtwoord worden in platte tekst opgeslagen. Daarna werken scp-aanroepen probleemloos, alsof de proxy niet bestaat, zolang het corkscrew-programma maar is geïnstalleerd.
In omgevingen waar u regelmatig wisselt tussen het bedrijfsnetwerk (met een proxy) en openbare netwerken zonder beperkingen, is het constant aanpassen van de configuratie onhandig. Hier komt de -F optie van scp van pas, waarmee u een alternatief SSH-configuratiebestand kunt gebruiken:
scp -F ~/.ssh/config-empresa archivo usuario@servidor:/ruta/
Op deze manier kunt u verschillende configuratiebestanden gebruiken, afhankelijk van de omgeving, met behoud van dezelfde scp-syntaxis en zonder dat u steeds parameters hoeft te wijzigen.
Kies tussen SCP en SFTP, afhankelijk van uw behoeften.
Zowel SCP als SFTP gebruiken dezelfde basis: het SSH-protocol voor encryptie en authenticatie . Ze gedragen zich echter niet hetzelfde en zijn ook niet ontworpen voor exact hetzelfde doel. Het is belangrijk om dit te begrijpen om voor elke situatie de juiste tool te kiezen.
SCP blinkt uit door zijn eenvoud: de syntaxis is bijna identiek aan cpHet is puur en alleen ontworpen voor bestanden van de ene naar de andere locatie kopiëren En het raakt niet verstrikt in andere details. Het is lichtgewicht en zeer efficiënt voor grote sequentiële overdrachten, met minimale overhead en zonder extra protocollagen.
SFTP is daarentegen een veel completer subsysteem. Het stelt je in staat om mappen te bekijken, de inhoud weer te geven, machtigingen te wijzigen, bestanden te verwijderen, enzovoort , met een ervaring die vergelijkbaar is met FTP, maar met de beveiliging van SSH. Veel grafische tools (zoals "FTP-achtige" clients) gebruiken SFTP om een vertrouwde interface te bieden aan minder technisch onderlegde gebruikers.
De prijs voor die extra functionaliteit is dat SFTP doorgaans meer systeembronnen verbruikt en iets trager kan zijn dan SCP bij grote lineaire overdrachten, vooral bij het werken met veel kleine bestanden. Desondanks is SFTP voor interactief gebruik of wanneer je een "browser op afstand" wilt, meestal de handigere optie.
Over het algemeen geldt: als je grote bestanden veilig en snel wilt overzetten , is SCP meestal de beste optie. Wil je echter de mapstructuur op de externe server beheren, machtigingen wijzigen of geef je de voorkeur aan een FTP-achtige interface, dan is SFTP een betere keuze.
Publiceer een website of verplaats projecten met SCP.
Het gebruik van scp is niet beperkt tot het af en toe kopiëren van een paar bestanden. Veel ontwikkelaars gebruiken het dagelijks om websites te implementeren, applicatieversies te uploaden of projecten te synchroniseren tussen hun lokale machine en een VPS of dedicated server.
Stel je voor dat je statische website klaar is in /home/usuario/mi-web/ en een server die je als root op het IP-adres kunt benaderen. 123.45.67.89Om alle inhoud te uploaden naar de map waar Apache of Nginx de website host (/var/www/html/ (in veel gevallen) zou je het volgende kunnen uitvoeren:
scp -r /home/usuario/mi-web/* [email protected]:/var/www/html/
De vlag -r zorgt ervoor dat alle subdirectories en bestanden worden gekopieerd, waarbij de structuur behouden blijft. Als u authenticatie met een privésleutel gebruikt in plaats van een wachtwoord, kunt u -i toevoegen om het pad naar de sleutel op te geven.
scp -i /ruta/a/tu_clave.pem -r /home/usuario/mi-web/* [email protected]:/var/www/html/
Na de overdracht kunt u eenvoudig via SSH inloggen op de server en controleren of de bestanden op de juiste locatie staan met behulp van een commando zoals:
ssh [email protected]
ls -l /var/www/html/
en controleer of de webserver de juiste leesrechten heeft. Doordat het domein via DNS naar het IP-adres van de VPS verwijst, is uw website binnen enkele seconden live . Deze combinatie van SSH en SCP biedt gedetailleerde controle over de server en maakt het gebruik van inflexibele controlepanelen of FTP-clients overbodig.
Grafische alternatieven in Windows: WinSCP en pscp
Als je met Windows werkt, maar je servers op Linux draaien, ben je ook niet gebonden aan de commandoregel. Tools zoals WinSCP bieden een gebruiksvriendelijke grafische interface voor het overdragen van bestanden via SCP of SFTP, met panelen in de stijl van een bestandsverkenner waarmee je bestanden eenvoudig kunt slepen en neerzetten.
Aan de andere kant bevat de populaire SSH-client PuTTY pscp , een consoleprogramma dat sterk lijkt op scp en dat je kunt gebruiken in scripts of vanuit de Windows-opdrachtprompt. De syntaxis is vergelijkbaar, waardoor het eenvoudig is om je gebruikelijke Linux-commando's naar die omgeving over te zetten.
In beide gevallen is het principe hetzelfde: profiteer van SSH-encryptie om gegevens veilig te verplaatsen , of je nu Linux, macOS of Windows gebruikt, zonder dat je minder veilige services zoals klassieke FTP hoeft in te schakelen.
Door inzicht te krijgen in de werking van de kernel-schrijfcache, enkele parameters van vm.dirty_* aan te passen, de juiste kopieertool te kiezen (scp, rsync, SFTP, pre-compressie) en, indien nodig, grafische oplossingen zoals WinSCP te gebruiken, kunt u de eindeloze en ogenschijnlijk geblokkeerde kopieerprocessen omzetten in een veel soepeler en voorspelbaarder werkproces dat de maximale prestaties van uw hardware en netwerk beter benadert.
Gepassioneerd schrijver over de wereld van bytes en technologie in het algemeen. Ik deel mijn kennis graag door te schrijven, en dat is wat ik in deze blog ga doen: je de meest interessante dingen laten zien over gadgets, software, hardware, technologische trends en meer. Mijn doel is om u te helpen op een eenvoudige en onderhoudende manier door de digitale wereld te navigeren.