Limiter les écritures sur disque SSD

Bonsoir,

Comment faire pour limiter le nombre de lectures et d’écritures sur un disque SSD.

J’ai déjà placé les fichiers temporaires ainsi que le cache de Firefox en mémoire vive

J’ai deux partitions ext4; une pour / et une autre pour /home.

Que pourrais-je faire d’autre. Je m’inquiète surtout pour les logs; surtout que mon firewall contient beaucoup de règles avec des logs.

Voici mon script iptables. Dois-je enlever quelques règles de LOG pour limiter les écritures?

#table filter
iptables -t filter -F
iptables -t filter -X
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT
#
#table nat
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P INPUT ACCEPT
iptables -t nat -P OUTPUT ACCEPT
#
#table mangle
iptables -t mangle -F
itpables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P INPUT ACCEPT
#
#table raw
iptables -t raw -F
itpables -t raw -X
iptables -t raw -P OUTPUT ACCEPT
iptables -t raw -P PREROUTING ACCEPT
#
#logger les paquets droppés
iptables -N LOG_DROP
iptables -A LOG_DROP -j LOG --log-prefix "INPUT:DROP:" --log-level 6
iptables -A LOG_DROP -j DROP
# DROP paquets TCP NEW autres que SYN + log
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j LOG_DROP
# DROP paquets invalides +log
iptables -A INPUT -m conntrack --ctstate INVALID -j LOG_DROP
# DROP NULL +log
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j LOG_DROP
# DROP XMAS +log
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j LOG_DROP
# DROP SYNFIN +log
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j LOG_DROP
# DROP FIN scan +log
iptables -A INPUT -p tcp --tcp-flags ALL FIN -j LOG_DROP
# DROP SYN RST +log
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOG_DROP
# DROP NMAP XMAS +log
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j LOG_DROP
# DROP NMAP +log
iptables -A INPUT -p tcp --tcp-flags ALL URG,PSH,SYN,FIN -j LOG_DROP
# DROP port scans +log
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j LOG_DROP
#autorise lo +log
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j LOG_DROP
iptables -A INPUT ! -i lo -s 127.0.0.0/8 -j LOG_DROP
iptables -A INPUT -i lo -j ACCEPT
#
#maintenir les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#
# autoriser connexions sur certains ports avec limite de connexions entrantes par seconde (ex: ssh) + logger les connexions acceptées
#iptables -N LOG_ACCEPT
#iptables -A LOG_ACCEPT -j LOG --log-prefix "INPUT:ACCEPT:" --log-level 6
#iptables -A LOG_ACCEPT -j ACCEPT
#iptables -A INPUT -p tcp --dport 22 --state NEW -m limit --limit 1/s --limit-burst 3 -j LOG_ACCEPT
#logger les paquets avec un préfixe différent de celui des logs de paquets invalides explicitement bloqués
iptables -A INPUT -j LOG --log-prefix "INPUT:end of chain:" --log-level 6

Merci

A quoi ça sert les logs si t’as pas de problème? Tu les consultes quand exectement?

On peut se passer de tout ou partie et remettre si on croit avoir un problème

1 J'aime

Bonjour,

Tu parle d’écriture tu parle de SSD mais en faite que recherche tu? Que craint tu?

Pourquoi limiter le nombre d’écriture?

Je rejoint Grandtoubab dans sa pertinence.

Je consulte les logs rarement, en fait seulement quand j’ai un problème, environ 1 à 2 fois par mois.

@grantoubab
Dans le lien que tu m’as donné, il inscrit que la configuration se fait dans le fichier /etc/rsyslog.conf mais dans ledit fichier, il est inscrit " Default logging rules can be found in /etc/rsyslog.d/50-default.conf". Ne vaudrait-il pas mieux changer les règles dans ce fichier au lieu du /etc/ rsyslog.conf?

Je cherche à diminuer l’usure du disque dur SSD.

Ok, à tu enlevé la partition Swap ?

à tu effectué cette opération (c’est un exemple) : https://geekeries.de-labrusse.fr/?p=1806
sur ta debian?

