- Кешът за запис на ядрото и параметрите vm.dirty_* имат решаващо влияние върху възприеманата скорост на копиране в Linux.
- Регулирането на настройките на паметта и използването на предварително компресиране намалява времето, необходимо за копиране на големи файлове на бавни дискове.
- Командата SCP позволява безопасни и ефикасни трансфери, с опции като -C, -lo и -P за оптимизиране на производителността и контрола на честотната лента.
- Изборът между SCP и SFTP, както и комбинирането на конзолни и графични инструменти, осигурява гъвкавост за бързо преместване на файлове в различни среди.
Ако използвате Linux ежедневно, вероятно сте изпитвали чувството на неудовлетвореност от това да се взирате в безкрайно бавна лента за напредък, докато копирате големи файлове , независимо дали на USB устройство, друг сървър по мрежата или между вътрешни устройства. Междувременно, на същия хардуер, стартирате Windows и всичко работи със скорост 60-80 MB/s. Това е разочароващо усещане и създава впечатлението, че Linux е „бавен“ при преместването на данни.
Реалността е много по-нюансирана: системата работи различно, ядрото използва агресивни кешове за запис, има консервативни настройки по подразбиране , а типът файлова система, методът на копиране и дори криптирането на връзката също играят роля. Разбирането на това, което се случва „под капака“, ви позволява да настроите системата фино и да се доближите много повече до производителността, която виждате на други системи.
Защо копирането на файлове в Linux изглежда толкова бавно?
Едно от най-често срещаните оплаквания е огромната разлика в скоростта между Linux и Windows при копиране на големи количества данни (или дори терабайти) на външно USB устройство . Някои потребители съобщават за примери от реалния свят: в Windows същото външно устройство постига стабилни 60-80 MB/s, докато в Linux копирането започва бързо, но бързо пада до 2-10 MB/s, което прави прехвърлянето на няколко терабайта въпрос на дни, а не на часове.
В други сценарии, например, при прехвърляне на видео колекция от 1-3 GB между два Linux сървъра, се наблюдават скорости от около 20 MB/s с rsync в сравнение със 100 MB/s, използвайки Samba от машина с Windows като посредник. На пръв поглед това изглежда нелогично: rsync е ефективен, използва SSH и на теория би трябвало да е най-бързият вариант.
Всичко това създава впечатлението, че има постоянен бъг в ядрото, който прави невъзможно използването на Linux за големи архиви. В действителност тези ситуации са причинени от комбинация от фактори: кеширане на запис, параметри на подсистемата на паметта, характеристики на USB, тип файлова система и използваните инструменти . Чрез фина настройка на всеки компонент можем значително да подобрим производителността.
Освен това е изключително важно да се разбере, че в Linux скоростта, показвана в диалоговия прозорец за копиране или лентата за напредък, не винаги отразява какво всъщност се случва на диска. Първо, данните се копират в RAM паметта, след което се прехвърлят към устройството на импулси , което води до пикове, паузи и онова досадно усещане за „замръзнало е“.

