Come appare il messaggio
touch: cannot touch '/var/www/test': Read-only file systemCause frequenti
- ext4 con
errors=remount-roha rilevato un errore ed è passato in sola lettura. - Disco o SSD guasto, errori di I/O nello storage della VM.
- Montato
roin/etc/fstab, o root volutamente in sola lettura (container, appliance). - Hardening systemd:
ProtectSystem=strictrende tutto in sola lettura per il servizio, tranneReadWritePaths. - Storage thin provisioning pieno sull'hypervisor.
Verifica
- Mostra le opzioni di mount del percorso
findmnt -o TARGET,SOURCE,FSTYPE,OPTIONS -T /var/www - Cerca nei messaggi del kernel errori di filesystem e I/O
dmesg -T | grep -iE 'EXT4-fs error|I/O error|remount|read-only' | tail -n 20 - Controlla lo stato SMART del disco
smartctl -H -A /dev/sda - Mostra l'hardening systemd del servizio
systemctl show nginx.service -p ProtectSystem -p ReadWritePaths -p ProtectHome
Soluzione
- Prima metti al sicuro i dati, finché si possono leggere.
- Con errori di filesystem esegui
fsck -fsul dispositivo smontato da un sistema rescue. - Solo se la causa è chiara e innocua:
mount -o remount,rw /. - Per i servizi systemd sblocca i percorsi necessari con un override:
ReadWritePaths=/var/www/uploads. - Con errori I/O o SMART sostituisci il disco o avvisa il provider.
Domande frequenti
Posso semplicemente fare remount,rw?
Tecnicamente sì, ma se il kernel è passato in sola lettura per errori stai scrivendo su un filesystem danneggiato. Prima verifica, poi rimonta.
Perché root scrive e il servizio no?
Di solito è attivo l'hardening di systemd. ProtectSystem e ReadOnlyPaths valgono solo nel namespace del servizio, non nella tua shell.