Configuration de Gentoo Linux Optimisée pour un disque SSD
22/06/2014 - 13:37 by poneyL'utilisation d'un disque SSD apporte des perfomences radicalemnt différentes d'un disque classique.
Un exemple de disque SSD est le SSD Samsung 840 Pro avec une vitesse de lecture séquentielle de 540mb/s, écriture 520mb/s, durée de vie de 1.500.000h et du chiffrement à l'aide d'un crypto-processeur physique (Full Disk Encryption (FDE) hardware), d'après les spécifications du fabriquant.
L'inconvenient de ces disques à mémoire flash est leur durée de vie rapidement dégradable suite aux écritures. Et l'association d'une distribution Linux comme Gentoo n'arrange pas vraiment les choses à cause des répertoires temporaires de compilation et de synchronisation du portage.
L'idéal est de mettre en RAM (système de fichiers tmpfs) tous les dossiers où beaucoup d'écritures sont attendues.
Quelques ajustatements au niveau des paramètres de montage des partitions sont également à prévoir.
Montage tmpfs manuel
Pour monter une partition en RAM manuellement, rien de plus simple que d'utiliser la commande mount avec l'option -t tmpfs.
adeleda@tank ~ $ sudo mount -t tmpfs tmpfs mon_dossier_tmpfs/
adeleda@tank ~ $ mount -v | grep mon_dossier_tmpfs
tmpfs on /home/adeleda/mon_dossier_tmpfs type tmpfs (rw)
Les paramètres classiques de la commande mount peuvent être utilisés ; dans l'exemple suivant, le dossier mon_dossier_tmpfs est monté avec les paramètres :
- noexec : les fichiers avec les droits d'éxécution à l'intérieur ne sont pas directements exécutables
- size=1G : sa taille maximale ne dépassera pas 1G. Pratique pour éviter de swapper, surtout sur un disque SSD :-)
adeleda@tank ~ $ sudo mount -t tmpfs -o noexec,size=1G tmpfs mon_dossier_tmpfs/
adeleda@tank ~ $ mount -v | grep mon_dossier_tmpfs
tmpfs on /home/adeleda/mon_dossier_tmpfs type tmpfs (rw,noexec,size=1G)
Montage des partitions ext4 optimisées pour le SSD
Les paramètres suivants de la commande mount -o sont à considérer :
- noatime : empêche le système d'exploitation de mettre à jour l'entrée atime des fichiers lus. En effet, à chaque lecture d'un fichier cette entrée est réécrite, ce qui dégraderait à vitesse grand V le disque SSD.
- discard : permet d'envoyer des commandes TRIM au disque afin de libérer réellement un bloc inutilisé lorsqu'une donnée est supprimée. Pour comprendre cela, il faut savoir qu'un disque SSD n'est rien d'autre qu'un circuit électronique avec plein de mémoires flash soudées dessus. Le firmware du disque essaie de répartir de manière la plus optimisée les écritures dans telle ou telle flash. L'espace de stoquage des mémoires flash est divisé en blocs (de 128 à 512K) qui sont eux même divisés en pages (de 4 à 16K). Lorsque les données d'une page sont supprimées, puis réécrite à un autre moment, le firmware va lire le bloc, copier dans son cache, insérer la page à écrire puis réécrire tout le bloc à sa place. Cela dégrade les performances du disque 5 à 20 fois. Pour éviter cela, TRIM est implémentée de plus en plus dans les disques SSD et les systèmes d'exploitation savent en tirer partie afin d'informer le disque de la page exacte qui est libérée. L'envoi de commandes TRIM (option discard sous Linux) est supporté depuis le noyau 2.6.33, ainsi que Windows 7 et Windows 2008 R2.
Note : l'utilisation du paramètre discard pour monter une partition ext3 entrainerait son montage en lecture seule.
La commande pour un montage manuel de la partition racine deviendrait :
adeleda@tank ~ $ sudo mount -o noatime,discard /dev/sda1 /
Montage tmpfs permanent sous Gentoo
Pour rendre le montage tmpfs permanent (de façon propre), il est nécessaire de renseigner le fichier /etc/fstab. Un exemple de fichier /etc/fstab utilisant tmpfs pour les dossiers clé sous Gentoo :
adeleda@tank ~ $ cat /etc/fstab
/dev/sda1 / ext4 noatime,discard,user_xattr 0 1
/dev/sda3 /home ext4 noatime,discard,user_xattr 0 1
tmpfs /var/tmp/portage tmpfs size=12G 0 0
tmpfs /usr/portage tmpfs size=12G 0 0
tmpfs /usr/src tmpfs size=12G 0 0
tmpfs /tmp tmpfs size=12G 0 0
tmpfs /home/adeleda/.mutt/cache/ tmpfs size=500M 0 0
Pour les dossiers contenant des données réutilisables, une copie de sauvegarde peut être faite :
- /usr/src => /usr/src_backup
- /usr/portage => /usr/portage_backup
Puis, après un redémarrage, il suffit de synchroniser ces dossiers avec ceux montés en RAM comme suit :
adeleda@tank ~ $ sudo rsync -arq /usr/portage_backup/* /usr/portage/
adeleda@tank ~ $ sudo rsync -arq /usr/src_backup/* /usr/src/
Note : si lors de la compilation du noyau, la commande make install n'est pas utilisée, le fichier de configuration /usr/src/linux/.config risque de ne pas être copié dans /boot et si le dossier /usr/src n'est pas sauvegardé, ce fichier sera perdu lors d'un reboot ;-)
Mise en tmpfs XDG Cache
Le cache par défaut des applications tournant sous l'environnement graphique est ~/.cache, toutes ces applications lisent et écrivent constament des données dessus. Il est possible de le déplacer dans un tmpfs via l'édition du fichier de configufation /etc/env.d/30xdg-data-local pour y ajouter la ligne :
XDG_CACHE_HOME="/tmp/.cache"
Une fois l'édition terminée, ne pas oublier de lancer la commande :
adeleda@tank ~ $ sudo env-update