Soluții

Diagnosticarea și rezolvarea erorii „Bus error (core dumped)” în Linux

1. Introducere și definirea erorii

Eroarea Bus error (core dumped) este generată în sistemele de operare de tip Unix/Linux atunci când procesorul (CPU) încearcă să acceseze o adresă de memorie RAM la care hardware-ul nu poate efectua o citire sau o scriere fizică.

Din punct de vedere al sistemului de operare, această eroare corespunde semnalului SIGBUS (Semnalul cu numărul 7). Când kernelul Linux trimite acest semnal unui proces, aplicația este oprită forțat, iar sistemul creează un fișier numit core dump (o imagine a stării memoriei din momentul prăbușirii) pentru analiză ulterioară.

2. Cauzele principale ale erorii SIGBUS

Spre deosebire de Segmentation Fault (SIGSEGV) — care apare când un program încearcă să acceseze memorie nealocată sau nepermisă din punct de vedere software —, Bus Error (SIGBUS) indică aproape întotdeauna o problemă de aliniere fizică, de acces la hardware sau de stocare/fișiere mapate.

Cele mai frecvente cauze sunt:

  1. Probleme de aliniere a memoriei (Memory Alignment Error):

    • Apare pe arhitecturi CPU mai stricte (cum ar fi ARM, SPARC) sau pe arhitecturi x86 în cazul instrucțiunilor vectoriale (AVX/SSE).

    • Se întâmplă când procesorul încearcă să citească un tip de date (de exemplu, un întreg pe 4 sau 8 octeți) de la o adresă de memorie care nu este divizibilă cu dimensiunea acelui tip de date.

  2. Eroare la fișierele mapate în memorie (mmap):

    • Dacă o aplicație folosește funcția mmap() pentru a încărca un fișier direct în memorie, iar fișierul de pe disc este trunchiat, șters sau devine inaccesibil în timp ce procesul încearcă să îl citească/scrie.

  3. Erori de citire/scriere fizică I/O (Disk / Hardware Failure):

    • Sector defect pe hard disk/SSD pe care se află fișierul de swap sau aplicația executată.

    • Probleme legate de rețea dacă se folosește un sistem de fișiere de rețea (NFS, SMB) care își pierde conexiunea la fișierul mapat.

  4. Instrucțiuni hardware defectuoase (Defecțiuni RAM):

    • Module de memorie RAM fizic defecte sau setări incorecte în BIOS (XMP/overclock instabil).

3. Ghid pas cu pas pentru rezolvare și diagnosticare

Pasul 1: Identificarea rapidă a fișierelor mapate și spațiului pe disc

Dacă eroarea apare la rularea unui program standard sau a unui utilitar de sistem (ex: python, node, un utilitar din rețea):

  • Verifică spațiul pe disc: Rulează df -h. Dacă disk-ul este plin ($100\%$), scrierile pe fișiere mmap pot eșua cu SIGBUS.

  • Verifică mount-urile de rețea: Dacă rulezi un script peste NFS sau un drive de rețea, asigură-te că conexiunea este stabilă.

Pasul 2: Analiza fișierului Core Dump cu gdb

Pentru a găsi linia exactă de cod din cauza căreia s-a prăbușit aplicația:

  1. Activați crearea fișierelor core dump în terminal:

    Bash

    ulimit -c unlimited
    
  2. Rulați din nou aplicația pentru a genera fișierul core.

  3. Deschideți fișierul core cu debugger-ul GNU (gdb):

    Bash

    gdb ./nume_executabil core
    
  4. În consola gdb, tastați comanda bt (backtrace) pentru a vedea funcția și linia exactă unde s-a emis semnalul SIGBUS.

Pasul 3: Rularea sub valgrind (pentru dezvoltatori)

Dacă analizați propriul cod (C/C++), valgrind poate detecta accesul nealiniat sau pointerii invalizi:

Bash

valgrind --tool=memcheck ./nume_executabil

Pasul 4: Testarea memoriei RAM (Hardware)

