web-dev-qa-db-fra.com

"mount: / est occupé" lorsque j'essaie de monter en lecture seule afin de pouvoir exécuter zerofree

J'essaie d'exécuter zerofree sur Ubuntu 11.04 afin de pouvoir compacter l'image vdi de VirtualBox en utilisant:

VBoxManage modifyhd Ubuntu.vdi --compact

Afin d'exécuter zerofree l'image disque doit être montée en lecture seule. Je suis ces instructions qui dit d'utiliser ceci pour remonter en lecture seule à partir du mode de récupération (Drop to root Shell Prompt):

mount -n -o remount,ro -t ext2 /dev/sda1 /

Mais quand je fais cela, j'obtiens l'erreur:

mount: / is busy

Auriez vous des idées pour faire ça?

Suivi : Suite à la réponse de Jari et ce post en exécutant ces commandes résout le problème.

service rsyslog stop
service network-manager stop
killall dhclient
39
Wavy Crab

Certains processus gardent les fichiers ouverts pour l'écriture. Il peut s'agir, par exemple, de programmes qui écrivent des journaux, comme rsyslogd, des outils de mise en réseau, comme dhclientou autre chose. Les arrêter un par un et essayer de remonter pourraient fonctionner.

Vous pouvez trouver des processus qui utilisent certains fichiers en utilisant le programme fuser. Par exemple, fuser -v -m / renverra une liste de processus. Cependant, je ne sais pas si c'est l'un d'entre eux qui maintient le système de fichiers occupé.

25
Jari Laamanen

Vous ne pouvez remonter le système de fichiers en lecture seule que si aucun processus n'a un fichier ouvert pour l'écriture. Courir lsof / pour voir quels processus ont des fichiers ouverts sur le système de fichiers racine. Les fichiers ouverts en écriture seront indiqués dans la colonne FD. Vous pouvez les filtrer avec

lsof / | awk '$4 ~ /[0-9].*w/'

Pour filtrer automatiquement les ID de processus, analysez la sortie de lsof -F pa:

lsof -F pa /home | awk '/^p/ {pid = substr($0, 2)} /^a.*w/ {print pid}'

Amélioration de la réponse de Peter:

Je n'ai pas pu tuer les processus qui utilisent mon point de montage. Alors j'ai fait ça:

  • Éditer /etc/fstab to démarre en lecture seule au prochain démarrage. Ex: /dev/sda1 / ext2 ro 0 1
  • Redémarrez et ouvrez un shell (clé d'hôte + F2, par exemple)
  • Exécuter sans zéro

Pour "récupérer" votre système:

  • Montage avec option lecture-écriture: $ mount -o remount,rw /dev/sda1
  • Éditer /etc/fstab encore une fois, restaurer votre valeur d'origine

Extra: si nécessaire, ouvrez mode de récupération à n'importe quelle étape:

  • Redémarrer
  • Maintenez la touche Maj enfoncée pendant le chargement de VM
  • Options avancées> Option de noyau avec mode de récupération> Invite de dépôt dans le shell racine
13
Topera

Il y a parfois tellement de processus qui maintiennent le montage occupé, qu'il pourrait être plus facile de redémarrer simplement avec le montage en lecture seule.

Modifiez l'entrée du système de fichiers racine dans /etc/fstab, par exemple:

/dev/sda1 / ext2 relatime,rw,errors=remount-ro 0 1

devient:

/dev/sda1 / ext2 noatime,ro 0 1

Au redémarrage, le système de fichiers sera monté en lecture seule, vous pouvez donc exécuter zerofree dessus.

Lorsque vous avez terminé, remontez le système de fichiers en lecture/écriture (mount -o remount,rw /) et annulez vos modifications dans /etc/fstab.

Inspiré par https://wiki.debian.org/ReadonlyRoot#Enable_readonly_root

6
Peter Nowee

Si vous ne pouvez toujours pas démonter ou remonter votre appareil après avoir arrêté tous les services et processus avec des fichiers ouverts, il peut y avoir un fichier d'échange ou une partition d'échange qui occupe votre appareil. Cela n'apparaîtra pas avec fuser ou lsof. Désactivez l'échange avec:

Sudo swapoff -a

Vous pouvez vérifier au préalable et afficher un résumé de toutes les partitions ou fichiers d'échange avec:

swapon -s

ou:

cat /proc/swaps

Comme alternative à l'utilisation de la commande Sudo swapoff -a, vous pouvez également désactiver le swap en arrêtant un service ou systemd unit. Par exemple:

Sudo systemctl stop dphys-swapfile

ou:

Sudo systemctl stop var-swap.swap

Dans mon cas, la désactivation de l'échange était nécessaire, en plus d'arrêter tous les services et processus avec des fichiers ouverts pour l'écriture, afin que je puisse remonter ma partition racine en lecture seule afin d'exécuter fsck sur ma partition racine sans redémarrage. Cela était nécessaire sur un Raspberry Pi exécutant Raspbian Jessie.

6
Simon Gould

Si vous utilisez systemd, les écritures sur disque sont arrêtées en arrêtant systemd-journald.

# systemctl stop systemd-journald.socket
# systemctl stop systemd-journald.service
# mount -o ro,remount /
4
Artur Pędziwilk

Ok, il y a ce que j'ai fait

Tout d'abord, mon objectif était de réduire mon / (ROOT) partition afin d'en ajouter une autre sur mon disque.

  • De la session en cours une fois tout nettoyé et sauvegardé:

    init 1
    

    Mon bureau disparaît et je suis maintenant sur console Linux ...

    ...
    Give root password for maintenance or press CTRL+D to continue
    TheRootPassword_SomethingLike1234
    
  • Maintenant, essayez de monter / en lecture seule mode:

    mount -o remount,ro /
    mount: / is busy
    
  • Ok, à partir de maintenant, je suis en mode théoriquement mono-utilisateur, mais ps ax montre beaucoup d'autres processus !!

    Les tuer tous n'est pas vraiment possible, ni dangereux ... (kill 1 est interdit ... Je n'ai pas le temps de jouer psdoom :-)

    La seule chose que je peux faire est System Request, pour cela, je connais deux façons: (voir Documentation/sysrq.txt fichier dans les documents du noyau):

    1. en utilisant d'abord magic SysRq key piège du noyau du clavier:

      • maintenez AltGr, puis maintenez puis appuyez,
      • frappé PrtScn juste une fois, mais ne relâchez pas AltGr,
      • frappé s une seule fois, cela enverra Emergency sync demande au noyau et
      • frappé u, cela enverra Umount all demande, cela remontera tous les systèmes de fichiers montés en lecture seule,
      • puis relâchez AltGr
    2. Ou par ligne de commande:

      echo s >/proc/sysrq-trigger
      echo u >/proc/sysrq-trigger
      
  • Alors maintenant, je pourrais

    fsck -fC0 /dev/mapper/MyDisk-ROOT
    

    ....