par ce que là je suis curieux de savoir si un SSD risque de claquer à cause des logs?! Je serais surpris
Par contre il est vrai que si tu dispose de beaucoup de RAM ton SSD ne risque rien si ta RAM n’est jamais utilisée au dela de 60 % .

Pour ma part je n’ai pas de partition SWAP et ma RAM peut être utilisé a 90%.

Cela évite trop d’écriture!

1 J'aime

oui ça evite de perdre ses réglages perso en cas de relivraison du paquet.
je les ai mis dans un fichier /etc/rsyslog.d/rsyslog-perso.conf

#  /etc/rsyslog.conf	Configuration file for rsyslog.
#
#			For more information see
#			/usr/share/doc/rsyslog-doc/html/rsyslog_conf.html
###############
#### RULES ####
###############

#
# First some standard log files.  Log by facility.
#
#auth,authpriv.*			/var/log/auth.log
# ne garder que le niveau err et supérieur
#*.*;auth,authpriv.none		-/var/log/syslog
#*.err;auth,authpriv.none	-/var/log/syslog
#cron.*				/var/log/cron.log
#daemon.*			-/var/log/daemon.log
# tous les messages sont dans syslog pas vraiment besoin de kern.log
#kern.*				-/var/log/kern.log
#lpr.*				-/var/log/lpr.log
# voir plus bas
#mail.*				-/var/log/mail.log
#user.*				-/var/log/user.log

#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
mail.info			-/var/log/mail.info
mail.warn			-/var/log/mail.warn
mail.err			/var/log/mail.err

# Some "catch-all" log files.
#
# je ne fais pas de debug
#*.=debug;\
#	auth,authpriv.none;\
#	news.none;mail.none	-/var/log/debug
#
# pas besoin de tout journaliser dans messages
#*.=info;*.=notice;*.=warn;\
#	auth,authpriv.none;\
#	cron,daemon.none;\
#	mail,news.none		-/var/log/messages

#
# Emergencies are sent to everybody logged in.
#
*.emerg				:omusrmsg:*

je ne me sers que de journalctl sans conservation

@grandtoubab
Donc, je crée un fichier “/etc/rsyslog.d/rsyslog-perso.conf”, j’y copie les RULES et je redémarre le service comme ceci “systemctl restart rsyslog.service”.
Le problème, s’ il y en a un, c’est lorsque je vérifie avec la commande “systemctl status systemd-journald” le retour est le même qu’avant les nouveaux réglages. Est-ce normal?

Pour ce qui est du systemd, si j’ai bien compris, je l’ai mis en ram.

df -hT | grep /run
tmpfs            tmpfs      1,6G    1,4M  1,6G   1% /run
tmpfs            tmpfs      5,0M    4,0K  5,0M   1% /run/lock
tmpfs            tmpfs      1,6G     16K  1,6G   1% /run/user/1000

Tu veux dire en ram ou c’est un autre réglage?

Oui, je n’ai pas de partition swap et j’ai 16GB de mémoire ram.

en RAM “volatil”

cat /etc/rsyslog.conf
#  /etc/rsyslog.conf	Configuration file for rsyslog.
#
#			For more information see
#			/usr/share/doc/rsyslog-doc/html/rsyslog_conf.html


#################
#### MODULES ####
#################

module(load="imuxsock") # provides support for local system logging
module(load="imklog")   # provides kernel logging support
#module(load="immark")  # provides --MARK-- message capability

# provides UDP syslog reception
#module(load="imudp")
#input(type="imudp" port="514")

# provides TCP syslog reception
#module(load="imtcp")
#input(type="imtcp" port="514")


###########################
#### GLOBAL DIRECTIVES ####
###########################

#
# Use traditional timestamp format.
# To enable high precision timestamps, comment out the following line.
#
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

#
# Set the default permissions for all log files.
#
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022

#
# Where to place spool and state files
#
$WorkDirectory /var/spool/rsyslog

#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf


###############
#### RULES ####
###############
#
# voir /etc/rsyslog.d/rsyslog-perso.conf

