Skip to main content

Cyber AI România

Joi, 22 octombrie 2026

XFS Reflink și Copy-on-Write: cum măsori extents, sharing și fragmentarea cu xfs_io

XFS este un sistem de fișiere matur, folosit frecvent pe servere Linux pentru volume mari, loguri, backupuri locale și workloaduri cu multe fișiere. Una dintre funcțiile importante ale XFS modern este reflink: posibilitatea ca două fișiere să partajeze aceleași blocuri fizice până când unul dintre ele este modificat. Mecanismul se bazează pe Copy-on-Write (CoW): la scriere, kernelul alocă blocuri noi pentru zona modificată, astfel încât celălalt fișier să rămână neschimbat.

De ce contează asta pentru un administrator? Pentru că reflink poate economisi spațiu și poate accelera clonele locale, dar poate schimba felul în care interpretezi ocuparea discului, fragmentarea și performanța. Un fișier clonat cu reflink poate părea la fel de mare ca originalul, dar să nu consume imediat aceeași cantitate de spațiu fizic. După multe modificări mici, același fișier poate ajunge să aibă mai multe extents și un comportament mai fragmentat.

Primul pas este să confirmi că lucrezi pe XFS și că testul nu atinge date importante. Folosește un director temporar pe un volum XFS, nu /home sau un director de producție. Exemplu defensiv:

mkdir /mnt/test-xfs/reflink-lab

cd /mnt/test-xfs/reflink-lab

xfs_io -f -c “pwrite 0 1G” original.img

sync

Comanda xfs_io este utilitarul potrivit pentru astfel de verificări deoarece poate crea scrieri controlate și poate interoga harta extents prin comenzile bmap și fiemap. Pentru o clonă CoW:

xfs_io -f -c “reflink original.img” clone.img

Apoi compară hărțile:

xfs_io -c “fiemap -v” original.img

xfs_io -c “fiemap -v” clone.img

xfs_io -c “bmap -v” original.img

xfs_io -c “bmap -v” clone.img

fiemap folosește interfața kernelului pentru a raporta extents, offseturi logice, poziții fizice și flaguri. În context reflink, flagul de interes este FIEMAP_EXTENT_SHARED, care indică faptul că acel spațiu este partajat cu alt fișier. bmap este specific ecosistemului XFS și afișează maparea blocurilor, inclusiv extents și găuri. Manualul xfs_bmap precizează că offseturile și blocurile sunt afișate în unități de 512 bytes, indiferent de dimensiunea blocului filesystemului; de aceea nu amesteca rezultatele fără conversie.

Ca să măsori efectul Copy-on-Write, modifică intenționat o zonă mică din clonă:

xfs_io -c “pwrite 128M 4M” clone.img

sync

xfs_io -c “fiemap -v” clone.img

xfs_io -c “fiemap -v” original.img

Rezultatul așteptat nu este „un număr magic”, ci o diferență de structură: zona modificată din clone.img nu ar trebui să mai fie partajată cu original.img. În funcție de kernel, versiunea xfsprogs, alinierea scrierii și spațiul liber, vei vedea extents noi sau flaguri diferite. Dacă faci multe scrieri mici, repetate, numărul de extents poate crește. Aceasta este o metodă simplă de a observa fragmentarea logică a fișierului, nu un benchmark complet de performanță.

Pentru o măsurare mai ordonată, salvează ieșirile înainte și după:

xfs_io -c “fiemap -v” clone.img > clone-before.txt

xfs_io -c “pwrite 128M 4M” clone.img

sync

xfs_io -c “fiemap -v” clone.img > clone-after.txt

diff -u clone-before.txt clone-after.txt

Poți număra liniile de extent din ieșire, dar fă-o cu atenție: unele versiuni afișează antete sau găuri. Mai important decât numărul brut este modelul: câte regiuni sunt partajate, câte au fost rupte prin CoW și cât de dispersate sunt extents pe disc.

Există și limite. xfs_io îți arată maparea fișierului, nu îți explică singur cauza fiecărei decizii de alocare. Cache-ul, delayed allocation, spațiul liber, montarea volumului și concurența altor procese pot influența rezultatul. Pentru investigații serioase, combină xfs_io cu xfs_info, xfs_bmap, statistici de I/O și teste repetabile. Nu rula comenzi de modificare pe fișiere de producție doar ca să „vezi ce se întâmplă”. Creează un laborator controlat, notează versiunea kernelului și a xfsprogs și păstrează ieșirile brute.

Concluzia practică: reflink și Copy-on-Write sunt excelente pentru clone rapide, snapshoturi locale și economisire de spațiu, dar trebuie măsurate, nu presupuse. Cu xfs_io, fiemap și bmap poți vedea dacă blocurile sunt încă partajate, unde s-a produs CoW și dacă un fișier începe să se fragmenteze după modificări repetate. Pentru administratori Linux avansați, această verificare este o metodă sigură de diagnostic înainte de optimizări sau decizii de arhitectură.

Surse

Facebook
X
WhatsApp
XFS Reflink și Copy-on-Write: cum măsori extents, sharing și fragmentarea cu xfs_io

Te-ar putea interesa si: