Cap. 10. Gestionarea datelor

Cuprins

10.1. Partajarea, copierea și arhivarea
10.1.1. Instrumente de arhivare și comprimare
10.1.2. Instrumente de copiere și sincronizare
10.1.3. Expresii idiomatice pentru arhivă
10.1.4. Expresii idiomatice pentru copiere
10.1.5. Expresii idiomatice pentru selectarea fișierelor
10.1.6. Suportul de arhivare
10.1.7. Dispozitive de stocare amovibile (detașabile)
10.1.8. Alegerea sistemului de fișiere pentru partajarea datelor
10.1.9. Partajarea datelor prin rețea
10.2. Copia de rezervă și recuperarea
10.2.1. Politica de copie de rezervă și recuperare
10.2.2. Suite de instrumente de copie de rezervă
10.2.3. Sfaturi pentru copierea de rezervă
10.2.3.1. Copierea de rezervă în interfața grafică
10.2.3.2. Copiere de rezervă declanșată de evenimentul de montare
10.2.3.3. Copiere de rezervă declanșată de evenimentul programatorului de sarcini
10.3. Infrastructura de securitate a datelor
10.3.1. Gestionarea cheilor pentru GnuPG
10.3.2. Utilizarea GnuPG pe fișiere
10.3.3. Utilizarea GnuPG cu Mutt
10.3.4. Utilizarea GnuPG cu Vim
10.3.5. Suma de control MD5
10.3.6. Inel de chei pentru parole
10.4. Instrumente de îmbinare a codului sursă
10.4.1. Extragerea diferențelor pentru fișierele sursă
10.4.2. Fuzionarea actualizărilor pentru fișierele sursă
10.4.3. Îmbinare/fuzionare interactivă
10.5. Git
10.5.1. Configurarea clientului Git
10.5.2. Comenzi Git de bază
10.5.3. Sfaturi Git
10.5.4. Referințe Git
10.5.5. Alte sisteme de control al versiunii

Sunt descrise instrumente și sfaturi pentru gestionarea datelor binare și textuale în sistemul Debian.

[Avertisment] Avertisment

Accesul necoordonat la scriere la dispozitive și fișiere accesate activ din mai multe procese nu trebuie efectuat pentru a evita condiția de concurență. Pentru a evita acest lucru, se pot utiliza mecanisme de blocare a fișierelor folosind flock(1).

Securitatea datelor și partajarea controlată a acestora au mai multe aspecte.

  • Crearea arhivei de date

  • Accesul la stocare de la distanță

  • Duplicarea

  • Urmărirea istoricului modificărilor

  • Facilitarea schimbului de date

  • Prevenirea accesului neautorizat la fișiere

  • Detectarea modificării neautorizate a fișierelor

Acestea pot fi realizate prin utilizarea unei combinații de instrumente.

  • Instrumente de arhivare și comprimare

  • Instrumente de copiere și sincronizare

  • Sisteme de fișiere în rețea

  • Suporturi de stocare amovibile

  • Shell-ul securizat

  • Sistemul de autentificare

  • Instrumente pentru sistemul de control al versiunilor

  • Instrumente de criptare criptografică și sume de control

Iată un rezumat al instrumentelor de arhivare și comprimare disponibile în sistemul Debian.

Tabel 10.1. Lista instrumentelor de arhivare și comprimare

pachet popcon(popularitate) dimensiune extensie comandă comentariu
tar V:895, I:1000 3085 .tar tar(1) arhivatorul standard (standardul de facto)
cpio V:422, I:999 1201 .cpio cpio(1) arhivator în stil Unix System V, se utilizează cu find(1)
binutils V:191, I:640 1119 .ar ar(1) arhivator pentru crearea de biblioteci statice
fastjar V:1, I:11 183 .jar fastjar(1) arhivator pentru Java (precum zip)
pax V:6, I:10 167 .pax pax(1) nou arhivator standard POSIX, compromis între tar și cpio
gzip V:891, I:1000 256 .gz gzip(1), zcat(1), … instrumentul de comprimare GNU LZ77 (standardul de facto)
bzip2 V:170, I:972 114 .bz2 bzip2(1), bzcat(1), … instrumentul de comprimare prin sortare de blocuri Burrows-Wheeler cu un raport de comprimare mai mare decât gzip(1) (mai lent decât gzip cu sintaxă similară)
lzma V:1, I:11 349 .lzma lzma(1) instrument de comprimare LZMA cu o raport de comprimare mai mare decât gzip(1) (depreciat)
xz-utils V:311, I:981 1475 .xz xz(1), xzdec(1), … instrument de comprimare XZ cu un raport de comprimare mai mare decât bzip2(1) (mai lent decât gzip, dar mai rapid decât bzip2; înlocuitor pentru instrumentul de comprimare LZMA)
zstd V:298, I:781 2313 .zstd zstd(1), zstdcat(1), … instrument de comprimare rapidă fără pierderi Zstandard
p7zip V:8, I:233 8 .7z 7zr(1), p7zip(1) arhivator de fișiere 7-Zip cu raport de comprimare ridicat (comprimare LZMA)
p7zip-full V:27, I:256 12 .7z 7z(1), 7za(1) arhivator de fișiere 7-Zip cu raport de comprimare ridicat (comprimare LZMA și altele)
lzop V:13, I:138 164 .lzo lzop(1) instrument de comprimare LZO cu viteză de comprimare și decomprimare mai mare decât gzip(1) (raport de comprimare mai mic decât gzip cu sintaxă similară)
zip V:51, I:369 627 .zip zip(1) InfoZIP: instrument de arhivare și comprimare DOS
unzip V:116, I:760 387 .zip unzip(1) InfoZIP: instrument pentru dezarhivare și decomprimare DOS

[Avertisment] Avertisment

Nu definiți variabila „$TAPE” decât dacă știți la ce să vă așteptați. Aceasta modifică comportamentul tar(1).