...

3
F. Hauri

Attachez le fichier vdi en tant que volume supplémentaire et non système à une autre VirtualBox. Là, vous pouvez (re) le monter selon vos besoins et effectuer le zéro.

Supposons que vous souhaitiez compacter le disque VDI de VM1 (Machine virtuelle 1). Ensuite, vous avez besoin d'une seconde VM2. C'est, :

  • Assurez-vous que ni VM1 ni VM2 ne sont en cours d'exécution;
  • Depuis VirtualBox Manager:

    • Sélectionnez VM2,
    • "Paramètres" -> "Stockage" -> "Ajouter un disque dur": "Select it as additional disk" ,

    • sélectionnez le fichier vdi de VM1 que vous souhaitez compacter. Astuce: assurez-vous que le disque dur qui vient d'être ajouté à VM2 passe en deuxième position dans l'ordre de démarrage après le disque d'origine de VM2.

    • démarrer VM2: vous pouvez maintenant (re) monter le volume de VM1 en tant que disque supplémentaire pour VM2, car aucun processus ne l'utilise dans VM2. Astuce: Tout d'abord, ouvrez le volume avec le navigateur de Linux, qui monte automatiquement le volume. Ensuite, utilisez mount -l pour voir quel est le _Device_ dans la commande Sudo mount -o remount,ro _Device_. Dans mon cas, c'était /dev/sdb1 . La commande était donc (1) Sudo mount -o ro,remount /dev/sdb1 puis (2) Sudo zerofree /dev/sdb1.

Au lieu de VM2, on devrait pouvoir démarrer à partir du disque d'installation comme et . Iso image et obtenir le même MAIS je ne l'ai pas essayé.

1
leo

Pour tous ceux qui cherchent simplement une solution rapide à coller dans votre terminal ...

(Avant de suivre les commandes ci-dessous, assurez-vous d'avoir effectué les autres étapes comme telinit 1.)

Trouvé ceci :

fuser -mv /dev/sda1 > /tmp/sda1.pids
kill `cat /tmp/sda1.pids`

Les commandes peuvent tuer votre session, mais après votre retour, votre partition est prête à être remontée.

1
DustWolf

Je suppose que vous essayez d'exécuter la commande mount dans la machine virtuelle. Quoi qu'il en soit, vous avez probablement une partition racine différente de celle de l'auteur du message du forum.

Essayer:

mount -o ro,remount /

Ce qui ne dépend pas de l'option fs ou mount. Si cela ne fonctionne pas, vous pouvez également essayer de déterminer votre racine fs avec grep " / " /proc/mounts ou cat /proc/cmdline. Si votre système de fichiers racine est par exemple/dev/mapper/system-rootfs, vous pouvez utiliser:

mount -o ro,remount /dev/mapper/system-rootfs /
0
Ulrich Dangel

J'ai eu ce problème qui m'a empêché de mettre ma machine en mode lecture seule. La résolution du problème m'a pris plus de temps que j'aimerais l'admettre ... Je crois que mon problème était que j'ai laissé Apache-Zeppelin en cours d'exécution et que j'ai oublié. Assurez-vous que vous ne faites pas la même chose avec un autre service de type d'hébergement. Pour résoudre le problème, j'ai utilisé fuser -kill / pour mettre fin à tous les processus qui pourraient être à l'origine du problème et cela m'a permis de revenir en mode ro.

0
ob1

La solution pour moi était de redémarrer le système d'exploitation et de choisir le "mode de récupération" dans le menu de démarrage de GRUB. Depuis le "mode de récupération", il y a moins de processus en cours d'exécution et le remontage en lecture seule fonctionne correctement.

Si le système a un fichier d'échange sur le système de fichiers racine (plutôt qu'une partition d'échange), il est également nécessaire de désactiver temporairement le fichier d'échange avec swapoff -a.

0
Boann