Avec la commande lsof on peut voir si des fichiers sont ouverts
https://manpages.debian.org/buster/lsof/lsof.8.en.html

identifier le process

ps -edf | grep journal

Exemple

root         253       1  0 08:08 ?        00:00:01 /lib/systemd/systemd-journald
ps -edf | grep log

Exemple

root         601       1  0 08:08 ?        00:00:00 /usr/sbin/rsyslogd -n -iNONE

puis interroger les fichiers ouverts par le process avec lsof -p pid

Exemple

sudo lsof -p 253
sudo lsof -p 601

Si tu veux savoir qui sollicite ton /home

 sudo lsof | grep /home

OK merci.

Malheureusement, lorsque je lance la commande sudo lsof -p, j’ai un message d’erreur

lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
  Output information may be incomplete.

Dans le lien que tu m’as donné, il propose de ne stocker qu’à partir des messages d’avertissements et de créer un fichier (reduction.conf) des paramètres personnalisés dans /etc/systemd/journald.conf.d. Mais je n’ai pas de dossier journald.conf.d .Est-ce que je peux mettre le fichier reduction.conf directement dans le dossier /etc/systemd/?

faut mettre un numéro de process derriere l’option -p

pour créer le répertoire afin d’y mettre le fichier d’option

cd /etc/systemd/
sudo mkdir journald.conf.d

Oui oui je sais, j’ai simplement oublié de mettre un nombre dans mon post précédent.

sudo lsof -p 783
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF           NODE NAME
rsyslogd 783 root  cwd    DIR                8,2     4096          2 /

OK. Merci

J’ai une petite question au sujet des paramètres du fichier reduction.conf.

Storage=volatile
MaxLevelStore=warning
MaxLevelSyslog=warning

Lequel des ces paramètres sert à réduire les messages critiques? J’aimerais bien ne pas rajouter ce réglage.

Une toute dernière question:
Au sujet de mon script iptables, dois-je enlever toutes les options LOG?
Exemple:
-j DROP au lieu de -j LOG_DROP

il te manque peut être des paquets relatifs à fuse

apt list --installed  | grep fuse

exfat-fuse/stable,testing,unstable,now 1.3.0-1 amd64  [installé]
fuse/testing,unstable,now 2.9.9-2 amd64  [installé]
libfuse2/testing,unstable,now 2.9.9-2 amd64  [installé, automatique]

c’est le parametre MaxLevel… qui détermine le niveau de verbosité

je n’utilise pas iptables je me contente du réglage par défaut de nftables

Non, il ne manque aucun paquet. Par contre j’ai un autre message d’erreur

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

OK. Merci.

Bonjour,

Quelques pistes qui fonctionnent sur plusieurs Debian Stretch… pour beaucoup SSDisés

Objectif limiter les accès disques en privilégiant la RAM, récupérer un système neutre à chaque démarrage.

Coté SystemD

Délpacer la journalisation en RAM

/etc/systemd/journald.conf.

sed -i ‘s%.Compress=.%Compress=yes%’ /etc/systemd/journald.conf
sed -i ‘s%.Storage=.%Storage=volatile%’ /etc/systemd/journald.conf

Réactiver les TMP en RAM ce n’est plus le cas sous Debian Maintenant (voir avec un mount le /tmp)

Enable & start Service tmp.mount

mv -f /usr/share/systemd/tmp.mount /etc/systemd/system
systemctl enable tmp.mount

Activer le service systemd-tmpfiles-setup pour conserver l’intégrité du démarrage de l’OS pour tout ce qui aura été déplacer en RAM (Exemple le /var/log qu’il soit Rsyslog ou autres…).

Ce service qui démarre très tôt recrée à la volée l’arborescence attendu par le système avant même que les premiers services ne l’utilisent (Exemple le /var/log)

Enable & start Service systemd-tmpfiles-setup.service.

systemctl enable systemd-tmpfiles-setup.service
systemctl start systemd-tmpfiles-setup.service