Iată un rezumat al instrumentelor simple de copiere și copie de rezervă disponibile în sistemul Debian.


Copierea fișierelor cu rsync(8) oferă funcții mai avansate decât alte programe.

  • algoritm de transfer delta care trimite numai diferențele dintre fișierele sursă și fișierele existente în destinație

  • algoritm de verificare rapidă (implicit) care caută fișiere care au suferit modificări în ceea ce privește dimensiunea sau data ultimei modificări

  • opțiunile „--exclude” și „--exclude-from” similare cu tar(1)

  • sintaxa „o bară oblică la sfârșitul directorului sursă” care evită crearea unui nivel suplimentar de director la destinație.

[Indicație] Indicație

Instrumentele sistemului de control al versiunilor (VCS) din Tabel 10.14, „Lista altor instrumente pentru sistemul de control al versiunilor” pot funcționa ca instrumente de copiere și sincronizare în mai multe direcții.

Iată câteva modalități de a copia întregul conținut al directorului „./source” folosind diferite instrumente.

  • Copie locală: directorul „./source” → directorul „/dest

  • Copie la distanță: directorul „./source” de pe gazda locală → directorul „/dest” de pe gazda „user@host.dom

rsync(8):

# cd ./source; rsync -aHAXSv . /dest
# cd ./source; rsync -aHAXSv . user@host.dom:/dest

Alternativ, puteți utiliza sintaxa „o bară oblică la sfârșitul directorului sursă”.

# rsync -aHAXSv ./source/ /dest
# rsync -aHAXSv ./source/ user@host.dom:/dest

Alternativ, prin următoarele.

# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . /dest
# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . user@host.dom:/dest

GNU cp(1) și openSSH scp(1):

# cd ./source; cp -a . /dest
# cd ./source; scp -pr . user@host.dom:/dest

GNU tar(1):

# (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - )
# (cd ./source && tar cf - . ) | ssh user@host.dom '(cd /dest && tar xvfp - )'

cpio(1):

# cd ./source; find . -print0 | cpio -pvdm --null --sparse /dest

Puteți înlocui „.” cu „foo” pentru toate exemplele care conțin „.” pentru a copia fișiere din directorul „./source/foo” în directorul „/dest/foo”.

Puteți înlocui „.” cu ruta absolută „/ruta/la/source/foo” pentru toate exemplele care conțin „.” pentru a elimina „cd ./source;”. Acestea copiază fișierele în locații diferite, în funcție de instrumentele utilizate, după cum urmează.

  • "/dest/foo": rsync(8), GNU cp(1), și scp(1)

  • "/dest/ruta/la/source/foo": GNU tar(1), și cpio(1)

[Indicație] Indicație

rsync(8) și GNU cp(1) au opțiunea „-u” pentru a omite fișierele care sunt mai noi pe receptor (la destinație).

find(1) este utilizat pentru a selecta fișiere pentru comenzile de arhivare și copiere (a se vedea Secțiune 10.1.3, „Expresii idiomatice pentru arhivă” și Secțiune 10.1.4, „Expresii idiomatice pentru copiere”) sau pentru xargs (1) (a se vedea Secțiune 9.4.9, „Repetarea unei comenzi care parcurge fișierele”). Aceasta poate fi îmbunătățită prin utilizarea argumentelor sale de comandă.

Sintaxa de bază a find(1) poate fi rezumată după cum urmează.

  • Argumentele sale condiționale sunt evaluate de la stânga la dreapta.

  • Această evaluare se încheie odată ce rezultatul său este determinat.

  • SAU logic” (specificat prin „-o” între condiții) are prioritate mai mică decât „ȘI logic” (specificat prin „-a” sau nimic între condiții).

  • NU logic” (specificat prin „!” înaintea unei condiții) are prioritate mai mare decât „ȘI logic”.

  • -prune” returnează întotdeauna valoarea logică ADEVĂRAT și, dacă este vorba de un director, căutarea fișierului este oprită dincolo de acest punct.

  • -name” potrivește cu baza numelui fișierului cu expresiile regulate shell (a se vedea Secțiune 1.5.6, „Facilitatea glob a shell-ului”), dar se potrivește de asemenea cu „.” inițial cu metacaractere precum „*” și „?”; (funcție nouă POSIX).

  • -regex” potrivește cu ruta completă în stilul emacs BRE (a se vedea Secțiune 1.6.2, „Expresii regulate”) ca valoare implicită.

  • -size” potrivește fișierul pe baza dimensiunii fișierului (valoare precedată de „+” pentru mai mare, precedată de „-” pentru mai mică)

  • -newer” potrivește cu fișierul mai nou decât cel specificat în argumentul său.

  • -print0” returnează întotdeauna ADEVĂRAT logic și afișează numele complet al fișierului (terminat cu caracterul null) la ieșirea standard.

find(1) este adesea utilizat într-un stil idiomatic, după cum urmează.

# find /path/to \
    -xdev -regextype posix-extended \
    -type f -regex ".*\.cpio|.*~" -prune -o \
    -type d -regex ".*/\.git" -prune -o \
    -type f -size +99M -prune -o \
    -type f -newer /path/to/timestamp -print0

Aceasta înseamnă efectuarea următoarelor acțiuni.

  1. Caută toate fișierele ce încep cu „/path/to

  2. Limitează global căutarea în sistemul de fișiere inițial și utilizează în schimb ERE (a se vedea Secțiune 1.6.2, „Expresii regulate”).

  3. Exclude fișierele care corespund expresiei regulate „.*\.cpio” sau „.*~” din căutare prin oprirea procesării.

  4. Exclude din căutare directoarele care corespund expresiei regulate „.*/\.git” prin oprirea procesării.

  5. Exclude fișierele mai mari de 99 megaocteți (unități de 1048576 octeți) din căutare prin oprirea procesării.

  6. Afişează numele fişierelor care îndeplinesc condiţiile de căutare de mai sus şi sunt mai recente decât „/path/to/timestamp”.

