diff options
-rw-r--r-- | exp/Makefile | 2 | ||||
-rwxr-xr-x | exp/exp.sh | 9 | ||||
-rw-r--r-- | pdf/assets/summary.daily.17.tex | 19 | ||||
-rw-r--r-- | pdf/assets/summary.daily.5.tex | 7 | ||||
-rw-r--r-- | pdf/assets/summary.weekly.17.tex | 19 | ||||
-rw-r--r-- | pdf/doc.tex | 84 |
6 files changed, 102 insertions, 38 deletions
diff --git a/exp/Makefile b/exp/Makefile index 673b1b0..70682f2 100644 --- a/exp/Makefile +++ b/exp/Makefile @@ -50,7 +50,7 @@ GITC := git -C $(REPO_PATH) SPACE := $() $() DNADIRS := $(DNA_4K) $(DNA_8K) DNAEXPORT := $(DNADIRS:%=%_export) -DATADIRS := $(DNADIRS) $(DNAEXPORT) $(DIFFS) $(NOPACK) $(BORG) $(TARGZ) $(REAL) +DATADIRS := $(DNAEXPORT) $(DIFFS) $(NOPACK) $(BORG) $(TARGZ) $(REAL) SIZEFILES := $(DATADIRS:%=%.size) SUMMARY := summary.$(RANGE).$(MAX_VERSION) @@ -56,6 +56,15 @@ then # Init borg dir borg init -e none $BORG fi +if [ -n "$DNA_PARAMS" ] +then + # Clean dna backups for this version + while read name flags + do + rm -rf $name + done < $DNA_PARAMS +fi + # "empty tree" commit prev="4b825dc642cb6eb9a060e54bf8d69288fbee4904" diff --git a/pdf/assets/summary.daily.17.tex b/pdf/assets/summary.daily.17.tex new file mode 100644 index 0000000..17ba98a --- /dev/null +++ b/pdf/assets/summary.daily.17.tex @@ -0,0 +1,19 @@ +46 080 540 & 46 021 380 & 47 011 621 & 63 237 214 & 47 582 831 & 201 468 483 \\ +8 160 & 13 260 & 2 625 & 88 673 & 47 581 355 & 201 464 200 \\ +6 453 540 & 8 091 660 & 3 270 798 & 26 668 800 & 48 698 909 & 205 998 038 \\ +205 020 & 108 120 & 496 & 24 840 & 48 699 087 & 205 998 035 \\ +214 200 & 121 380 & 1 475 & 318 054 & 48 699 763 & 205 998 379 \\ +255 000 & 162 180 & 3 271 631 & 107 650 & 47 591 733 & 201 464 426 \\ +393 720 & 358 020 & 99 337 & 2 758 950 & 47 582 211 & 201 412 617 \\ +67 320 & 78 540 & 127 793 & 561 940 & 47 578 053 & 201 407 077 \\ +155 040 & 75 480 & 19 221 & 10 035 & 47 594 809 & 201 459 655 \\ +286 620 & 205 020 & 250 581 & 1 203 017 & 47 721 093 & 202 024 780 \\ +39 780 & 38 760 & 19 555 & 550 478 & 47 726 206 & 202 033 937 \\ +159 120 & 80 580 & 203 & 45 564 & 47 726 209 & 202 033 922 \\ +182 580 & 115 260 & 12 419 & 284 765 & 47 727 829 & 202 049 528 \\ +13 260 & 14 280 & 5 823 & 76 009 & 47 731 771 & 202 057 683 \\ +23 460 & 28 560 & 13 370 & 528 744 & 47 735 296 & 202 070 421 \\ +27 540 & 33 660 & 10 837 & 374 954 & 47 736 886 & 202 070 084 \\ +68 340 & 81 600 & 69 707 & 498 919 & 47 770 410 & 202 207 821 \\ +\hline +54 633 240 & 55 627 740 & 54 187 492 & 97 338 606 & 813 484 451 & 3 443 219 086 \\ diff --git a/pdf/assets/summary.daily.5.tex b/pdf/assets/summary.daily.5.tex deleted file mode 100644 index 5ff7548..0000000 --- a/pdf/assets/summary.daily.5.tex +++ /dev/null @@ -1,7 +0,0 @@ -22 377 & 19 333 & 13 260 & 12 240 & 10 147 & 14 601 & 10 739 & 147 538 \\ -2 374 & 3 138 & 3 060 & 4 080 & 1 768 & 2 573 & 11 304 & 149 715 \\ -2 116 & 2 747 & 3 060 & 4 080 & 867 & 2 681 & 11 611 & 150 955 \\ -3 012 & 2 917 & 4 080 & 4 080 & 869 & 2 359 & 12 111 & 152 087 \\ -5 210 & 5 430 & 5 100 & 6 120 & 4 373 & 6 020 & 14 192 & 165 312 \\ -\hline -35 089 & 33 565 & 28 560 & 30 600 & 18 024 & 28 234 & 59 957 & 765 607 \\ diff --git a/pdf/assets/summary.weekly.17.tex b/pdf/assets/summary.weekly.17.tex new file mode 100644 index 0000000..82a6567 --- /dev/null +++ b/pdf/assets/summary.weekly.17.tex @@ -0,0 +1,19 @@ +46 086 660 & 46 003 020 & 47 003 541 & 63 221 561 & 47 569 854 & 201 412 617 \\ +701 760 & 820 080 & 395 080 & 6 358 049 & 47 719 963 & 202 057 683 \\ +6 293 400 & 7 983 540 & 2 994 599 & 25 581 927 & 48 699 737 & 205 995 565 \\ +206 040 & 109 140 & 407 & 50 816 & 48 699 759 & 205 995 603 \\ +225 420 & 142 800 & 8 679 & 401 380 & 48 699 627 & 205 997 073 \\ +1 299 480 & 1 707 480 & 579 422 & 6 943 226 & 48 734 056 & 206 089 868 \\ +952 680 & 1 248 480 & 360 710 & 4 799 959 & 48 837 441 & 206 640 167 \\ +1 425 960 & 1 831 920 & 738 359 & 4 983 830 & 48 887 777 & 206 826 648 \\ +1 770 720 & 2 091 000 & 1 389 502 & 7 767 438 & 49 298 535 & 209 320 664 \\ +479 400 & 727 260 & 146 129 & 2 899 284 & 49 332 106 & 209 471 170 \\ +168 300 & 235 620 & 47 436 & 1 385 569 & 49 336 133 & 209 495 372 \\ +134 640 & 236 640 & 37 183 & 1 808 602 & 49 337 222 & 209 501 585 \\ +90 780 & 122 400 & 23 924 & 1 555 868 & 49 337 681 & 209 507 160 \\ +3 088 560 & 3 953 520 & 1 404 256 & 11 037 483 & 49 932 666 & 211 870 188 \\ +4 987 800 & 6 165 900 & 2 326 692 & 17 577 030 & 50 210 539 & 212 932 833 \\ +993 480 & 1 378 020 & 304 617 & 6 594 518 & 50 297 457 & 213 246 213 \\ +684 420 & 900 660 & 258 512 & 4 016 392 & 50 398 693 & 213 642 553 \\ +\hline +69 589 500 & 75 657 480 & 58 019 048 & 166 982 932 & 835 329 246 & 3 540 002 962 \\ diff --git a/pdf/doc.tex b/pdf/doc.tex index 058499d..74be025 100644 --- a/pdf/doc.tex +++ b/pdf/doc.tex @@ -629,25 +629,24 @@ Celui-ci ne sera pas synthétisé en \ac{adn}, car les données qu'il contient peuvent être recalculées à partir du contenu des chunks. -\subsection{Ajouter une version au repo} - -Pour ajouter une nouvelle version, on fait un \emph{commit} dans le repo. -Le repo doit être présent lorsque l'on veut faire un commit, -car le pipeline de compression tire parti des données existantes. - -Au tout début du commit, avant l'application du pipeline de compression, -DNA-Backup fait un listage des fichiers du dossier source. -Les données de ces fichiers sont ensuite concaténées en un segment virtuel continu. -De cette manière, si la taille d'un fichier n'est pas aligné sur la taille d'un chunk, -les données du fichier suivant y seront ajoutées, au lieu d'avoir à le combler avec des bits de bourrage. -Les métadonnées (chemin, taille, etc~\textellipsis) ne sont pas ajoutées dans ce segment. -Elles sont stockées à part, car leur petite taille par rapport aux données nous offre lors d'une restauration -la possibilité de rapidement les récupérer. -En effet, les métadonnées nous permettent à elles seule d'obtenir une arborescence de dossiers et de fichiers que l'on peut parcourir. - \subsection{L'export vers le DNA-Drive} -On imagine le \emph{DNA-Drive} comme un segment de \emph{pools} (Figure~\ref{fig:data-layout}) +Au lieu de voir le DNA-Drive comme une grille, +on l'imagine comme une liste de \emph{pools} à une seule dimension (Figure~\ref{fig:data-layout}). +De cette manière on peut répartir l'espace de stockage +entre les deux principaux segments de données de DNA-Backup, +les chunks et les métadonnées (recipe + files). +Comme on peut le remarquer sur la Figure~\ref{tab:repo-data-distribution}, +les métadonnées ont une taille bien inférieure à celle de l'ensemble des chunks, +en particulier lorsque les fichiers sont grands. +Cependant, il n'est pas possible de savoir à l'avance exactement +quelle proportion sera utilisée par les métadonnées, +car leur taille peut varier en fonction d'un certain nombre de paramètres +(type de fichiers sauvegardés, fréquence de sauvegarde, quantité et taille des fichiers, etc~\textellipsis). +Pour garantir une utilisation maximale de l'espace disponible, +on fait démarrer ces deux segments chacun à une extrémité du DNA-Drive +et on les laisse grandir l'un vers l'autre, +à la manière de la \emph{pile} et du \emph{tas} d'un processus. \begin{figure}[ht] \centering @@ -678,10 +677,41 @@ On imagine le \emph{DNA-Drive} comme un segment de \emph{pools} (Figure~\ref{fig \end{tikzpicture} -\caption{Disposition des données} +\caption{Disposition des données.} \label{fig:data-layout} \end{figure} +Le tout premier pool du DNA-Dire (numéro 0) est réservé aux \emph{header} des versions +et aux métadonnées globales du repo. + +Pour chaque version, il faut conserver la taille que chacun des trois segments +(\verb|chunks|, \verb|recipe| et \verb|files|). +De la même manière qu'il serait impossible de savoir +à quel fichier appartient une donnée sans la liste de fichiers, +il serait impossible sans ces informations, de savoir +à quelle version et à quel segment de données appartient une track. + +En ce qui concerne les métadonnées du repo, +un \emph{superblock} serait ajouté dans la toute première track du premier pool. +Celui-ci contiendrait les valeurs des paramètres de DNA-Backup, +à savoir principalement la taille des chunks, mais aussi les paramètres de la fonction de sketch, +l'algorithme utilisé pour la compression utilisé, celui pour les deltas, etc~\textellipsis + +Le header d'une version ne comptant que trois valeurs numériques, il ne remplira jamais une track. +Pour éviter de gâcher l'espace restant des tracks de version, +DNA-Backup le remplit avec le contenu des segments de métadonnées (\verb|recipe| + \verb|files|) +jusqu'à ce qu'il soit plein ou que toutes les métadonnées aient été écrites. +S'il reste encore des métadonnées, elles sont écrites à l'endroit prévu initialement. + +L'export est actuellement réalisé dans un dossier, dans lequel 96~fichiers +représentant chacun un pool sont créés et remplis avec les données du repo. +Les écritures sont alignées sur la taille du track, laquelle est configurable. +Le repo n'a pas réellement de connaissances de ces valeurs en dehors de l'export. +DNA-Backup est donc en grande partie indépendant du DNA-Drive +et pourrait être utilisé avec d'autres supports de stockages, +ou même en utilisant uniquement le repo, +à la manière d'un logiciel de sauvegardes incrémentales classique. + \subsection{Restaurer depuis le DNA-Drive} @@ -1001,9 +1031,7 @@ Lecture de la zone correspondant à la dernière version \\ % TODO: use real data \begin{table*}[ht] \centering -\begin{tabularx}{\textwidth}{RRRRRRRR} -\textbf{Repo 4k} & -\textbf{Repo 8k} & +\begin{tabularx}{\textwidth}{@{}RRRRRR} \textbf{DNA 4k} & \textbf{DNA 8k} & \textbf{Git diffs} & @@ -1011,7 +1039,7 @@ Lecture de la zone correspondant à la dernière version \\ \textbf{Tar.gz} & \textbf{Taille réelle} \\ \hline -\input{assets/summary.daily.5.tex} +\input{assets/summary.daily.17.tex} \end{tabularx} \caption{Commits journaliers} \label{tab:commits-daily} @@ -1020,9 +1048,7 @@ Lecture de la zone correspondant à la dernière version \\ % TODO: use real data \begin{table*}[ht] -\begin{tabularx}{\textwidth}{RRRRRRRR} -\textbf{Repo 4k} & -\textbf{Repo 8k} & +\begin{tabularx}{\textwidth}{@{}RRRRRR} \textbf{DNA 4k} & \textbf{DNA 8k} & \textbf{Git diffs} & @@ -1030,7 +1056,7 @@ Lecture de la zone correspondant à la dernière version \\ \textbf{Tar.gz} & \textbf{Taille réelle} \\ \hline -\input{assets/summary.daily.5.tex} +\input{assets/summary.weekly.17.tex} \end{tabularx} \caption{Commits hebdomadaires} \label{tab:commits-weekly} @@ -1039,9 +1065,7 @@ Lecture de la zone correspondant à la dernière version \\ % TODO: use real data \begin{table*}[ht] -\begin{tabularx}{\textwidth}{RRRRRRRR} -\textbf{Repo 4k} & -\textbf{Repo 8k} & +\begin{tabularx}{\textwidth}{@{}RRRRRR} \textbf{DNA 4k} & \textbf{DNA 8k} & \textbf{Git diffs} & @@ -1049,7 +1073,7 @@ Lecture de la zone correspondant à la dernière version \\ \textbf{Tar.gz} & \textbf{Taille réelle} \\ \hline -\input{assets/summary.daily.5.tex} +\input{assets/summary.daily.17.tex} \end{tabularx} \caption{Commits Mensuels} \label{tab:commits-monthly} |