Discul serverului este plin
Semnele unui disc plin, pașii rapizi pentru a elibera spațiu și cum preveniți problema.
Pe această pagină
Când discul serverului se umple, bazele de date se opresc, site-urile dau erori și nu se mai pot salva fișiere. Comenzile se rulează pe server, prin SSH, ca root (Conectarea la server prin SSH (Windows, macOS, Linux)). Dacă serverul are serviciul „Monitoring 24/7”, evoluția ocupării discului o vedeți și în panoul app.blackbox.md, pe pagina „Monitorizare” (app.blackbox.md/monitoring, meniul lateral → „Infrastructură” → „Monitorizare”).
Disponibil pentru: oricine are acces root prin SSH la un server BLACKBOX. Graficele din „Monitorizare”: serverele cu serviciul „Monitoring 24/7” activ. Upgrade-ul din panou: titularul serverului.
Semnele unui disc plin
| Semn | Unde îl vedeți |
|---|---|
Eroarea No space left on device |
în terminal, la salvarea unui fișier, la apt sau dnf, scp sau rsync, în jurnalele aplicațiilor |
cannot create temp file for here-document când apăsați Tab |
în terminalul SSH |
| Baza de date se oprește, nu mai răspunde sau nu mai pornește | systemctl --failed arată serviciul bazei de date (de exemplu mariadb, mysql sau postgresql); în jurnalul ei apare No space left on device sau Disk full |
| Site-ul răspunde cu eroarea 500 sau 502, autentificarea pe site nu se mai păstrează | în browser și în jurnalele serverului web și ale PHP |
| Coloana „Disc” din tabelul „Serverele dvs.” are bara roșie (de la 90%), iar graficul „Utilizare disc (%)” urcă spre 100% | pagina „Monitorizare”, doar pentru serverele cu serviciul „Monitoring 24/7” (Pagina „Monitorizare”). Se măsoară doar partiția / |
| O alertă despre disc în cardul „Alerte” sau pe email | doar dacă serverul are reguli de monitorizare configurate (Alerte și notificări pe email) |
Pasul 1. Verificați spațiul și inode-urile
df -h
df -idf -h: coloanaUse%la 100% (sau aproape) pentru/ori pentru altă partiție înseamnă că discul este plin. Continuați cu pașii 2–5.df -i: coloanaIUse%la 100% înseamnă că nu se mai pot crea fișiere, chiar dacă mai este spațiu. Treceți la secțiunea „Inode-urile sunt epuizate” de mai jos.
Pasul 2. Eliberați rapid spațiu fără risc
Jurnalul de sistem: prima comandă arată cât ocupă, a doua șterge arhivele lui până rămân cel mult 200 MB.
journalctl --disk-usage
journalctl --vacuum-size=200MCache-ul pachetelor descărcate:
Ubuntu și Debian
apt clean
apt autoremove --purgeA doua comandă șterge kernelurile vechi și pachetele de care nu mai depinde nimic. Citiți lista înainte să confirmați.
AlmaLinux și CentOS Stream
dnf clean allPasul 3. Găsiți ce ocupă spațiul
Listați folderele de pe partiția / în ordinea mărimii (cele mai mari sunt la sfârșit; ultimul rând este totalul partiției), apoi repetați comanda pentru cel mai mare folder, de exemplu /var:
du -xh --max-depth=1 / 2>/dev/null | sort -h
du -xh --max-depth=1 /var 2>/dev/null | sort -hFișierele de peste 500 MB:
find / -xdev -type f -size +500M -exec ls -lh {} + 2>/dev/nullMai comod este programul ncdu (navigați cu săgețile, ieșiți cu q). Instalați-l după pasul 2, când discul are din nou puțin spațiu liber. Pe Ubuntu și Debian:
apt update
apt install -y ncduPe AlmaLinux și CentOS Stream, pachetul vine din depozitul EPEL:
dnf install -y epel-release
dnf install -y ncduApoi porniți-l:
ncdu -x /| Folder | Ce conține de obicei | Ce faceți |
|---|---|---|
/var/log |
jurnalele sistemului și ale aplicațiilor | „Jurnale mari” de mai jos |
/var/lib/docker |
imagini, containere, jurnalele containerelor, volume | „Docker” de mai jos |
/root, /home, /var/www, /var/backups, /tmp |
exporturi de baze de date (.sql, .sql.gz), arhive (.zip, .tar.gz), copii uitate |
„Copii și arhive uitate” de mai jos |
/var/lib/mysql, /var/lib/postgresql, /var/lib/pgsql |
fișierele bazelor de date | nimic de mână; vedeți întrebările frecvente |
/swapfile |
memoria swap | Adăugarea memoriei swap |
Atenție Nu ștergeți de mână fișierele bazelor de date (
/var/lib/mysql,/var/lib/postgresql,/var/lib/pgsql) și nici folderele sistemului (/boot,/etc,/usr,/var/lib/dpkg,/var/lib/rpm). Datele din/var/lib/dockerle curățați doar cu comenziledocker; singura excepție este golirea jurnalelor containerelor, descrisă mai jos. Ce ștergeți fără copie de rezervă nu se mai poate recupera.
Pasul 4. Eliberați spațiul
Jurnale mari
Nu ștergeți cu rm un jurnal în care un program încă scrie: spațiul nu revine până nu reporniți programul. Goliți-l (înlocuiți CALE_FISIER cu calea găsită la pasul 3):
truncate -s 0 CALE_FISIERArhivele comprimate ale jurnalelor rotite, mai vechi de 7 zile:
find /var/log -type f -name "*.gz" -mtime +7 -deleteDocker
Vedeți cât ocupă imaginile, containerele și volumele, apoi ștergeți imaginile pe care nu le folosește niciun container și cache-ul de build. Ultimele două comenzi cer confirmare înainte să șteargă.
docker system df
docker image prune -a
docker builder pruneJurnalele containerelor nu au limită de mărime dacă nu ați setat-o. Afișați cele mai mari 5 jurnale, apoi goliți-l pe cel ales (înlocuiți CALE_FISIER cu calea lui din listă):
du -h /var/lib/docker/containers/*/*-json.log | sort -h | tail -n 5
truncate -s 0 CALE_FISIERApoi limitați-le: Instalarea Docker și Docker Compose, secțiunea „Limitați jurnalele containerelor”.
Risc Nu rulați
docker volume pruneși nu adăugați--volumesladocker system prune. Volumele unui proiect oprit cudocker compose downsunt considerate nefolosite, iar datele lor (de exemplu baza de date) se pierd definitiv.
Copii și arhive uitate
Exporturile de baze de date, arhivele site-urilor și copiile făcute „pentru orice eventualitate” rămân des pe server. Copiați-le pe calculatorul dvs. sau pe alt server (Transferul fișierelor pe server (scp, rsync, SFTP)), verificați copia, apoi ștergeți-le de pe server:
rm CALE_FISIERFișiere șterse, dar încă deschise
Dacă după ștergere df -h arată aceeași ocupare, un program ține fișierele încă deschise. Le listează lsof +L1: coloana COMMAND arată programul, iar SIZE/OFF mărimea. Reporniți serviciul din care face parte programul (înlocuiți NUME_SERVICIU, de exemplu cu nginx):
lsof +L1
systemctl restart NUME_SERVICIUDacă lsof lipsește, instalați-l. Pe Ubuntu și Debian:
apt install -y lsofPe AlmaLinux și CentOS Stream:
dnf install -y lsofPasul 5. Reporniți serviciile și verificați
df -h /
systemctl --faileddf -h / trebuie să arate spațiu liber. systemctl --failed arată serviciile căzute, de exemplu mariadb, mysql, postgresql, nginx sau php8.3-fpm. Reporniți fiecare serviciu din listă (înlocuiți NUME_SERVICIU cu numele lui), apoi deschideți site-ul:
systemctl restart NUME_SERVICIULăsați o rezervă de spațiu: pe pagina „Monitorizare”, bara din coloana „Disc” devine galbenă de la 80%.
Inode-urile sunt epuizate
df -i arată IUse% 100%, deși df -h mai are spațiu: pe disc sunt prea multe fișiere mici. Cauzele obișnuite sunt sesiunile PHP, cache-ul aplicației, coada de email și fișierele temporare. Găsiți folderele cu cele mai multe fișiere (numărul din stânga):
du --inodes -x --max-depth=3 / 2>/dev/null | sort -n | tail -n 20Dacă folderul găsit conține sesiuni sau fișiere temporare, ștergeți-le pe cele vechi, de exemplu pe cele mai vechi de 7 zile (înlocuiți CALE_FOLDER cu calea folderului). Nu folosiți comanda în folderele cu datele site-ului (de exemplu fișierele încărcate de utilizatori) sau ale bazei de date.
find CALE_FOLDER -type f -mtime +7 -deleteSesiunile PHP sunt în
/var/lib/php/sessions(Ubuntu, Debian) sau/var/lib/php/session(AlmaLinux, CentOS Stream).Cache-ul aplicației: folosiți comanda ei de golire a cache-ului, dacă are una.
Coada de email: dacă folosiți Postfix, comanda de mai jos arată pe ultimul rând câte mesaje așteaptă. Mii de mesaje pe care nu le-ați trimis indică un site compromis: Serverul a fost spart sau este atacat: ce faceți.
postqueue -p | tail -n 1
Cum preveniți problema
Rotirea jurnalelor.
logrotaterotește deja jurnalele din/var/logale sistemului și ale pachetelor instalate din depozit. Pentru jurnalele aplicației dvs. din alt folder, creați fișierul/etc/logrotate.d/APLICATIEcu conținutul de mai jos:/var/www/APLICATIE/logs/*.log { weekly rotate 4 compress missingok notifempty copytruncate }Apoi verificați-l (comanda doar simulează rotirea, fără să schimbe ceva):
logrotate -d /etc/logrotate.d/APLICATIELimita jurnalului de sistem. Păstrați jurnalul la cel mult 200 MB:
mkdir -p /etc/systemd/journald.conf.d printf '[Journal]\nSystemMaxUse=200M\n' > /etc/systemd/journald.conf.d/size.conf systemctl restart systemd-journaldDocker. Setați limita jurnalelor containerelor în
/etc/docker/daemon.jsonși verificați periodicdocker system df: Instalarea Docker și Docker Compose.Copiile de rezervă în afara serverului. BLACKBOX nu face copii automate ale serverului, iar butonul „Backup” de pe cardul serverului nu este activ. Trimiteți copiile pe alt server și nu păstrați exporturi vechi pe același disc: Strategia de backup pentru serverul dvs..
Urmărirea discului. Cu serviciul „Monitoring 24/7” vedeți coloana „Disc” și graficul „Utilizare disc (%)” (Servicii suplimentare pentru server). Fără el, verificați periodic
df -h.
Un disc mai mare
Butonul „Upgrade” de pe cardul serverului trece serverul pe un plan mai mare din aceeași familie. Plata se ia din sold, iar serverul repornește o dată: Upgrade server: trecerea la un plan mai mare.
| Familie | Discul la upgrade |
|---|---|
| Basic | crește: 20 → 50 → 100 → 200 → 400 GB |
| Standard | crește: 20 → 40 → 80 → 160 GB |
| High-Frequency | crește: 100 → 200 → 400 GB |
| CPU | rămâne 30 GB |
| High-Frequency Compute | rămâne 50 GB |
- Pe CPU și High-Frequency Compute, upgrade-ul nu adaugă spațiu. Comandați un server nou dintr-o familie cu disc mai mare (Planurile VPS: cum alegeți), mutați datele, apoi ștergeți serverul vechi.
- Eliberați puțin spațiu înainte de upgrade, ca serviciile să pornească normal după repornire și ca sistemul de fișiere să se poată extinde. La final verificați
df -h /; dacă arată tot mărimea veche, scrieți-ne. - Pentru planurile „VPS hosting” și serverele dedicate, scrieți-ne: Cum contactați suportul BLACKBOX.
Întrebări frecvente
Am șters fișiere mari, dar df -h arată la fel. De ce?
Un program ține fișierele încă deschise. Găsiți-l cu lsof +L1 și reporniți serviciul lui (pasul 4).
df -h arată spațiu liber, dar tot apare No space left on device. De ce?
Verificați df -i: inode-urile pot fi epuizate. Uitați-vă și la celelalte rânduri din df -h: poate fi plină altă partiție, de exemplu /boot sau /tmp.
/var/lib/mysql ocupă mult, cu multe fișiere binlog.000…. Le pot șterge?
Nu cu rm. Sunt jurnalele binare MySQL, pe care MySQL 8 le activează implicit și le păstrează 30 de zile. Dacă nu folosiți replicare, ștergeți-le pe cele vechi din MySQL:
mysql -e "PURGE BINARY LOGS BEFORE NOW() - INTERVAL 3 DAY;"Ajută o repornire a serverului? Eliberează doar spațiul ținut de fișierele șterse, încă deschise. Restul rămâne ocupat, iar cu discul plin baza de date poate să nu pornească. Eliberați întâi spațiu, apoi reporniți dacă este nevoie: Repornirea, oprirea și pornirea serverului.
Nu mă pot conecta prin SSH. Ce fac? Panoul nu are consolă web. Urmați Nu mă pot conecta prin SSH; dacă nu reușiți, scrieți-ne cu adresa IP a serverului.
Pot cere asistentului AI să găsească ce ocupă discul? Da, dacă token-ul API al asistentului are permisiunea „Rulează orice comandă ca root pe serverele mele”. Citiți fiecare comandă înainte să o aprobați, mai ales pe cele care șterg: Rularea comenzilor pe server prin AI.
Poate echipa BLACKBOX să curețe discul în locul meu? Serverul îl administrați dvs., iar suportul vă ghidează. Dacă vreți ca echipa să facă lucrarea, cereți o ofertă separată pentru administrare: Servicii profesionale la cerere: administrare, DevOps, migrare.