Vă rugăm să rețineți utilizarea idiomatică a „-prune -o” pentru a exclude fișierele din exemplul de mai sus.

[Notă] Notă

Pentru sistemele non-Debian de tip Unix, este posibil ca unele opțiuni să nu fie acceptate de find(1). În acest caz, vă rugăm să luați în considerare ajustarea metodelor de potrivire și înlocuirea „-print0” cu „-print”. Este posibil să fie necesară ajustarea și a comenzilor asociate.

Atunci când alegeți suporturi de stocare a datelor pe calculator pentru arhivarea datelor importante, trebuie să fiți atenți la limitările acestora. Pentru copia de rezervă a datelor personale de mici dimensiuni, eu folosesc CD-R și DVD-R de la companii de renume și le păstrez într-un mediu răcoros, umbrit, uscat și curat; (suporturile de arhivare pe bandă par să fie populare pentru uz profesional.)

[Notă] Notă

Un seif rezistent la foc este destinat documentelor imprimate pe hârtie. Majoritatea suporturilor de stocare a datelor informatice au o toleranță la temperatură mai mică decât hârtia. De obicei, mă bazez pe mai multe copii criptate securizate, stocate în mai multe locații sigure.

Durata de viață optimistă a suporturilor de arhivare observată pe internet (în principal din informațiile furnizate de producători).

  • mai mult de 100 de ani: hârtie fără acid cu cerneală

  • 100 de ani: stocare optică (CD/DVD, CD/DVD-R)

  • 30 de ani: stocare magnetică (bandă, dischetă)

  • 20 de ani: stocare optică cu schimbare de stare (inscripționare-ștergere-reinscripționare -- CD-RW)

Acestea nu iau în calcul defecțiunile mecanice cauzate de manipulare, etc.

Numărul de cicluri de scriere optimist al mediilor de arhivare observat pe internet (în principal din informațiile furnizate de producători).

  • mai mult de 250.000 de cicluri: disc dur

  • mai mult de 10.000 de cicluri: memorie flash

  • 1.000 de cicluri: CD/DVD-RW

  • 1 cicluri: CD/DVD-R, hârtie

[Atenție] Atenție

Cifrele referitoare la durata de stocare și ciclul de scriere prezentate aici nu trebuie utilizate pentru luarea de decizii privind stocarea datelor critice. Vă rugăm să consultați informațiile specifice despre produs furnizate de producător.

[Indicație] Indicație

Deoarece CD-urile/DVD-urile-R și hârtia au un singur ciclu de scriere, acestea previn în mod inerent pierderea accidentală a datelor prin suprascriere. Acesta este un avantaj!

[Indicație] Indicație

Dacă aveți nevoie de copii de rezervă rapide și frecvente pentru cantități mari de date, un disc dur pe un server la distanță conectat printr-o rețea rapidă poate fi singura opțiune realistă.

[Indicație] Indicație

Dacă utilizați suporturi reinscriptibile pentru copiile de rezervă, ar fi o idee bună să utilizați un sistem de fișiere precum btrfs sau zfs, care acceptă instantanee numai pentru citire.

Dispozitivele de stocare amovibile pot fi oricare dintre următoarele.

Acestea pot fi conectate prin oricare dintre următoarele metode.

Mediile grafice de birou moderne, precum GNOME și KDE, pot monta automat aceste dispozitive amovibile fără o intrare corespunzătoare în „/etc/fstab”.

  • Pachetul udisks2 oferă un demon și instrumente asociate pentru montarea și demontarea acestor dispozitive.

  • D-bus creează evenimente pentru a iniția procese automate.

  • PolicyKit furnizează privilegiile necesare.

[Indicație] Indicație

Dispozitivele montate automat pot avea opțiunea de montare „uhelper=”, care este utilizată de umount(8).

[Indicație] Indicație

Montarea automată în mediul grafic de birou modern are loc numai atunci când aceste dispozitive media amovibile nu sunt listate în „/etc/fstab”.

Punctul de montare în mediul grafic de birou modern este ales ca „/media/nume-utilizator/etichetă-dispozitiv”, care poate fi personalizat după cum urmează.

  • mlabel(1) pentru sistemul de fișiere FAT

  • genisoimage(1) cu opțiunea „-V” pentru sistemul de fișiere ISO9660

  • tune2fs(1) cu opțiunea „-L” pentru sistemul de fișiere ext2/ext3/ext4

[Indicație] Indicație

Este posibil să fie necesar să se specifice alegerea codificării ca opțiune de montare (a se vedea Secțiune 8.1.3, „Codificarea numelor de fișiere”).

[Indicație] Indicație

Utilizarea meniului interfeței grafice pentru a dezactiva un sistem de fișiere poate elimina nodul dispozitivului generat dinamic, cum ar fi „/dev/sdc”. Dacă doriți să păstrați nodul dispozitivului, dezactivați-l cu comanda umount(8) din promptul shell.

Când partajați date cu alte sisteme prin intermediul unui dispozitiv de stocare amovibil, trebuie să îl formatați cu un sistem de fișiere comun acceptat de ambele sisteme. Iată o listă cu opțiunile de sisteme de fișiere.

[Notă] Notă

Declarațiile referitoare la discul dur (HDD) se aplică și altor dispozitive de stocare, cum ar fi SSD / unitate flash USB / card de memorie / ... . Înlocuiți numele dispozitivelor din exemple, cum ar fi /dev/sda, cu numele dispozitivelor aplicabile /dev/nvme0, /dev/mmcblk0, ... .

Tabel 10.3. Lista opțiunilor de sistem de fișiere pentru dispozitive de stocare amovibile cu scenarii tipice de utilizare