Кешът за запис в ядрото: очевидният истински виновник
Linux разчита в голяма степен на RAM паметта за буфериране на дискови операции. Когато копирате данни на бавен диск, като например USB твърд диск или флаш устройство , системата не записва всичко веднага на устройството. Първо го съхранява в кеша (ненужна памет) и, когато са изпълнени определени условия, започва да записва тези данни във фонов режим.
Това създава измамен ефект: копирането започва с пълна скорост, лентата за напредък се покачва много бързо и изведнъж графичният интерфейс сякаш замръзва за минути. В действителност кешът се е запълнил и сега ядрото периодично изпразва тази памет в USB устройството , като едновременно с това се опитва да поддържа компютъра годен за други задачи.
Ако използвате монитор на диска (като например уиджетите на KDE Plasma), ще видите ясно това поведение: много високи пикове на запис, последвани от „празни“ пространства, където почти нищо не е записано . Тези паузи между записите са именно това, което води до дълго време на изчакване и усещане за обща мудност.
Освен това, това е свързано с друг често срещан проблем: когато приключите с копирането и искате да „извадите безопасно“ USB устройството, системата ви казва да изчакате, защото данните все още се записват. Това не е грешка; това означава, че част от съдържанието все още е в кеша и все още не е физически прехвърлено към устройството . Ако прекъснете връзката в този момент, рискувате да повредите файловете.
Един от ключовете за ускоряване на трансферите е намаляването на тези безполезни паузи между записите и карането на ядрото да изпразва кеша, преди да се запълни, по по-непрекъснат и предвидим начин . Тук играят роля няколко параметъра на подсистемата за виртуална памет.
Настройте vm.dirty_* и други параметри за бавни USB устройства
Когато копирате на USB устройство, особено ако е форматирано в NTFS или FAT, разбирането на определени стойности на ядрото и знанието как да активирате кеширането на запис на външни устройства може да окаже съществено влияние. Два много важни параметъра са `vm.dirty_bytes` и `vm.dirty_background_bytes` , които определят колко голям може да нарасне кешът за запис, преди системата да започне да го изчиства на диска.
Използване на команди като:
echo $((120*1024*1024)) > /proc/sys/vm/dirty_bytes
echo $((60*1024*1024)) > /proc/sys/vm/dirty_background_bytes
Казваме на ядрото, че когато данните, чакащи за запис, достигнат тези размери (например 120 MB и 60 MB), то не трябва да чака да насити паметта и трябва да започне да ги прехвърля по-рано . Това намалява паузите между пакетите данни, наблюдавани в монитора на диска, и прави прехвърлянето по-плавно.
Тази корекция е особено забележима на USB устройства, форматирани с NTFS, въпреки че не е панацея: физическите ограничения на устройството все още важат . Това, което постига, е предотвратяване на циклите на стартиране и спиране с пълна скорост, които влошават потребителското изживяване и изкривяват статистиката за скоростта.
За устройства с оригинални файлови системи на Linux, като EXT4, можете да направите още една крачка напред и да коригирате времената за активиране на процеса на запис, дефинирани от `vm.dirty_writeback_centisecs` и `vm.dirty_expire_centisecs` . По подразбиране тези стойности обикновено са предназначени да избегнат въздействие върху системата, но могат да бъдат коригирани.
Например:
sysctl -w vm.dirty_writeback_centisecs=30
sysctl -w vm.dirty_expire_centisecs=500
Това намалява честотата, с която ядрото активно изчиства мръсния кеш на диска, като допълнително намалява времето между записите . На практика, графиката на входно/изходните операции изглежда по-пълна и по-малко накъсана, а големите копия се завършват по-бързо.
Ако искате тези промени да бъдат постоянни и да не се загубят при рестартиране, можете да добавите към файла /etc/sysctl.conf записи като:
vm.dirty_bytes=125829120
vm.dirty_background_bytes=62914560
vm.dirty_writeback_centisecs=30
vm.dirty_expire_centisecs=500
По този начин вашата система винаги ще започва с тези по-агресивни параметри за запис, което на машини, които често копират данни на USB или бавни дискове, се превръща в много по-малко разочароващо преживяване.