Configurer le systemd-tmpfiles-setup (Par l’observation du fonctionnement du système, ça s’invente pas). Exemple regarder l’intégrité du /var/log actuel avant de le déplacer

Exemple pour un fonctionnement usuel sous stretch/gnome

APT

echo “D /var/log/apt 1777 root root” > /etc/tmpfiles.d/tmp.conf

CUPS

echo “D /var/log/cups 1777 root root” >> /etc/tmpfiles.d/tmp.conf
echo “D /var/spool/cups/tmp 1777 root root” >> /etc/tmpfiles.d/tmp.conf

Exim4

echo “D /var/log/exim4 1777 root root” >> /etc/tmpfiles.d/tmp.conf

GDM3

echo “D /var/log/gdm3 1777 root root” >> /etc/tmpfiles.d/tmp.conf

Installer.

echo “D /var/log/installer 1777 root root” >> /etc/tmpfiles.d/tmp.conf
echo “D /var/log/installer/cdebconf 1777 root root” >> /etc/tmpfiles.d/tmp.conf

Samba

echo “D /var/log/samba 1777 root root” >> /etc/tmpfiles.d/tmp.conf

Speech-Dispatcher.

echo “D /var/log/speech-dispatcher 1777 root root” >> /etc/tmpfiles.d/tmp.conf

Unattented-upgrades.

echo “D /var/log/unattented-upgrades 1777 root root” >> /etc/tmpfiles.d/tmp.conf

Fichiers.

echo “F /var/log/daemon.log 1777 root root” >> /etc/tmpfiles.d/tmp.conf
echo “F /var/log/debug 1777 root root” >> /etc/tmpfiles.d/tmp.conf
echo “F /var/log/dpkg.log 1777 root root” >> /etc/tmpfiles.d/tmp.conf
echo “F /var/log/auth.log 1777 root root” >> /etc/tmpfiles.d/tmp.conf
echo “F /var/log/kern.log 1777 root root” >> /etc/tmpfiles.d/tmp.conf
echo “F /var/log/exim4/mainlog 1777 root root” >> /etc/tmpfiles.d/tmp.conf
echo “F /var/log/messages 1777 root root” >> /etc/tmpfiles.d/tmp.conf
echo “F /var/log/popularity-contest 1777 root root” >> /etc/tmpfiles.d/tmp.conf
echo “F /var/log/popularity-contest.new 1777 root root” >> /etc/tmpfiles.d/tmp.conf
echo “F /var/log/syslog 1777 root root” >> /etc/tmpfiles.d/tmp.conf
echo “F /var/log/user.log 1777 root root” >> /etc/tmpfiles.d/tmp.conf

Une fois l’intégrité de ce qui doit être déplacé en RAM est OK pour le démarrage on peut déplacer ce que l’on a besoin en RAM via le fstab

/etc/fstab

Attention le systemd-tmpfiles-setup doit être bien configuré)

exemple
tmpfs /var/log tmpfs rw,nosuid,nodev,noatime,nodiratime,mode=1755 0 0
tmpfs /var/mail tmpfs rw,nosuid,nodev,noatime,nodiratime,mode=1777 0 0
tmpfs /var/spool/cups tmpfs rw,nosuid,nodev,noatime,nodiratime,mode=1777 0 0
tmpfs /var/tmp tmpfs rw,nosuid,nodev,noatime,nodiratime,mode=1777 0 0

Faire sauter le swap dans le FSTAB cela va de soit… Ou alors baisser fortement vm.swappiness
echo “vm.swappiness=1” >> /etc/sysctl.d/90-sysctl.conf

Certaines options de montages pour le / ou /home peuvent limiter de façon importantes les accès disque par exemple pour du BTRFS.

UUID=8f470739-64e4-4b88-b609-375e8632abb8 / btrfs rw,noatime,nodiratime,noacl,nobarrier,commit=70,autodefrag,compress=lzo 0 1

Si Debian sous Buster le zstd est accessible il me semble, bien meilleur que le lzo (ca limite encore la quantité d’information écrite sur disque)