Dacă eroarea apare aleatoriu în diverse programe care funcționau normal în trecut, cauza poate fi hardware:

  • Verificați logurile kernelului cu comanda:

    Bash

    dmesg -T | grep -iE "memory|error|ecc|mce"
    
  • Rulați un test dedicat de memorie: MemTest86 sau utilitarul memtester direct din Linux.

4. Cum se previne Bus Error în Codul Sursă (C / C++)

Dacă sunteți dezvoltator software, iată cele mai bune practici pentru a evita SIGBUS:

  • Respectați alinierea structurilor: Nu folosiți casting direct de la un pointer de tip char* (1 byte) la un pointer de tip uint64_t* (8 bytes) fără să verificați alinierea adresei.

  • Folosiți directiva alignas (C++11/C11):

    C++

    alignas(8) char buffer[64]; // Garantează alinierea la 8 octeți
    
  • Tratarea corectă a apelului mmap: Când lucrați cu mmap, verificați întotdeauna dimensiunea fișierului folosind fstat() înainte de acces și capturați semnalul SIGBUS folosind sigaction().

[mai mult...]

3 Ubuntu versions different than the original

Ubuntu might be considered the face of Linux, but that doesn’t mean it’s the best distro. In fact, some of Ubuntu’s own spin-off flavors offer tools and features that can make them better suited for certain users and use cases. Here are three such Ubuntu flavors that can actually outperform the original.

Ubuntu flavors are officially supported Ubuntu-based distributions that take the Ubuntu core, but replace the desktop environment or add some extra spice. Most of these flavors are fun, some are “meh,” but a few are genuinely useful—sometimes even more so than Ubuntu itself.

[mai mult...]

How to use claude to build automations in Excel

AI promises to make tedious work easier, but I wanted to know whether it could deliver in real Excel projects. Rather than asking Claude for formulas or snippets of code, I tested whether it could handle three types of automation: creating a workbook from scratch, building a reusable reporting system, and developing a tool that analyzes existing spreadsheets. The goal was to see how much of the work Claude could handle and where I would still need to step in.

[mai mult...]

Cum se instaleaza GIMP pe Rocky Linux 10, 9 si 8?

Rocky 10 este cazul dificil pentru GIMP: repository-urile implicite nu mai furnizeaza pachetul principal gimp, in timp ce Rocky 9 si 8 includ in continuare versiuni mai vechi din repository. Instalarea GIMP pe Rocky Linux 10, 9 si 8 tine mai putin de rularea unei comenzi de pachete si mai mult de alegerea sursei care corespunde versiunii voastre si cat de actuala trebuie sa fie aplicatia.

Compararea metodelor de instalare GIMP pe Rocky Linux

Cea mai buna metoda GIMP depinde de prioritatea voastra: pachete gestionate de Rocky, cea mai noua versiune upstream de desktop, sau un fisier portabil care ramane in afara DNF si Flatpak. Folositi o singura metoda odata cu exceptia cazului in care comparati intentionat sursele de pachete, deoarece fiecare metoda are o cale separata de actualizare si eliminare.

Metoda Versiuni Rocky Sursa Versiune verificata Utilizare optima
Flatpak si Flathub Rocky 10, 9 si 8 Aplicatie verificata Flathub, org.gimp.GIMP GIMP 3.2.4 Ramura GIMP curenta cu actualizari runtime gestionate prin Flatpak
AppImage oficial Rocky 10, 9 si 8 Download-uri oficiale GIMP cu verificare SHA256SUMS GIMP 3.2.4 Instalare portabila cand nu doriti un remote Flatpak sau pachet DNF
DNF AppStream Doar Rocky 9 si 8 Rocky AppStream Rocky 9: GIMP 3.0.4 / Rocky 8: GIMP 2.8.22 Pachet de sistem gestionat DNF cand ramura repository este acceptabila

Pregatirea Rocky Linux inainte de instalarea GIMP

Reimprospatati pachetele instalate inainte de a adauga GIMP:

sudo dnf upgrade --refresh
[mai mult...]