Sisteme de fișiere și sincronizare
Scurt rezumat
Un sistem de fișiere este un echilibru de integritate, performanță și operațiuni. Sincronizarea este despre un model de consistență și rezolvarea conflictelor, nu doar "copiați fișiere. "Începem cu cerințele (p95 latență, RPO/RTO, tipul de încărcare), selectați sistemul de fișiere și protocolul, configurați logarea și încuietorile, setați SLO, automatizați instantanee/versioning și utilizați instrumentele corecte de sincronizare.
Alegerea unui sistem de fișiere pentru sarcină
Universal Linux FS
ext4 este un cal de lucru stabil. Opțiuni: 'noatime, nodiratime, renunțați (cu precauție), date = ordonate'. Bun pentru unități VM, directoare partajate, artefacte CI.
XFS - puternic pe fișiere mari/paralelism (conținut media, jurnale, DWH). Opțiuni: „noatime, inode64”; pentru fișiere mari merită configurat 'reflink = 1' (clonă).
ZFS - CoW, verificare integritate, instantanee/replica „trimite/recv”, ARC/L2ARC, ZIL/SLOG pentru sincronizare. Excelent pentru copii de rezervă, NAS, bazine de bază cu cerință de integritate.
Btrfs - CoW, instantanee/compresie/RAID în spațiul utilizator; bun sub dev/test și margine, atent pentru OLTP fără tuning.
Windows/Cross Platform
NTFS - ACL, ADS, de încredere pentru SMB; „Dezactivați ultimul acces” pentru performanță.
exFAT - media detașabilă, fără drepturi și exploatare forestieră (nu pentru producție).
Setări care afectează fiabilitatea și viteza
Logare și bariere: 'date = ordonate' (ext4 în mod implicit) - echilibru; 'data = jurnal' - mai sigur, dar mai lent; Verificați dacă sunt activate barierele de scriere (sau controlerul cu BBU/PLP).
fsync/sync: fire critice (jurnale/tranzacții) trebuie să numească în mod explicit „fsync ()”; în caz contrar, pierderea în caz de accident este posibilă.
atime: 'relatime '/' noatime' reduce presiunea de scriere.
xattr/ACL-Enable dacă sunt necesare ACL-uri POSIX și etichete de securitate.
Dimensiunea blocului/dimensiunea înregistrării: ZFS 'recordsize = 16K' for DB; ' 1M' pentru mass-media mare.
bash ext4 for CI artifacts
UUID=... /var/lib/ci ext4 noatime,nodev,nosuid,data=ordered 0 2
XFS for Media Directories
UUID=... /srv/media xfs noatime,attr2,inode64 0 0
ZFS for backups and snapshots (creation)
zpool create tank mirror nvme0n1 nvme1n1 zfs set compression=lz4 atime=off tank/backups
Sisteme de fișiere de rețea și distribuite
NFS/SMB (abordare NAS)
NFSv3/v4: simplu și rapid; v4 dă încuietori și Kerberos ('sec = krb5p'). Nu vă bazați pe NFS pentru fsync „profund” de înaltă frecvență - un disc local mai bun + descărcare asincronă.
SMB 3. x: multicanal, criptare, integrare AD. Activați semnarea/criptarea datelor sensibile.
/pool/projects 10. 0. 0. 0/16(rw,no_root_squash,sec=krb5p,async)
SMB (fragment):
[reports]
path = /pool/reports read only = no vfs objects = acl_xattr, recycle smb encrypt = required
Distribuit FS
CephFS - POSIX peste Ceph; bun pentru scară orizontală, instantanee, cote, metadate distribuite.
GlusterFS - ușor de început, replica/sharding, dar îngrijit cu fișiere mici și p99.
Lustre/IBM Spectrum Scale - LDC/fișiere mari, care solicită pe rețea/operațiuni.
9P (Virtio-fs) - pentru partajare VM, nu pentru sarcini de producție cu SLO-uri dure.
Recomandare: pentru OLTP/portofele - nu rețea FS; utilizați volume de bloc. Pentru conținut static/artefacte comune - NFS/SMB/obiect + CDN.
Încuietori, cache și consistență
Consultanță vs încuietori obligatorii: Linux обычно consultativ; SMB suportă oplocks/leases, NFSv4 suportă încuietori statale.
Cache-ul clientului: Cache-urile agresive accelerează citirea, dar cu multi-clienți cresc riscul de conflicte.
- Strong (local FS, ZFS).
- Close-to-open (NFS) - modificările sunt vizibile atunci când „close ()/open ()”.
- Eventual (unele scripturi distribuite/obiect).
- Ore: NTP/PTP; timp derivă pauze conflict-soluționare și TTL.
Sincronizare: modele și instrumente
Modele
One-way (push/pull): publicarea artefactelor, încărcarea rapoartelor, backup offsite.
Două căi (bi-dir): colaborare; sunt necesare conflicte și versiuni de rezolvare.
Hub-and-speaked: stea prin nodul central/cluster (MinIO/S3 + agenți).
Aproape în timp real vs lot: inotify/schimbare busteni vs ferestre periodice.
Instrumente
rsync este standardul de facto cu sens unic; '--delete', '--partial', '--inplace' (prudenţă).
rclone - S3/clouds, verificare hash, copie server-side.
Unison - adevărată bidirecţională, rezolvarea conflictelor.
Syncthing - p2p, versioning, convenabil pentru folderele de lucru.
lsyncd - declanșator rsync prin inotify; aproape în timp real.
ZFS trimite/recv este chiuveta perfectă de instantanee/incremente (byte eficiente).
bash rsync -az --delete --numeric-ids --partial --inplace \
/srv/builds/ user@edge:/var/www/builds/
Unison (bi-dir, profil):
root =/srv/shared root = ssh ://user @ peer//srv/shared prefer =/srv/shared # in case of conflict - local side repeat = watch # inotify ignore = Name. tmp
lsyncd (aproape în timp real peste rsync):
lua settings { logfile="/var/log/lsyncd. log", statusFile="/var/run/lsyncd. status" }
sync {
default. rsync,
source="/srv/outbox",
target="user@remote:/srv/inbox",
rsync={ archive=true, compress=true, delete=true }
}
ZFS replica (increment):
bash zfs snapshot tank/data@now zfs send -i tank/data@prev tank/data@now ssh backup zfs recv -F backup/data
Versioning, instantanee și coșuri
Instantanee CoW (ZFS/Btrfs/CephFS): puncte de întoarcere rapidă, facturi minime.
Versioning la nivel de aplicație (Nextcloud/Syncthing/object): convenabil pentru utilizatori.
Coșuri de reciclare pe SMB/NFS: salvați de la ștergerea accidentală, dar nu înlocuiți backup-ul.
Securitate și acces
ACL și xattr: POSIX ACL, SID/ACE pentru SMB, cartografiere uid/gid.
Citiți/scrieți prin gateway-uri: SFTP/HTTPS/WebΜ- când SMB/NFS nu poate fi deschis în exterior.
Criptare: LUKS/ZFS nativ; în zbor - Kerberos (NFSv4), criptare SMB, TLS pentru gateway-uri.
PII/conformitate: segmentarea mingii, măști stricte pentru drepturi, audituri de acces, WORM acolo unde este nevoie de neschimbat.
Observabilitate, SLO și alerte
Метрики ФС: p95/p99 latenta (read/write/open), IOPS, qdepth, cache hit, inode usage, fill-level, erori (EIO/ENOSPC).
Metrica rețelei (NFS/SMB): retransmiteri/picături, RPC RTT, pauze oplock, lungime coadă.
- NFS ball CI: p95 'open '/' read' ≤ 3-5 ms, disponibilitate ≥ 99. 95%.
- Rapoarte SMB: lista directoarelor p95 ≤ 100 ms atunci când ≤ fișiere 10k/dir.
- Piscina de rezervă ZFS: p99 scrie ≤ 10 ms, 100% succes instantaneu, RPO ≤ 15 min (incremente).
- Umplerea piscinei> 80/90/95%, creșterea „EIO”, decalajul instantaneelor, scăderea raportului lovit, frecvența oplock-break.
Modele de produse (iGaming/fintech)
Static (icons/previews/provider directories): publicarea prin rsync → CDN; stocați sursa originală într-un obiect versionat.
Jurnale și evenimente „brute”: scrieți local (XFS/ext4) → descărcați lotul (rclone → S3/MinIO).
Raportare și PII: SMB cu criptare și ACL-uri stricte; export periodic offsite (ZFS trimite/recv) cu WORM pe partea de primire.
Dev medii și capturarea artefactelor: NFS/SMB pentru partajare; pentru baze grele - volume de bloc + instantanee.
Conținut de colaborare: Sincthing/Nextcloud cu versioning și cote.
Lista de verificare a implementării
- Clase de date definite (cald/rece/PII), RPO/RTO și SLO.
- Sistem de fișiere selectat: ext4/XFS/ZFS cu opțiuni corecte (noatime, bariere, dimensiunea înregistrării).
- Dacă NAS: NFSv4/SMB criptate/semnate, ACL, Kerberos/AD.
- Instantanee/versioning/Recycle Bins - Configurat și verificat prin recuperare.
- Instrument de vânătăi pentru sarcina: rsync (one-way), Unison/Syncthing (bi-dir), rclone (cloud), ZFS trimite/recv (backup/DR).
- Monitorizarea FS/rețea/operațiuni, burn-rate SLO, ENOSPC/EIO/oplock alerte.
- Documentație: Conflicte Runbook, reguli fsync, denumirea/lungimea căii/politica de codare.
- Teste: profile de încărcare (fișiere mici/mari), scripturi tăiate (deconectare, conflict de editare).
Erori comune
Partajate netball tranzacție critică (OLTP) în loc de volumul local bloc.
Bariere dezactivate/fără fsync în aplicație → pierderi de date la eșec.
Bidirecțional sincronizare fără versioning și un singur timp → „mâncat” modificări.
„Aruncați” online pe piscină fierbinte → cozi de latență.
Milioane de fișiere mici într-un singur director → listare catastrofală/copie de rezervă.
Se amestecă drepturile/proprietarii între SMB și NFS fără cartografiere explicită.
Mini playbook-uri
Publishing one-way construi servere → margine
1. Asamblare în '/srv/builds' (sistem local de fișiere). 2) „rsync -az --delete” на margine. 3) dizabilitate CDN.
Dosarul de lucru al analistului Bi-dir
1. Syncthing/Unison, "versioning N days', conflict - salvați ambele versiuni. 2) Cote per utilizator. 3) backup periodic offsite.
Raport Catalog DR (WORM)
1. Instantanee ZFS pe un program. 2) 'trimite/recv' unei gazde izolate cu Object Lock/WORM. 3) Testul lunar de recuperare.
Rezultat
Un subsistem de fișiere fiabil este sistemul corect de fișiere + modurile corecte de logare/barieră + un model de blocare ușor de înțeles, iar sincronizarea eficientă este topologia corectă (one-way/bi-dir), versionarea și instrumentele dovedite. Capturați soluții în runbooks, automatizați instantanee/replicare, măsurați SLO-uri și scenarii de eșec de testare - în acest fel datele vor rămâne intacte și procesele operaționale previzibile chiar și la sarcini maxime.