Si tu as besoins de plus de log que la session en cours (analyse sur plusieurs jours) il faut simplment recommenter la déclaration du /var/log et les logs rebasculeront sur disque.

Côté FS du TMPFS il peut être judicieux en fonction des cas de monter la taille du TMPS et/ou de monter le nombres d’inodes si tu stockes dans ta session en cours plusieurs centaines de milliers de fichiers (Ca peut être le cas pour certaines applications de calcul ou autres logiciels. Ils sont un peu bas de base.

Exemple les inodes du TMP, et la taille du /tmp (EN RAM maintenant)
mount -o remount,rw,nosuid,nodev,nr_inodes=501k,size=250M /tmp

pour analyser les deux consommations
df -hi
df -h

Côté sessions utilisateurs ton meilleur allié pour redirigé tout ce que veux en RAM sans passer par la Conf manuel de chaque application sera le programme uhd paquet unburden-home-dir

Activation d’UHD une fois installé

echo “UNBURDEN_HOME=true” > /etc/default/unburden-home-dir

Exemple de redirection en RAM pour quelques applications(Ta seul limitation sera le temps d’analyse comportementales des différentes applications utilisées)

NE PAS REPRENDRE CES CONFIGS UHD mais regarder finement ce que dépose les applications dans la session utilisateur et adapter…

Quelques Exemples

Adobe

echo “m d .adobe adobe” > /etc/unburden-home-dir.list
echo “m d .macromedia macromedia” >> /etc/unburden-home-dir.list

#~ # Firefox
echo “m D mozilla/firefox/CrashReports/events firefox-crash-report-events-%1\n" > /etc/unburden-home-dir.list
echo "m D mozilla/firefox/Crash
Reports/events firefox-crash-report-events-%1\n” > /etc/unburden-home-dir.list
echo “m d mozilla/firefox/pixs.default/storage/temporary firefox-storage-temporary-%1\n” >> /etc/unburden-home-dir.list
echo “m D mozilla/firefox/pixs.default/crashes/events firefox-crashes-events-%1\n” >> /etc/unburden-home-dir.list
echo “m D mozilla/firefox/pixs.default/datareporting/archived firefox-datareporting-archived-%1\n” >> /etc/unburden-home-dir.list
echo “m D mozilla/firefox/pixs.default/minidumps firefox-minidumps-%1\n” >> /etc/unburden-home-dir.list
echo “m f .mozilla/firefox/pixs.default/lock firefox-lock\n” >> /etc/unburden-home-dir.list
echo “m f .mozilla/firefox/pixs.default/.parentlock firefox-parentlock\n” >> /etc/unburden-home-dir.list

#~ # Firefox Cache
echo “m d .cache/mozilla/firefox/pixs.default/cache2 cache-firefox-cache2-%1\n” >> /etc/unburden-home-dir.list
echo “m d .cache/mozilla/firefox/pixs.default/safebrowsing cache-firefox-safebrowsing-%1\n” >> /etc/unburden-home-dir.list

#~ # Gimp
echo “m d .gimp-2.8/tmp gimp-2.8-tmp\n” >> /etc/unburden-home-dir.list

#~ # Gnome
echo “m d .dbus/session-bus dbus-session-bus\n” >> /etc/unburden-home-dir.list
echo “m d .local/tmp local-tmp\n” >> /etc/unburden-home-dir.list
echo “m d .thumbnails thumbnails\n” >> /etc/unburden-home-dir.list
echo “m f .gksu.lock gksu.lock\n” >> /etc/unburden-home-dir.list

#~ # PlayOnLinux
echo “m d .PlayOnLinux/logs PlayOnLinux-logs\n” >> /etc/unburden-home-dir.list
echo “m d .PlayOnLinux/tmp PlayOnLinux-tmp\n” >> /etc/unburden-home-dir.list

etc etc…

Ces justes des pistes pour aller vers une philisophie ou la RAM est privilégiée et le système le plus neutre possible à chaque démarrage.

1 J'aime

Bonsoir,

Merci, je vais appliquer les réglages nécessaires.