Влияние на подобренията в ядрото върху I/O операциите
Общността на ядрото е прекарала години в усъвършенстване на подсистемата за входно/изходни данни, така че дори в екстремни сценарии (масивни копия на бавни дискове, системи с малко RAM и др.), целият работен плот да не замръзва или приложения като браузъра да не се сриват . Последните версии на ядрото въведоха механизми, специално предназначени да предотвратят консумацията на твърде много памет и процесор от процесите на запис.
Освен всичко друго, е извършена работа за ограничаване на броя на страниците в паметта, които могат да останат в „мръсно“ състояние по всяко време, и за приоритизиране на прехвърлянето на тази памет към диска. Това е особено забележимо, когато копирате на устройство, форматирано във FAT32 или NTFS, и същевременно искате да продължите да използвате системата безпроблемно.
В предишни ядра беше обичайно графичната среда да замръзва за няколко секунди при преместване на няколко гигабайта на евтино USB устройство . С по-новите версии и разумната конфигурация на паметта този ефект е значително намален, което прави процеса на копиране по-малко смущаващ.
Освен това, екосистемата на Linux непрекъснато наблюдава появата на инструменти и помощни програми за анализ на производителността на кеш паметта, процесора и дисковите подсистеми, като например perf c2c , който позволява на потребителите да виждат моделите на използване на кеша на съвременни процесори и да откриват пречки. Въпреки че тези инструменти са насочени повече към разработчици и напреднали администратори, те помагат за по-нататъшно подобряване на работата във високопроизводителни среди.
Цялата тази работа се допълва от специфични оптимизации за платформи като ARM и от все по-добра поддръжка за разнообразен хардуер. Накратко, въпреки че все още има място за подобрение, състоянието на I/O производителността в Linux далеч не е просто „непоправен бъг “. По-скоро това е баланс между чиста производителност, стабилност и системна реакция.
Практически стратегии за ускоряване на много големи копия
Освен настройването на параметрите на ядрото, има няколко практични трика, които всеки потребител може да приложи, за да намали драстично времето за прехвърляне на големи количества данни , както в локални копия, така и по мрежата.
Един от най-ефективните методи, особено когато се работи с хиляди средни или големи файлове, е първо да компресирате данните при източника и след това да преместите един голям файл на по-бавния диск. Например, ако искате да архивирате медийната си библиотека (Plex, снимки, видеоклипове и др.), можете да създадете компресиран tar архив:
tar -czf backup-plex.tar.gz /ruta/a/tu/mediateca
След като е създаден, копирайте tar.gz файла на USB устройство или отдалечен сървър. Един потребител, който е изпитвал постоянно бавно копиране на USB твърд диск, е открил, че този подход (компресиране, преместване и декомпресиране в местоназначението) води до значително спестяване на време в сравнение с използването на rsync за преместване на директории една по една.
Това работи особено добре, ако изходният ви диск е бърз (например вътрешен NVMe диск) и пречката е на целевия диск или в мрежата. Компресирането на бързия диск обикновено е много по-бързо от непрекъснатото записване на бавния, така че преместването на един голям файл намалява натоварването от хиляди отваряния и затваряния на файлове и значително подобрява ефективната пропускателна способност.
В сферата на мрежовите трансфери между Linux машини, можете да спечелите много, като експериментирате с компресия „в движение“ с инструменти като scp или rsync , изберете да прехвърляте файлове със Snapdrop или дори промените алгоритъма за SSH криптиране на по-лек, когато процесорът е ограничаващият фактор, а не мрежата.
Копиране през мрежа с SCP: синтаксис и ключови опции
Когато трябва да преместите данни между сървъри (или между вашия компютър и сървър), командата scp е един от най-простите и най-често срещаните методи. SCP разчита на SSH, за да установи криптирана връзка от точка до точка, така че файловете пътуват сигурно, без да е необходимо да се настройват допълнителни услуги като FTP.
Основният синтаксис е много подобен на командата cp От Unix просто добавяте целевия потребител и хост. Например, за да качите локален файл на отдалечен сървър:
scp archivo-local.tar usuario@servidor:/ruta/de/destino/
Тази команда ще копира file-local.tar до посочения път на отдалечения хост , като ще ви подкани да въведете паролата на потребителя (или да използвате вашия SSH ключ, ако имате конфигуриран такъв). За да направите обратното, за да копирате файл от сървъра на вашата машина:
scp usuario@servidor:/ruta/remota/archivo.tgz archivo-en-local.tgz
В този случай файлът file.tgz ще бъде изтеглен от сървъра и запазен като file-in-local.tgz на вашата машина. Ако искате да копирате цели директории с цялото им съдържание, трябва да включите рекурсивната опция:
scp -r carpeta/ usuario@servidor:/ruta/destino/
Този прост синтаксис е една от причините, поради които много администратори предпочитат SCP пред по-сложни алтернативи, когато е необходимо само да преместват данни без допълнителни усложнения . Освен това, тъй като използва SSH, не е необходимо да стартирате допълнителни услуги или да предоставяте нови портове към интернет.
Ускорете мрежовите трансфери с SCP (-C, -c, -l, -P…)
Командата scp предлага редица опции, които, когато се използват правилно, могат значително да подобрят както производителността, така и контрола върху честотната лента и сигурността на връзката. Най-полезните за ускоряване на трансферите са следните.
Опцията -C Активира компресиране на данни в движение. При относително бавни връзки (например отдалечена връзка само от няколко Mbps), компресирането на данните преди изпращането им може да доведе до разлика от порядък. Има измерени случаи с файл от около 93 MB, където времето за копиране без компресия е било около 1661 секунди, докато с -C спадна до около 162 секунди, около десет пъти по-бързо.
Компресията обаче помага само ако данните не са вече компресирани. ZIP, RAR, ISO, JPEG изображения и др. едва се подобряват с -C и дори могат леко да се влошат поради допълнителното използване на процесора. За големи текстови файлове, некомпресирани бази данни, лог файлове или двоични файлове, това може да бъде отличен инструмент.
Опцията -c ви позволява да изберете алгоритъма за SSH криптиране, който да се използва по време на прехвърлянето. По подразбиране обикновено това е AES-128, който предлага добър баланс между сигурност и производителност. Ако обаче от съображения за съвместимост искате да използвате нещо различно, можете да посочите например:
scp -c 3des archivo usuario@servidor:/ruta/
Трябва да внимавате да не бъркате -c (шифър) с -C (компресия), тъй като те правят напълно различни неща. Промяната на шифъра рядко ускорява драстично нещата на съвременни машини, но на по-стар или много процесорно ограничен хардуер може да окаже влияние.
За да избегнете претоварване на мрежата при създаване на много големи копия, имате опцията `-l` , която ограничава честотната лента, използвана от `scp` в килобита в секунда. Например:
scp -l 400 archivo usuario@servidor:/ruta/
Това установява теоретичен максимум от около 50 KB/s (не забравяйте, че 8 бита = 1 байт). Това е полезно, когато автоматизирате нощни архивирания или имате други услуги, за които не искате да изчерпват честотната лента, докато изпълнявате голям архив.
Когато SSH сървърът слуша на нестандартен порт, можете да укажете това с -P (с главни букви, защото малкият -p вече се използва за нещо друго). Например, ако услугата е на порт 2249:
scp -P 2249 archivo usuario@servidor:/ruta/
Накрая, има и други полезни опции, като например -p за запазване на времената за модификация и разрешенията, -v за преглед на информация за отстраняване на грешки (приблизителна скорост, SSH съобщения за отстраняване на грешки и др.) или -q за скриване на индикатора за напредък и некритични съобщения, което е полезно в скриптове, където не искате шум в изхода.
Сигурни архиви чрез прокси и разширени SSH конфигурации
В много компании достъпът до отдалечени сървъри се осъществява чрез HTTP прокси или подобен сървър. По подразбиране scp не комуникира със самия прокси сървър , но SSH клиентът може да бъде конфигуриран да използва инструменти като Corkscrew за тунелиране на връзката.
Типичният работен процес би бил да се създаде файл ~/.ssh/config с необходимите директиви за SSH, за да се свърже с проксито (например в 10.0.96.6:8080) и удостоверяване чрез преминаване през файл ~/.ssh/proxyauth съдържащ потребителското име и паролата в обикновен текст. След това, scp извикванията работят прозрачно, сякаш проксито не съществува, стига да е инсталиран двоичният файл corkscrew.
В среди, където често превключвате между корпоративната мрежа (с прокси) и неограничените публични мрежи, постоянното редактиране на конфигурацията е неудобно. Тук е полезна опцията -F на scp, която ви позволява да използвате алтернативен SSH конфигурационен файл:
scp -F ~/.ssh/config-empresa archivo usuario@servidor:/ruta/
По този начин можете да имате различни конфигурационни файлове в зависимост от средата, поддържайки един и същ scp синтаксис и без да се налага да променяте параметрите отново и отново.
Изберете между SCP и SFTP в зависимост от вашите нужди
Както SCP, така и SFTP използват една и съща основа: SSH протокола за криптиране и удостоверяване . Те обаче не се държат по един и същи начин, нито са проектирани за абсолютно една и съща цел и е важно да се разбере това, за да се избере правилният инструмент за всяка ситуация.
SCP блести със своята простота: синтаксисът е почти идентичен с cpТой е проектиран чисто и просто за копиране на файлове от едно място на друго И не се задълбочава в никакви други подробности. Той е лек и много ефективен за големи последователни трансфери, с минимални режийни разходи и без допълнителни протоколни слоеве.
SFTP, от друга страна, е много по-пълна подсистема. Тя ви позволява да преглеждате директории, да изброявате съдържание, да променяте разрешения, да изтривате файлове и т.н. , с подобно на FTP преживяване, но със сигурността на SSH. Много графични инструменти (като например „FTP-подобни“ клиенти) разчитат на SFTP, за да осигурят познат интерфейс за по-малко технически опитни потребители.
Цената на тази допълнителна функционалност е, че SFTP е склонен да консумира повече ресурси и може да бъде малко по-бавен от SCP за големи линейни трансфери, особено при работа с много малки файлове. Въпреки това, за интерактивна употреба или когато искате „отдалечен браузър“, SFTP обикновено е по-удобният вариант.
Като общо правило: ако просто трябва да прехвърляте големи файлове сигурно и бързо , SCP обикновено е най-добрият вариант. Ако обаче искате да управлявате структурата на отдалечените директории, да променяте разрешенията или предпочитате интерфейс, подобен на FTP, SFTP е по-подходящ.
Публикувайте уебсайт или премествайте проекти с SCP
Употребата на scp не се ограничава до случайни копия на няколко файла. Много разработчици го използват ежедневно, за да разгръщат уебсайтове, да качват версии на приложения или да синхронизират проекти между локалната си машина и VPS или специален сървър.
Представете си, че имате готов статичен уебсайт /home/usuario/mi-web/ и сървър, до който имате достъп като root на IP адреса 123.45.67.89За да качите цялото съдържание в директорията, където Apache или Nginx обслужва уебсайта (/var/www/html/ (в много случаи) можете да изпълните:
scp -r /home/usuario/mi-web/* [email protected]:/var/www/html/
Флагът -r кара всички поддиректории и файлове да бъдат копирани, запазвайки структурата. Ако използвате удостоверяване с частен ключ вместо парола, можете да добавите -i, за да укажете пътя на ключа.
scp -i /ruta/a/tu_clave.pem -r /home/usuario/mi-web/* [email protected]:/var/www/html/
След прехвърлянето, просто влезте в сървъра чрез SSH и проверете дали файловете са на правилното място, като използвате нещо подобно:
ssh [email protected]
ls -l /var/www/html/
и проверете дали уеб сървърът има разрешения да ги чете. С домейн, сочещ към IP адреса на VPS чрез DNS, вашият сайт ще бъде активен за секунди . Тази комбинация от SSH и SCP осигурява гранулиран контрол над сървъра и елиминира зависимостта от негъвкави контролни панели или FTP клиенти.
Графични алтернативи в Windows: WinSCP и pscp
Ако работите от Windows, но сървърите ви са Linux, не сте обвързани и с командния ред. Инструменти като WinSCP предлагат удобен графичен интерфейс за прехвърляне на файлове чрез SCP или SFTP, с панели в стил файлов мениджър, които улесняват плъзгането и пускането.
От друга страна, популярният SSH клиент PuTTY включва pscp , конзолна помощна програма, много подобна на scp, която можете да използвате в скриптове или от командния ред на Windows. Синтаксисът е подобен, което улеснява прехвърлянето на обичайните ви Linux команди в тази среда.
И в двата случая принципът е един и същ: възползвайте се от SSH криптирането, за да премествате данни сигурно , независимо дали сте на Linux, macOS или Windows, без да е необходимо да активирате по-малко сигурни услуги като класическия FTP.
Взети заедно, разбирането как работи кешът за запис на ядрото, настройването на няколко параметъра на vm.dirty_*, изборът на правилния инструмент за копиране (scp, rsync, SFTP, предварителна компресия) и, когато е необходимо, използването на графични решения като WinSCP, ви позволява да преминете от безкрайни и привидно блокирани копия към много по-плавен и предвидим работен процес, който е по-близо до реалната максимална производителност на вашия хардуер и мрежа.
Страстен писател за света на байтовете и технологиите като цяло. Обичам да споделям знанията си чрез писане и това е, което ще направя в този блог, ще ви покажа всички най-интересни неща за джаджи, софтуер, хардуер, технологични тенденции и много други. Моята цел е да ви помогна да се ориентирате в дигиталния свят по лесен и забавен начин.