Bonjour
je viens poster le détail d'une manipulation que je viens de mettre en place sur ma machine.
Depuis un moment, je me dis que je dois faire quelque chose car je vois très bien que mon espace
disque est très très limite, puis j'en viens a faire moultes choses et je remets au lendemain
jusqu'à ce que la réalité me rappel a l'ordre.
C'est donc, ce matin, que j'allume et je n'arrive plus a grand chose après connection, pourquoi ?
C'est simple, plus d'espace sur ma racine, aucuns fichiers de log, temporaires, ne peuvent être écris.
Mais pas de panique, c'est juste un problème de place, reste a trouver une solution qui me convienne.
Problématique :
- Espace de la racine à 100%, écriture impossible donc système inutilisable.
Solution envisageable:
- Refaire une installation : pas question
- Migrer sur un autre disque : pas question
- Migrer sur une autre partition : impossible au vu de ma configuration(disque au taquet).
- Supprimer des logiciels : pas question
- je veux réutiliser ma session dans l'heure qui vient.
Il me faut donc une solution qui me permette de gagner de la place tout en conservant l'état actuel de ma racine
donc j'y vais pour gagner de la place.
Solution retenue :
-Compresser le répertoire le plus volumineux de ma racine afin de le monter par la suite.
-Je choisis squashfs, qui est un système de fichier en lecture seul, mais Aufs permet de créer des embranchement
donc la solution est retenue: squashfs + aufs.
Comment ça marche:
-un fichier squashfs est un système de fichier compressé (utilisé pour les iso live...), nous pouvons le monter afin de l'utiliser, le problème sera que
celui ci ne pourra être modifier en écriture, donc utilisé seul aucune installations ni modifications ne pourront être
faites ce qui n'aurait pas de sens.
Heureusement le noyau Linux intégrée le module aufs, aufs permet de créer ce que l'on appel des embranchements, donc dans notre cas
nous pourrons indiquer a aufs que le répertoire sqfs/usr/rw sera le répertoire de déstination de tout ce qui sera écris sur /usr
et que ce répertoire doit être vu comme faisant partie de /usr, une histoire de panier perçé 🙂
En finalité le système va donc voir usr comme un répertoire en read write, tout ce qui sera écris ne le sera donc pas sur le répertoire /usr mais sur son
embranchement sqfs/usr/rw.
Squashfs:
-Squashfs est un mode de compression qui conserve la totalité et la structure d'un système de fichier, il conserve les droits, les liens etc...
http://www.tldp.org/pub/Linux/docs/HOWTO/translations/fr/html-1page/SquashFS-HOWTO.html
-Sa performance de compression est remarquable, pour l'affirmer voici la taille de usr avant compression:
du -sh /usr
5,0G /usr
Et après compression:
du -sh /sqfs/squashfs/usr.sq
1,9G
Ç'est satisfaisant, un taux de compression de "100-(1.9/5*100)" 62 % !!!
Voici après toute manipulations éfféctués le résultat obtenus .
@R530-R730:df -h
Sys. fich. Taille Util. Dispo Uti% Monté sur
/dev/sda4 19G 14G 3,9G 79% /
udev 1,5G 4,0K 1,5G 1% /dev
tmpfs 599M 900K 598M 1% /run
none 5,0M 0 5,0M 0% /run/lock
none 1,5G 156K 1,5G 1% /run/shm
/dev/sda3 145G 132G 5,9G 96% /home
/dev/loop0 1,9G 1,9G 0 100% /sqfs/usr/ro
/usr 19G 14G 3,9G 79% /usr
Maintenant que j'ai expliqué la problématique et le résultat obtenue, nous allons rentrer dans les détails et les manipulations éfféctuées pour en arriver là.
ATTENTION :
CE POST EST LE DÉTAIL DE MANIPULATIONS EFFECTUÉES EN TOUTE CONNAISSANCES DE CAUSES
TOUTES LES MANIPULATIONS QUI SERONT INDIQUÉS LE SONT A TITRE INDICATIFS,
CE SONT DES ACTIONS ADMINISTRATIVES TOUCHANT DIRECTEMENT LE FONCTIONNEMENT DE VOTRE SYSTÉME.
SI VOUS NE SAVEZ PAS, NE COMPRENEZ PAS OU N'ÉTES PAS SUR DE CE QUE VOUS FAITES ABSTENEZ VOUS.
UNE RÉGLE D'OR EN INFORMATIQUE EST DE NE PAS REPRODUIRE CE QUE L'ON VOIT PAR CI PAR LÀ MAIS CE QUE L'ON A COMPRIS
ET VALIDÉ.
L'ADMINISTRATION D'UN SYSTÉME DEMANDE DE LA RIGUEUR ET ENGAGE LA RESPONSABILITÉ DE SON ADMINISTRATEUR.
JE M'ASSURE D'AVOIR TOUT DE MÊME UNE CONNECTION INTERNET ACTIVE, DANS LE CAS CONTRAIRE JE DOIS ME PROCURER LES PAQUETS SUIVANTS
- squashfs-tools
- apparmor-utils
Etapes de la manipulation:
-1) compression
-2) édition du fstab
-3) régler le problème d'apparmor et Netwok-manager
Arborescence a créer :
-1) /sqfs/squashfs/usr.sq
-2) /sqfs/usr/ro
-3) /sqfs/usr/rw
Actuellement, je n'ai plus de place pour installer quoi que ce soit, mais pourtant j'ai besoin de récuperer le paquet squashfs-tool, pas de problème, on va télécharger le paquet sur le home et l'utiliser a partir de celui ci:
Récupération de squashfs-tools
Préparation
cd $HOME
mkdir archives
sudo mount --bind archives/ /var/cache/apt/archives/
cd archives/
sudo apt-get install -d squashfs-tools
ar xv squashfs-tools_1%3a4.2-4build1_i386.deb ; tar xvpzf data.*
Création du squashfs
Il serait ridicule de créer le squashfs directement sur la racine vue que je n'ai plus de place, le home ne contiendrait pas le fichier,
plusieurs solutions peuvent être envisageable a chacun d'adapter mais dans mon cas j'ai quelques clés usb qui traînent.
J'en trouve une de 4 go qui n'est pas utilisé.
Alors j'y vais comme ça, je la branche et je la monte:
sudo mount /dev/sdb1 /mnt
Et je crée mon squashfs sur la dite clé usb:
cd usr/bin/
sudo ./mksquashfs /usr/ /mnt/usr.sq
Cela prend un certain temps, c'est normal et dépend de la taille du répertoire a compresser ainsi que du nombre de processeurs, performances etc...
ça doit afficher quelque chose qui ressemble à ça:
Parallel mksquashfs: Using 2 processors
Creating 4.0 filesystem on /mnt/usr.sq, block size 131072.
[====/ ] xxx/xxxx 8%
On peut démonter var/cache/apt/archives/
sudo umount var/cache/apt/archives/
Maintenant que le squashfs est crée dans /mnt donc dans ma clé usb il va bien falloir l'installer sur la racine.
A partir de ce moment là
AUCUNES ERREURS NE ME SONT PERMISES et je vais vous expliquer pourquoi.
Ce que je m 'apprête a faire c'est de supprimer entièrement /usr, sans quitter ma session, et pour cela je dois prendre la précaution
de me connecter en
ROOT et d'y RESTER !!!
Pourquoi ?
Lorsque l on se connecte en root, nous appelons le binaire sudo qui se trouve dans /usr/bin/, si je supprime usr et l'appel par la suite et bien niet et je suis foutu.
Les commandes cp,mkdir, mount se trouvent dans /bin, donc ça va le faire.
ATTENTION: NE FAITES RIEN SI VOUS NE COMPRENEZ PAS CE QUE VOUS FAITES ET N'ÉTES PAS SÛR, CECI POURRAIT
TOUT SIMPLEMENT DÉTRUIRE VOTRE SYSTÉME.
Et j'y vais, je supprime mon /usr tel le bourrin suicidaire mais pas tant que ça , car le fichier usr.sq crée sur ma clé usb est une sauvegarde de usr que je m'apprete a supprimer,
même si il y a une mauvaise manipulation je peux restaurer via un live par exemple.
sudo -s
rm -R /usr/*
Voilà mon /usr est vide, j'ai gagné 5 go sur ma racine et je peux importer mon usr.sq sans problème.
Mais avant quelques créations afin d'avoir un système de fichier cohérent:
Création des répertoires requis:
cd /
mkdir sqfs
mkdir -p sqfs/usr/ro
mkdir sqfs/usr/rw
mkdir sqfs/squashfs/
On copie:
cp /mnt/usr.sq /sqfs/squashfs/
reste plus qu'a monter tout ce que nous venons de méttre en place et pour cela nous allons éditer le fichier /etc/fstab:
echo "/sqfs/squashfs/usr.sq /sqfs/usr/ro squashfs loop,ro 0 0" >> /etc/fstab
echo "usr /usr aufs udba=reval,br:/sqfs/usr/rw:/sqfs/usr/ro 0 0" >> /etc/fstab
Il n'y'a plus qu'a monter les nouvelles règles que nous avons ajouté dans le fstab
mount -a
on control:
mount
/dev/sda4 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/sda3 on /home type ext4 (rw)
gvfs-fuse-daemon on /home/xxxx/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=xxxx)
/dev/sdb1 on /mnt type vfat (rw)
/sqfs/squashfs/usr.sq on /sqfs/usr/ro type squashfs (ro)
/usr on /usr type aufs (rw,udba=reval,br:/sqfs/usr/rw:/sqfs/usr/ro)
usr est bien monté, y'a t'il quelque chose dedans ?
root@R530-R730:/# ls usr/
bin include lib32 sbin src
games lib local share
C'est bon on peut donc quitter root:
exit
Les problèmes a corriger, Apparmor:
-Tout pourrait avoir l'air de fonctionner a merveille, mais si nous ne faisons rien Network-Manager, Cups et d'autres
services ne fonctionneront pas, parce que Apparmor n'est pas penser et coder pour fonctionner avec Aufs.
En effet celui ci va chercher les librairies dans le répertoire sqfs/usr/ro au lieu de /usr et a des régles
bien définis sur les droits de ces librairies qui si elles sont en read only apparmor n'est pas content.
Mais heureusement Apparmor nous propose tout de même quelques outils pour l'administrer et c'est ce que nous allons faire.
Pour cela il va falloir utiliser le paquet apparmor-utils.
C'est super car maintenant je peux a nouveau installer des logiciels sur mon système
sudo apt-get install apparmor-utils
Passons maintenant a la configuration d'apparmor:
Liste des service pris en charges :
sudo aa-status
Libérons la gestion de network-manager:
aa-complain dhclient3
Libérons la gestion de cups (imprimantes)
aa-complain cupsd
Libérons la gestion du serveur mysql (j'ai un apache locale avec mysql)
aa-complain mysqld
Libérons la gestion d'evince (je sais pas pourquoi il est géré pas apparmor mais bon...)
aa-complain evince
Il reste plus qu'a rebooter, et a terminer d'écrire ce post depuis mon installation et voici au final ce que ça donne :
mount:
/sqfs/squashfs/usr.sq on /sqfs/usr/ro type squashfs (ro)
/usr on /usr type aufs (rw,udba=reval,br:/sqfs/usr/rw:/sqfs/usr/ro)
Le montage du squashfs et de l'embranchement aufs est bien là.
J'ai bien ma connection internet, mon serveur cups est bien actif sur
http://localhost:631 .
Nous arrivons à la fin de la manipulation de la récupération d' espace disque sur une racine Ubuntu,
nous avons récupéré pour mon cas 3.1 giga octets d'espace ce qui n'est pas négligeable.
On aurait très bien pu se dire que au vu du prix des clés usb aujourd'hui, que de
transférer /usr sur une clé dédié aurait été bien aussi, mais je ne souhaitais pas me déplacer ni investir en ce week-end et surtout récupérer mon espace de travail au plus vite.