[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Debian Jessie: boot en mode recovery où n'est pas monté en read-only



On 03/27/2016 07:30 PM, Francois Lafont wrote:
On 27/03/2016 18:10, mireero wrote:

Tu pourrais pas faire simplement un:
# mount -o remount,ro /dev/sda1 && zerofree /dev/sda1

Oui j'avais tenté cela déjà mais la commande « mount -o remount,ro /dev/sda1 »
ne fonctionne pas. J'ai un message qui me dit que /dev/sda1 est occupé.
J'ai aussi tenté la commande alors que j'avais rebooté en mode recovery et
j'avais le même message d'erreur.

Je pensais que tu voulais peut-être protéger certains fichiers/dossiers contre l'écriture/écrasement en passant tout en ro

Ah ok. Non, effectivement je ne suis pas dans ce cas. J'ai une commande à
lancer (une seule fois) et qui nécessite que / soit en read-only (temporairement
donc). Le mode recovery de Trusty répond parfaitement à mes besoins donc
mais pas celui de Jessie.


Quelques idées/pistes:

/var (ex: /var/run/*, var/log/*), /etc (ex: /etc/udev/rules.d/70*) et /tmp vont poser problème.

Déjà, tu peux mettre /tmp en tmpfs dans /etc/fstab

Utiliser 'noatime' dans /etc/fstab

# mount -no remount,ro /dev/sda1
// l'option 'n' pour ne pas toucher à /etc/mtab qui va se trouver du coup sur un système ro

$ fuser -v -m /
// Pour avoir une idée des processus qui utilisent le système de fichier /

$ lsof / | awk '$4 ~ /[0-9].*w/'
// Processus qui ont un fichier en cours d'écriture
// Chez moi, en mode single, je n'en ai que 2, hwdb et dhclient, si je les tue, ça marche.

Tuer des services susceptibles d'écrire, par exemple:
# service rsyslog stop
# service network-manager stop
# killall dhclient
# systemctl stop systemd-journald.socket
# systemctl stop systemd-journald.service

Ou tu peux essayer simplement:
# telinit 1
# mount -no remount,ro /

Ça fonctionne chez moi, cela peut sembler curieux.
J'ai regardé un peu, c'est "/lib/init/mount-functions.sh" qui positionne une variable $rootmode en la lisant dans 'fstab'. Ce fichier est sourcé par "/etc/init.d/checkroot.sh" qui, après avoir vérifié le système de fichier et s'être assuré qu'il est bien en read-only (on se demande un peu à quoi sert l'option du kernel), le bascule en rw le cas échéant. C'est donc checkroot.sh notre cible, et tu pourrais écraser la variable $rootmode, mais il te faudrait une condition, du genre si j'ai démarré en mode rescue, t'es à ro, sinon tu restes à rw. En tout cas, il y a bien une différence booter directement en "single" ou booter en "multi" puis basculer en "single". D'ailleurs, on peut noter que checkroot.sh et dans le niveau d'exécution S (pour start), donc qu'il n'est pas ré-exécuté quand on passe de 5 à 1.

Update: il est plus probable que ce script est ignoré et que le travail est fait par systemd-remount-fs.service.

Dans fstab, on a par défaut l'option "errors=remount-ro", j'ai une idée bête, créer une erreur délibérément (bon, je sais, no comment!).

Virtualbox ne fournirait-il pas des outils pour accéder/monter la partition à partir de l'hôte (sans booter la VM donc)? C'est possible avec VMWare par exemple.

Booter sur une iso Trusty en mode recovery, faire la manip.

Comparer les configurations de Trusty et Jessie et comprendre.

Voilà, bon courage (surtout si tu te lances dans le dernier point ;) )


Reply to: