wiki/HowtoDUC.md

174 lines
4.7 KiB
Markdown

---
categories: utilities sysadmin storage
title: Howto Duc
...
* Documentation : <https://rawgit.com/zevv/duc/master/doc/duc.1.html>
[Duc](http://duc.zevv.nl) est un outil qui permet d'analyser l'espace disque en créant un index, que l'on pourra ensuite visualiser avec une interface texte ou ncurses, un graphique, une GUI ou en CGI.
## Installation
Un paquet est disponible à partir de Debian Stretch :
~~~
# apt install duc
~~~
## Utilisation
### Création de l'index
La première chose à faire est de créer un index, c'est la partie qui analyse l'espace disque pour ensuite l'afficher de différentes manières. Par défaut l'index sera créé dans `$HOME/.duc.db`, si l'on veut changer le chemin de l'index il faudra utiliser la variable d'environnement `DUC_DATABASE` ou spécifier le chemin avec `-d`.
L'index n'est pas forcément rattaché à un seul chemin, on peut en indexer autant qu'on veut :
~~~
$ duc index -d /tmp/duc.idx /var/
$ duc index -d /tmp/duc.idx /usr/
~~~
> *Note* : La génération de l'index peut être très longue et peut prendre de la place si vous avez beaucoup de données. Il est peut être intéressant de rajouter le paramètre `-p` pour suivre la progression et de vérifier que la partition soit suffisamment grande.
### Consulter l'index
#### Voir les informations de l'index
~~~
$ duc info -d /tmp/duc.idx
Date Time Files Dirs Size Path
2018-03-02 09:49:38 22.5K 2.4K 2.2G /var
2018-03-02 09:49:42 268.0K 24.1K 8.2G /usr
~~~
#### Lister le contenu de l'index
~~~
$ duc ls -d /tmp/duc.idx /usr
4.3G lib
3.0G share
606.2M bin
210.5M src
66.4M include
35.3M sbin
20.1M local
6.4M lib32
2.2M libexec
1.7M games
4.0K etc
$ duc ls -d /tmp/duc.idx /usr/bin/ | head
29.9M hkt
28.3M hokey
24.2M node
19.6M hot
17.0M shellcheck
15.7M mysql_embedded
14.7M fwbuilder
11.6M audacity
11.1M rawtherapee
10.4M qemu-system-x86_64
$ duc ls -d /tmp/duc.idx /var/log | head
197.2M atop
30.4M daemon.log.1
24.1M daemon.log
17.1M installer
5.4M syslog.1
2.7M messages.1
2.4M vbox-install.log
2.1M syslog
1.9M kern.log.1
1.7M ufw.log.1
~~~
#### Lister le contenu de l'index avec une interface ncurses
L'interface ncurses est semblable à celle de l'outil [ncdu](https://dev.yorhel.nl/ncdu). La touche `h` permettra d'afficher l'aide pour comprendre comment naviguer et interagir avec cette interface.
~~~
# duc ui -d /tmp/duc.idx /usr
~~~
![Interfaces ncurses](/duc.png)
#### Lister le contenu de l'index avec une interface graphique
Si on est sur un poste ayant un serveur X (ou en `ssh -X`), on pourra utiliser cette interface et utiliser la souris. Contrairement à l'interface ncurses on n'a pas d'aide en appuyant sur `h`, il faudra voir la liste des raccourcis dans le manuel.
~~~
$ duc gui -d /tmp/duc.idx /usr
~~~
![Le GUI de Duc](/duc2.png)
#### Lister le contenu de l'index en générant une image
On peut générer une image PNG, utile pour l'envoyer à quelqu'un d'autre par exemple :
~~~
$ duc graph -d /tmp/duc.idx -o /tmp/duc.png -l8 -s 1920 /usr
~~~
Les paramètres intéressants sont :
- `-l` nombre de sous-répertoires à afficher ;
- `-o` chemin de sortie de l'image ;
- `-s` largeur de l'image.
#### Lister le contenu de l'index avec un script CGI
Il suffit de créer ce script sh dans `/usr/lib/cgi-bin/duc.cgi`, de donner les bons droits et d'y accéder.
~~~
#!/bin/sh
/usr/bin/duc cgi -d /var/cache/duc.idx --list
~~~
~~~
# chmod 755 /usr/lib/cgi-bin/duc.cgi
# chown www-data: /usr/lib/cgi-bin/duc.cgi
# chmod 640 /var/cache/duc.idx
# chgrp www-data /var/cache/duc.idx
~~~
Il faudra ensuite utiliser un serveur Web comme [HowtoApache](Apache) pour y accéder en ajoutant ces directives :
~~~
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
</Directory>
ScriptAlias /duc /usr/lib/cgi-bin/duc.cgi
~~~
### Plomberie
Quelques options utiles :
- `-H` : Compter les mêmes inodes une seule fois ;
- `-e` <regex> : Exclure les fichiers correspondant (ne correspond que au nom du fichier et non de son PATH complet) ;
- `-p` : Affiche la progression de l'indexation.
- `-x` : Comme pour la commande *du*, limite au FS analysé
~~~
# duc index -p -H -e "*.log*" -d /backup/duc.idx /backup/jails
# duc index -p -H -d /backup/duc.idx /backup/jails
~~~
Pour exclure un répertoire (par exemple `backup/` contenant de nombreux fichiers), se placer dessus et faire :
~~~
# duc index -p -e "backup" -d duc.idx .
~~~
#### Cron
Il peut être judicieux de créer un cron pour faire une indexation journalière, très pratique quand couplé avec l'interface CGI.
~~~
30 6 * * * duc index -q -d /var/cache/duc.idx / && chmod 640 /var/cache/duc.idx && chgrp www-data /var/cache/duc.idx
~~~