numele sistemului de fișiere scenariul de utilizare tipic
FAT12 partajarea datelor între platforme pe dischetă (<32MiB)
FAT16 partajarea datelor între platforme pe un dispozitiv precum un disc dur mic (<2Gio)
FAT32 partajarea datelor între platforme pe un dispozitiv precum un disc dur de mare capacitate (<8Tio, compatibil cu versiuni mai noi decât MS Windows95 OSR2)
exFAT partajarea datelor între platforme pe un dispozitiv precum un disc dur de mare capacitate (<512 TiB, compatibil cu WindowsXP, Mac OS X Snow Leopard 10.6.5 și cu nucleul Linux începând cu versiunea 5.4)
NTFS partajarea datelor între platforme pe un dispozitiv precum un disc dur de mare capacitate (cu suport nativ în MS Windows NT și versiunile ulterioare, și cu suport în NTFS-3G prin intermediul FUSE în Linux)
ISO9660 partajarea între platforme a datelor statice pe CD-R și DVD+/-R
UDF scrierea incrementală a datelor pe CD-R și DVD+/-R (nou)
MINIX stocare eficientă a datelor fișierelor Unix pe dischetă
ext2 partajarea datelor de pe un dispozitiv precum discul dur cu sisteme Linux mai vechi
ext3 partajarea datelor de pe un dispozitiv precum discul dur cu sisteme Linux mai vechi
ext4 partajarea datelor pe un dispozitiv precum discul dur cu sistemele Linux actuale
btrfs partajarea datelor pe dispozitive precum discul dur cu sistemele Linux actuale cu instantanee numai pentru citire

[Indicație] Indicație

Consultați Secțiune 9.9.1, „Criptarea discurilor amovibile cu dm-crypt/LUKS” pentru partajarea datelor între platforme utilizând criptarea la nivel de dispozitiv.

Sistemul de fișiere FAT este acceptat de aproape toate sistemele de operare moderne și este foarte util pentru schimbul de date prin intermediul unor suporturi de stocare amovibile, precum discurile dure.

Atunci când formatați dispozitive precum discurile dure amovibile pentru partajarea datelor între platforme cu sistemul de fișiere FAT, următoarele opțiuni ar trebui să fie sigure.

Atunci când utilizați sistemele de fișiere FAT sau ISO9660 pentru partajarea datelor, trebuie să luați în considerare următoarele aspecte de siguranță.

  • Arhivarea fișierelor într-un fișier arhivă utilizând mai întâi tar(1) sau cpio(1) pentru a păstra numele lung al fișierului, legătura simbolică, permisiunea originală a fișierului Unix și informațiile despre proprietar.

  • Împărțirea fișierului arhivă în bucăți mai mici de 2 Gio cu comanda split(1) pentru a-l proteja de limitarea dimensiunii fișierului.

  • Criptarea fișierului arhivă pentru a proteja conținutul acestuia împotriva accesului neautorizat.

[Notă] Notă

Pentru sistemele de fișiere FAT, conform specificațiilor, dimensiunea maximă a fișierului este (2^32 - 1) octeți = (4Gio - 1 octet). Pentru unele aplicații pe sistemele de operare mai vechi de 32 de biți, dimensiunea maximă a fișierului era chiar mai mică (2^31 - 1) octeți = (2Gio - 1 octet). Debian nu are această problemă.

[Notă] Notă

Microsoft însuși nu recomandă utilizarea FAT pentru unități sau partiții de peste 200 Mo. Microsoft subliniază deficiențele sale, cum ar fi utilizarea ineficientă a spațiului pe disc, în „Prezentare generală a sistemelor de fișiere FAT, HPFS și NTFS”. Desigur, în mod normal ar trebui să utilizăm sistemul de fișiere ext4 pentru Linux.

[Indicație] Indicație

Pentru mai multe informații despre sistemele de fișiere și accesarea acestora, citiți „Ghidul sistemelor de fișiere”.

Când partajați date cu alte sisteme prin rețea, ar trebui să utilizați un serviciu comun. Iată câteva sfaturi.


Deși aceste sisteme de fișiere montate în rețea și metodele de transfer de fișiere prin rețea sunt destul de convenabile pentru partajarea datelor, acestea pot fi nesigure. Conexiunea lor la rețea trebuie securizată prin următoarele măsuri.

Consultă de asemenea Secțiune 6.5, „Alte servere de aplicații de rețea” și Secțiune 6.6, „Alți clienți de aplicații de rețea”.

Știm cu toții că uneori calculatoarele se defechează sau că erorile umane pot provoca daune sistemului și datelor. Operațiile de copie de rezervă și recuperare sunt o parte esențială a administrării cu succes a sistemului. Toate modurile posibile de funcționare defectuoasă vă pot afecta într-o zi.

[Indicație] Indicație

Mențineți sistemul de copiere de rezervă simplu și faceți copii de rezervă ale sistemului în mod frecvent. Este mai important să aveți date de rezervă decât să dispuneți de o metodă de copiere de rezervă performantă din punct de vedere tehnic.

