Unable to update Let's Encrypt certificate ("no space left" error)

Bonjour à tous!

Tout d’abord merci à tous les contributeurs sur le forum, malheureusement cette fois ci je en trouve pas de réponse à mon problème en fouillant les archives. J’espère donc que quelqu’un saura me mettre sur la bonne voie pour régler ça !

Mon serveur YunoHost

Matériel: Olinuxino A20 LIME2 avec carte SD Transcend 32GB
Version de YunoHost: 3.6.5.3
J’ai accès à mon serveur : En SSH | Par la webadmin | En direct avec un clavier/écran si nécessaire
Apps installées: Wordpress, Kanboard, Wallabag, Redirect, Roundcube (je ne m’en sers pas)

Description du problème

Il y a quelques jours, je me suis aperçu que mon certificat Let’s Encrypt était expiré (alors qu’il devrait se renouveler automatiquement), j’ai donc essayé de le renouveler manuellement depuis la webadmin.
J’ai obtenu cette erreur:

Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/moulinette/interfaces/api.py", line 439, in process
    ret = self.actionsmap.process(arguments, timeout=30, route=_route)
  File "/usr/lib/python2.7/dist-packages/moulinette/actionsmap.py", line 523, in process
    return func(**arguments)
  File "/usr/lib/moulinette/yunohost/domain.py", line 241, in domain_cert_renew
    return yunohost.certificate.certificate_renew(domain_list, force, no_checks, email, staging)
  File "/usr/lib/moulinette/yunohost/certificate.py", line 398, in certificate_renew
    operation_logger.error(msg)
  File "/usr/lib/moulinette/yunohost/log.py", line 461, in error
    return self.close(error)
  File "/usr/lib/moulinette/yunohost/log.py", line 493, in close
    self.flush()
  File "/usr/lib/moulinette/yunohost/log.py", line 403, in flush
    with open(self.md_path, 'w') as outfile:
IOError: [Errno 28] No space left on device: '/var/log/yunohost/categories/operation/20210305-082606-letsencrypt_cert_renew-colinchibois.com.yml'

En fouillant le forum, j’ai trouvé un post qui parlait d’une erreur similaire mais dans d’autres circonstances.
J’ai donc essayé la commande df -h pour voir l’état de mon stockage, et je n’ai pas l’impression qu’une quelconque partition soit saturée.

Filesystem      Size  Used Avail Use% Mounted on
udev            434M     0  434M   0% /dev
tmpfs           101M   12M   89M  12% /run
/dev/mmcblk0p1   29G  2.8G   26G  10% /
tmpfs           501M     0  501M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           501M     0  501M   0% /sys/fs/cgroup
tmpfs           501M   12K  501M   1% /tmp
/dev/zram0       49M   33M   12M  74% /var/log
tmpfs           101M     0  101M   0% /run/user/0

Je ne sais pas si c’était une très bonne idée mais j’ai tenté un update des packages via la webadmin, cela n’a pas fonctionné et j’ai obtenu la même erreur “No space left on device”. Je suppose donc que mon problème n’est pas spécifique au certificat Let’s Encrypt mais d’ordre plus général.

Est-ce que le problème peut venir de ma carte SD? Auriez-vous des pistes pour identifier l’origine du problème (et le régler par la même occasion :upside_down_face: )

Merci !
Colin.

Salut Colin,

Moi je dirais que ça peut venir de la carte SD.
As tu moyen de transférer l’image de la carte actuelle sur une carte différente histoire de tester ?

A +

Merci pour ton retour, je vais essayer de la cloner sur une autre carte de la même taille pour voir

Juste comme ça, que donne un
apt update && apt upgrade
?

Alors, voici les manips que j’ai faites aujourd’hui:

  • J’ai éteint mon serveur
  • j’ai cloné la carte SD sur un autre ordi
  • j’ai remis la carte SD en place, rallumé la bête et testé via ssh un apt update && apt upgrade, toujours la même erreur de “No space left on device”, le détail est ici (l’erreur est la ligne 702) https://gist.github.com/superColson/3217ab7cb25dbebc6e220478f1a197ce
  • j’ai utilisé le clone de ma carte SD pour faire une nouvelle carte, j’ai utilisé une carte de même taille et théoriquement fonctionnelle (32GB Sandisk Ultra)
  • j’ai redémarré mon serveur avec cette nouvelle carte, le clone fonctionne bien à priori mais le problème reste absolument le même avec cette erreur “No space left on device”

Des idées pour aller un peu plus loin dans l’investigation ?

Ca ne semble pas à voir avec la carte SD … le ficher qu’il essaye d’écrire est dans /var/log et on voit que dans df -h :

/dev/zram0       49M   33M   12M  74% /var/log

En fait armbian (le systeme similaire à Debian pour carte ARM) a un systeme qui s’appelle zram pour mettre les logs dans la RAM plutot que sur le disque (mais synchronise de temps en temps) avec l’idée de limiter les ecritures pour preserver la durée de vie de la carte SD

Visiblement il y a un truc etrange qui se passe puisqu’il y a quand meme un peu d’espace bien que tres faible (12MB) … ca devrait permettre tout de meme d’ecrire un fichier de log mais qui sais, peut-être que cet espace libre fluctue ou qu’il y a d’autres contraintes … potentiellement tu peux tester de creer un fichier bidon dans /var/log/kekchose et voir si ca marche…

Merci pour ton aide @Aleks , je viens d’essayer de créer un fichier texte dans /var/log avec nano et j’obtiens la même erreur “no space left on device”.
Peut-être une piste: j’ai utilisé la commande yunohost log list et ça m’a sorti une liste d’environ 6000 logs (c’était long :slight_smile: ), visiblement tous les logs depuis l’installation de Yunohost ont été conservés.
La majeure partie des logs sont: Update the IP associated with your YunoHost subdomain 'michelchrome.noho.st'
Si tous ces logs sont conservés dans la zram, c’est peut être la source du problème ? Y a t’il un moyen de cleaner les logs ? Je n’ai pas trouvé dans --help

Ok j’ai suivi mon instinct du coup :wink:
J’ai fait un petit script python pour supprimer tous les fichiers de logs concernant la mise a jour de l’IP pour mon domaine en noho.st.
Ca m’a fait récupérer environ 60MB sur la partition zram et ça a résolu mon problème de “no space left on device”, donc la zram était bien saturée de fichiers à cause de ces logs.
suite à ça j’ai pu faire un apt update && apt upgrade pour passer à la version 3.8.5.9, et après un reboot mon certificat Let’s Encrypt s’était renouvelé tout seul ! :ok_hand:
Merci pour les pistes, très content d’avoir résolu le problème comme un grand!
Si au passage vous avez des idées pour éviter que ce genre de problèmes liés aux logs se reproduisent, je suis preneur.

1 Like

Erf ouaip c’est tout de même curieux, je doute que ta situation soit un cas isolé (vu que j’imagine que le fait que tu n’ai que 50 MB pour /var/log, je pense que c’est configuré par armbian de base). … 50 MB pour /var/log/ c’est vraiment une bombe à retardement …

Par contre pas sur de savoir pourquoi df -h disais qu’il y’avait quand meme 12 MB de libre mais bref

Un script python ? :thinking: Il suffisait pas de faire genre heu rm /var/log/yunohost/categories/operations/*dyndns*.* ou un truc du genre ? :thinking:

ahah si je suis sûr que ta technique aurait fonctionné à merveille mais je connaissais pas la commande a utiliser et je ne savais pas non plus qu’on pouvait faire du pattern matching aussi simplement.

This topic was automatically closed 15 days after the last reply. New replies are no longer allowed.