Există 3 factori cheie care determină politica actuală de copie de rezervă și recuperare.

  1. Să știi ce să copiezi și ce să recuperezi.

  2. Să știi cum să faci copii de rezervă și să recuperezi datele.

    • Stocarea sigură a datelor: protecție împotriva suprascrierii și a defecțiunilor sistemului

    • Copiere de rezervă frecventă: copie de rezervă programată

    • Copie de rezervă redundantă: oglindirea datelor

    • Proces fără greșeli: copie de rezervă ușoară cu o singură comandă

  3. Evaluarea riscurilor și a costurilor implicate.

    • Riscul de pierdere a datelor

      • Datele trebuie să se afle cel puțin pe partiții de disc diferite, de preferință pe discuri și mașini diferite, pentru a rezista la coruperea sistemului de fișiere. Datele importante sunt stocate cel mai bine pe un sistem de fișiere numai pentru citire. [4]

    • Riscul de încălcare a securității datelor

      • Date sensibile de identitate, cum ar fi „/etc/ssh/ssh_host_*_key”, „~/.gnupg/*”, „~/.ssh/*”, „~/.local/share/keyrings/*”, „/etc/passwd”, „/etc/shadow”, „popularity-contest.conf”, „/etc/ppp/pap-secrets” și „/etc/exim4/passwd.client” trebuie să fie copiate ca fișiere criptate. [5] (A se vedea Secțiune 9.9, „Sfaturi pentru criptarea datelor”.)

      • Nu încorporați niciodată parola de conectare la sistem sau fraza de decriptare în niciun script, chiar și pe un sistem de încredere; (a se vedea Secțiune 10.3.6, „Inel de chei pentru parole”).

    • Modul de defectare și posibilitatea apariției acestuia

      • Hardware-ul (în special HDD-ul) se va defecta

      • Sistemul de fișiere poate fi corupt, iar datele din acesta pot fi pierdute.

      • Sistemul de stocare la distanță nu este de încredere din punct de vedere al securității

      • Protecția prin parolă slabă poate fi compromisă cu ușurință

      • Sistemul de permisiuni pentru fișiere poate fi compromis

    • Resurse necesare pentru copie de rezervă: resurse umane, hardware, software, …

      • Copiere de rezervă automată programată cu sarcină de «cron» (cron job) sau cu sarcină programată de systemd (systemd timer job)

[Indicație] Indicație

Puteți recupera datele de configurare debconf cu „debconf-set-selections debconf-selections” și datele de selecție dpkg cu „dpkg --set-selection <dpkg-selections.list”.

[Notă] Notă

Nu faceți copii de rezervă pentru conținutul pseudo-sistemului de fișiere găsit în /proc, /sys, /tmp și /run (consultați Secțiune 1.2.12, „procfs și sysfs” și Secțiune 1.2.13, „tmpfs”). Dacă nu știți exact ce faceți, acestea sunt date inutile de dimensiuni enorme.

[Notă] Notă

Este posibil să doriți să opriți anumiți demoni de aplicații, cum ar fi MTA (consultați Secțiune 6.2.4, „Agentul de transport al poștei electronice („Mail transport agent”: MTA)”), în timp ce faceți copii de rezervă ale datelor.

Iată o listă selectivă a celor mai importante suite de instrumente de copiere de rezervă disponibile în sistemul Debian.

Tabel 10.5. Lista suitelor de instrumente de copiere de rezervă

pachet popcon(popularitate) dimensiune descriere
bacula-common V:6.4, I:7.4 2501 Bacula: copiere de rezervă, recuperare și verificare în rețea - fișiere comune de asistență
bacula-client V:0.3, I:2.0 199 Bacula: copiere de rezervă, recuperare și verificare în rețea - meta-pachet client
bacula-console V:0.7, I:2.2 112 Bacula: copiere de rezervă, recuperare și verificare în rețea - consolă text
bacula-server I:0.66 199 Bacula: copiere de rezervă, recuperare și verificare în rețea - meta-pachet server
amanda-common V:0.7, I:2.2 9851 Amanda: „Advanced Maryland Automatic Network Disk Archiver” -- Arhivator automat avansat de discuri în rețea Maryland (biblioteci)
amanda-client V:0.7, I:2.2 1099 Amanda: Arhivator automat avansat de discuri în rețea Maryland (client)
amanda-server V:0.12, I:0.25 1093 Amanda: Arhivator automat avansat de discuri în rețea Maryland (server)
backuppc V:1.5, I:1.7 3088 BackupPC X este un sistem performant, la nivel de întreprindere, pentru copierea de rezervă a calculatoarelor (pe disc).
duplicity V:6, I:51 2649 copie de rezervă incrementală (la distanță)
deja-dup V:31, I:46 5232 interfață grafică pentru duplicitate
borgbackup V:13, I:29 3478 de duplicarea copiilor de rezervă (de la distanță)
borgmatic V:3.2, I:4.3 946 asistent robotizat de copiere de rezervă
rdiff-backup V:2.4, I:7.0 1207 copie de rezervă incrementală (la distanță)
restic V:5, I:11 24708 copie de rezervă incrementală (la distanță)
backupninja V:2.3, I:2.7 360 sistem de meta-copiere de rezervă ușor și extensibil
slbackup V:0.10, I:0.14 147 copie de rezervă incrementală (la distanță)
backup-manager V:0.45, I:0.80 573 instrument de copie de rezervă din linia de comandă
backup2l V:0.40, I:0.54 110 instrument de copiere de rezervă/restaurare cu întreținere redusă pentru suporturi ce pot fi montate (pe bază de disc)

Instrumentele de copie de rezervă au domenii de specializare specifice.

  • Mondo Rescue este un sistem de copiere de rezervă care facilitează restaurarea rapidă a întregului sistem de pe CD-uri/DVD-uri de rezervă etc., fără a fi necesar să se parcurgă procesele normale de instalare a sistemului.

  • Bacula, Amanda, și BackupPC sunt suite complete de instrumente de copiere de rezervă, axate pe copierea periodică de rezervă prin rețea.

  • Duplicity, și Borg sunt instrumente de copiere de rezervă mai simple pentru stațiile de lucru obișnuite.

Pentru o stație de lucru personală, instrumentele complete de copiere de rezervă concepute pentru mediul server pot să nu fie adecvate. În același timp, instrumentele existente de copiere de rezervă pentru stațiile de lucru pot avea unele deficiențe.

Iată câteva sfaturi pentru a facilita realizarea copiilor de rezervă cu eforturi minime din partea utilizatorului. Aceste tehnici pot fi utilizate cu orice instrumente de copiere de rezervă.

În scop demonstrativ, să presupunem că numele utilizatorului și al grupului principal este penguin și să creăm un exemplu de script de copiere de rezervă și instantanee„/usr/local/bin/bkss.sh” după cum urmează:

#!/bin/sh -e
SRC="$1" # source data path
DSTFS="$2" # backup destination filesystem path
DSTSV="$3" # backup destination subvolume name
DSTSS="${DSTFS}/${DSTSV}-snapshot" # snapshot destination path
if [ "$(stat -f -c %T "$DSTFS")" != "btrfs" ]; then
  echo "E: $DESTFS needs to be formatted to btrfs" >&2 ; exit 1
fi
MSGID=$(notify-send -p "bkup.sh $DSTSV" "in progress ...")
if [ ! -d "$DSTFS/$DSTSV" ]; then
  btrfs subvolume create "$DSTFS/$DSTSV"
  mkdir -p "$DSTSS"
fi
rsync -aHxS --delete --mkpath "${SRC}/" "${DSTFS}/${DSTSV}"
btrfs subvolume snapshot -r "${DSTFS}/${DSTSV}" ${DSTSS}/$(date -u --iso=min)
notify-send -r "$MSGID" "bkup.sh $DSTSV" "finished!"

Aici, doar instrumentul de bază rsync(1) este utilizat pentru a facilita copierea de rezervă a sistemului, iar spațiul de stocare este utilizat în mod eficient de Btrfs.

[Indicație] Indicație

Pentru informație: autorul utilizează propriul script shell similar „bss: Btrfs Subvolume Snapshot Utility” pentru stația sa de lucru.

Iată un exemplu pentru configurarea copierii de rezervă cu un singur clic în interfața grafică.

La fiecare clic în interfața grafică, datele dvs. sunt copiate din „~/Documents” pe un dispozitiv de stocare USB și se creează o instantanee numai pentru citire.

Iată un exemplu de configurare pentru copierea automată de rezervă declanșată de evenimentul de montare.

Pentru fiecare eveniment de montare, datele dvs. sunt copiate din „~/Documents” pe un dispozitiv de stocare USB și se creează o instantanee numai pentru citire.

Aici, numele unităților de montare systemd pe care systemd le are în prezent în memorie pot fi solicitate gestionarului de servicii al utilizatorului care efectuează apelul cu «systemctl --user list-units --type=mount».

Iată un exemplu de configurare pentru copierea automată de rezervă declanșată de evenimentul programatorului de sarcini.

  • Pregătiți un dispozitiv de stocare USB care să fie utilizat pentru copie de rezervă, ca în Secțiune 10.2.3.1, „Copierea de rezervă în interfața grafică”.

  • Creați un fișier de unitate de programare systemd „~/.config/systemd/user/snap-Documents.timer” astfel:

    [Unit]
    Description=Run btrfs subvolume snapshot on timer
    Documentation=man:btrfs(1)
    
    [Timer]
    OnStartupSec=30
    OnUnitInactiveSec=900
    
    [Install]
    WantedBy=timers.target
    
  • Creați un fișier de unitate de serviciu systemd „~/.config/systemd/user/snap-Documents.service” astfel:

    [Unit]
    Description=Run btrfs subvolume snapshot
    Documentation=man:btrfs(1)
    
    [Service]
    Type=oneshot
    Nice=15
    ExecStart=/usr/local/bin/bkss.sh %h/Documents /media/%u/BKUP Documents
    IOSchedulingClass=idle
    CPUSchedulingPolicy=idle
    StandardOutput=append:%h/.cache/systemd-snap.log
    StandardError=append:%h/.cache/systemd-snap.log
    
  • Activați această configurație a unității systemd cu următoarea comandă:

     $ systemctl --user enable snap-Documents.timer
    

Pentru fiecare eveniment programat, datele dvs. sunt copiate din „~/Documents” pe un dispozitiv de stocare USB și se creează o instantanee numai pentru citire.

Aici, numele unităților de utilizator ale programatorului systemd pe care systemd le are în prezent în memorie pot fi solicitate gestionatorului de servicii al utilizatorului care efectuează apelul cu «systemctl --user list-units --type=timer».

Pentru sistemele grafice de birou moderne, această abordare systemd poate oferi un control mai precis decât cele tradiționale Unix care utilizează at(1), cron(8) sau anacron(8).

Infrastructura de securitate a datelor este asigurată de combinația dintre instrumentul de criptare a datelor, instrumentul de rezumat al mesajelor și instrumentul de semnătură.


Consultați Secțiune 9.9, „Sfaturi pentru criptarea datelor” cu dm-crypt și fscrypt, care implementează infrastructura de criptare automată a datelor prin intermediul modulelor nucleului Linux.

Iată comenzile GNU Privacy Guard pentru gestionarea cheilor de bază.


Iată semnificația codului de încredere.


Următoarrea comandă generează cheia mea „9563FC29932C409F1A77F9C1AB8A1522D8234C6A”.

$ gpg --gen-key
gpg (GnuPG) 2.4.7; Copyright (C) 2024 g10 Code GmbH
...
GnuPG needs to construct a user ID to identify your key.

Real name: Osamu Aoki
Email address: osamu@debian.org
You selected this USER-ID:
    "Osamu Aoki <osamu@debian.org>"

Change (N)ame, (E)mail, or (O)kay/(Q)uit? o
...
public and secret key created and signed.

pub   ed25519 2026-02-14 [SC] [expires: 2029-02-13]
      9563FC29932C409F1A77F9C1AB8A1522D8234C6A
uid                      Osamu Aoki <osamu@debian.org>
sub   cv25519 2026-02-14 [E] [expires: 2029-02-13]
        

Următoarea comandă încarcă cheia mea „9563FC29932C409F1A77F9C1AB8A1522D8234C6A” pe popularul server de chei „hkp://keys.gnupg.net”.

$ gpg --keyserver hkp://keys.gnupg.net --send-keys 9563FC29932C409F1A77F9C1AB8A1522D8234C6A

Un server de chei implicit bine configurat în „~/.gnupg/gpg.conf” (sau vechea locație „~/.gnupg/options”) conține următoarele.

keyserver hkp://keys.gnupg.net

Următoarea comandă obține cheile necunoscute de la serverul de chei.

$ gpg --list-sigs --with-colons | grep '^sig.*\[User ID not found\]' |\
          cut -d ':' -f 5| sort | uniq | xargs gpg --recv-keys

A existat o eroare în OpenPGP Public Key Server (versiunea anterioară 0.9.6) care a corupt cheia cu mai mult de 2 subchei. Pachetul mai nou gnupg (>1.2.1-2) poate gestiona aceste subchei corupte. Consultați gpg(1) la opțiunea „--repair-pks-subkey-bug”.

Utilizarea SHA-1 pentru algoritmul de rezumat a fost înlocuită. Dacă vechea cheie openPGP bazată pe RSA utilizează SHA-1 pentru algoritmul de rezumat, remediați problema utilizând FixKeyWithSha1.

[Indicație] Indicație

Comenzile sq(1) și sqv(1) sunt un set alternativ de comenzi openPGP. Consultați documentația utilizatorului sq și O introducere practică în utilizarea sq, CLI-ul Sequoia PGP.

Iată câteva exemple de utilizare a comenzilor GNU Privacy Guard pe fișiere.


md5sum(1) oferă utilitatea de a crea un fișier de rezumat (digest) folosind metoda din rfc1321 și de a verifica fiecare fișier cu ajutorul acestuia.

$ md5sum foo bar >baz.md5
$ cat baz.md5
d3b07384d113edec49eaa6238ad5ff00  foo
c157a79031e1c40f85931829bc5fc552  bar
$ md5sum -c baz.md5
foo: OK
bar: OK
[Notă] Notă

Calculul pentru suma MD5 solicită mai puțin procesorul decât cel pentru semnătura criptografică realizată de GNU Privacy Guard (GnuPG). De obicei, numai fișierul de rezumat (digest) de nivel superior este semnat criptografic pentru a asigura integritatea datelor.

Există multe instrumente de îmbinare/fuzionare pentru codul sursă. Următoarele comenzi mi-au atras atenția.

Tabel 10.10. Lista instrumentelor de îmbinare a codului sursă

pachet popcon(popularitate) dimensiune comandă descriere
patch V:103, I:717 242 patch(1) aplică un fișier diff la un fișier original
vim V:87, I:347 4089 vimdiff(1) compară 2 fișiere unul lângă altul în vim
imediff V:0.03, I:0.29 348 imediff(1) instrument interactiv pe ecran complet de îmbinare/fuzionare a 2/3 fișiere
meld V:6, I:25 3546 meld(1) compară și fuzionează fișiere (GTK)
wiggle V:0.00, I:0.15 175 wiggle(1) aplică corecțiile (patch) respinse
diffutils V:881, I:998 1768 diff(1) compară fișiere linie cu linie
diffutils V:881, I:998 1768 diff3(1) compară și fuzionează trei fișiere linie cu linie
quilt V:2, I:19 880 quilt(1) gestionează serii de plasturi(corecții)
wdiff V:6, I:42 651 wdiff(1) afișează diferențele de cuvinte între fișierele text
diffstat V:11, I:105 79 diffstat(1) produce o histogramă a modificărilor prin diff
patchutils V:13, I:104 242 combinediff(1) creează un plasture cumulativ din doi plasturi incrementali
patchutils V:13, I:104 242 dehtmldiff(1) extrage un fișier diff dintr-o pagină HTML
patchutils V:13, I:104 242 filterdiff(1) extrage sau exclude diferențele dintr-un fișier diff
patchutils V:13, I:104 242 fixcvsdiff(1) corectează fișierele diff create de CVS pe care patch(1) le interpretează greșit
patchutils V:13, I:104 242 flipdiff(1) schimbă ordinea a două fișiere de corecții(plasturi)
patchutils V:13, I:104 242 grepdiff(1) afișează fișierele modificate de un patch care corespunde unei expresii regulate
patchutils V:13, I:104 242 interdiff(1) afișează diferențele dintre două fișiere diff unificate
patchutils V:13, I:104 242 lsdiff(1) afișează fișierele modificate de un plasture
patchutils V:13, I:104 242 recountdiff(1) recalculează numărările și decalajele într-un context unificat de diferențe
patchutils V:13, I:104 242 rediff(1) corectează decalajele și numărările unui fișier diff editat manual
patchutils V:13, I:104 242 splitdiff(1) separă plasturii(corecțiile) incrementale
patchutils V:13, I:104 242 unwrapdiff(1) repară plasturii(corecțiile) în care cuvintele au fost împărțite pe mai multe rânduri
dirdiff V:0.2, I:1.4 167 dirdiff(1) afișează diferențele și îmbină/fuzionează modificările între arbori de directoare
docdiff V:0.04, I:0.29 554 docdiff(1) compară două fișiere cuvânt cu cuvânt / caracter cu caracter
makepatch V:0.03, I:0.19 99 makepatch(1) generează fișiere .patch extinse
makepatch V:0.03, I:0.19 99 applypatch(1) aplică fișiere .patch extinse

Git este instrumentul preferat în prezent pentru sistemul de control al versiunilor (VCS), deoarece Git poate face totul atât pentru gestionarea codului sursă local, cât și pentru cea de la distanță.

Debian furnizează servicii Git gratuite prin intermediul serviciului Debian Salsa. Documentația acestuia poate fi găsită la https://wiki.debian.org/Salsa .

Iată câteva pachete legate de Git.


Operarea cu Git implică mai multe date.

  • Arborele de lucru care conține fișierele destinate utilizatorilor și în care efectuați modificări.

    • Modificările care trebuie înregistrate trebuie selectate în mod explicit și introduse în index. Acestea sunt comenzile git add și git rm.

  • Indexul care conține fișierele stocate în etape.

    • Fișierele modificate într-o etapă vor fi înregistrate în depozitul local la următoarea solicitare. Aceasta este comanda git commit.

  • Depozitul local care conține fișierele modificate.

    • Git înregistrează istoricul vinculat al datelor comise și le organizează ca ramuri în depozit.

    • Depozitul local poate trimite date către depozitul la distanță prin comanda git push.

    • Depozitul local poate primi date din depozitul de la distanță prin comenzile git fetch și git pull.

      • Comanda git pull execută comanda git merge sau git rebase după comanda git fetch.

      • Aici, git merge combină două ramuri separate ale istoricului la final într-un singur punct. (Aceasta este opțiunea implicită a git pull fără personalizare și poate fi utilă pentru persoanele din amonte care publică ramuri către multe persoane.)

      • Aici, git rebase creează o singură ramură a istoricului secvențial al ramurii la distanță unu, urmată de ramura locală unu. (Acesta este un caz de personalizare pull.rebase true și poate fi util pentru cei mai mulți dintre noi.)

  • Depozitul de la distanță care conține fișierele cu modificările comise.

    • Comunicarea cu depozitul de la distanță utilizează protocoale de comunicare securizate, precum SSH sau HTTPS.

Arborele de lucru este format din fișierele din afara directorului .git/. Fișierele din directorul .git/ conțin indexul, datele din depozitul local și câteva fișiere text de configurare pentru git.

Iată o prezentare generală a principalelor comenzi Git.


Iată câteva sfaturi pentru Git.

Tabel 10.13. Sfaturi Git

Linia de comandă Git funcție
gitk --all arată istoricul complet Git și operează asupra lui, cum ar fi reinițializarea HEAD la o altă modificare-comisă, selectarea plasturilor(corecțiilor), crearea de etichete și ramuri ...
git stash obține arborele de lucru curat fără a pierde date
git remote -v verifică configurarea pentru depozitul de la distanță
git branch -vv verifică configurarea pentru ramură
git status afișează starea arborelui de lucru
git config -l listează configurările git
git reset --hard HEAD; git clean -x -d -f anulează toate modificările din arborele de lucru și le curăță complet
git rm --cached nume-fișier anulează indexul etapizat modificat de git add nume-fișier
git reflog obține jurnalul de referință (util pentru recuperarea modificărilor-comise din ramura eliminată)
git branch new_branch_name HEAD@{6} creează o nouă ramură din informațiile jurnalului de referință
git remote add new_remote URL adaugă un depozit la distanță new_remote indicat de URL
git remote rename origin upstream redenumește numele depozitului de la distanță din origin în upstream
git branch -u upstream/branch_name configurează urmărirea la distanță pentru depozitul de la distanță upstream și numele ramurii sale branch_name.
git remote set-url origin https://foo/bar.git modifică adresa URL a origin
git remote set-url --push upstream DISABLED dezactivează push către upstream (Editează .git/config pentru a reactiva)
git remote update upstream preia actualizările tuturor ramurilor de la distanță din depozitul upstream
git fetch upstream foo:upstream-foo creează o ramură locală (posibil orfană) upstream-foo ca copie a ramurii foo din depozitul upstream
git checkout -b topic_branch ; git push -u topic_branch origin crează un nou topic_branch și îl introduce în origin
git branch -m oldname newname redenumește numele ramurii locale
git push -d origin branch_to_be_removed elimină ramura de la distanță (metodă nouă)
git push origin :branch_to_be_removed elimină ramura de la distanță (metodă veche)
git checkout --orphan unconnected creați o nouă ramură neconectată
git rebase -i origin/main reordonează/șterge/comprimă modificările-comise din origin/main pentru a curăța istoricul ramurii
git reset HEAD^; git commit --amend comprimă ultimele 2 modificări-comise într-una singură
git checkout topic_branch ; git merge --squash topic_branch comprimă întregul topic_branch într-o modificare-comisă
git fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*' convertește o clonă superficială într-o clonă completă a tuturor ramurilor
git ime împarte ultima modificare-comisă într-o serie de modificări-comise mai mici, fișier cu fișier etc. (este necesar pachetul imediff)
git repack -a -d; git prune reîmpachetează depozitul local într-un singur pachet (acest lucru poate limita șansele de recuperare a datelor pierdute din ramura ștersă etc.)

[Avertisment] Avertisment

Nu utilizați șirul de etichete care conține spații, chiar dacă unele instrumente, cum ar fi gitk(1), vă permit să îl utilizați. Acesta poate bloca alte comenzi git.

[Atenție] Atenție

Dacă o ramură locală care a fost introdusă în depozitul de la distanță este rebazată sau comprimată, introducerea acestei ramuri prezintă riscuri și necesită opțiunea --force. De obicei, acest lucru nu este acceptabil pentru ramura main, dar poate fi acceptabil pentru o ramură tematică înainte de fuzionarea cu ramura main.

[Atenție] Atenție

Invocarea unei subcomenzi git direct ca „git-xyz” din linia de comandă a fost abandonată încă de la începutul anului 2006.

[Indicație] Indicație

Dacă există un fișier executabil git-foo în ruta specificată de $PATH, introducerea „git foo” fără cratimă în linia de comandă invocă acest git-foo. Aceasta este o caracteristică a comenzii git.

Consultați următoarele.



[4] Un suport de stocare cu o singură scriere, cum ar fi CD/DVD-R, poate preveni accidentele de suprascriere. (Consultați Secțiune 9.8, „Datele binare” pentru a afla cum se scrie pe suportul de stocare din linia de comandă a shell-ului. Mediul grafic de birou GNOME vă oferă acces ușor prin meniu: „Locuri→Creator CD/DVD”.)

[5] Unele dintre aceste date nu pot fi regenerate introducând același șir de intrare în sistem.

[6] Dacă utilizați „~/.vimrc” în loc de „~/.vim/vimrc”, faceți înlocuirea corespunzătoare.