"Mount: / is busy" lors de la tentative de montage en lecture seule pour pouvoir exécuter zerofree


36

J'essaie de fonctionner zerofreesur Ubuntu 11.04 pour pouvoir compacter l'image vdi de VirtualBox à l'aide de:

VBoxManage modifyhd Ubuntu.vdi --compact

Pour pouvoir exécuter zerofreel’image disque, celle-ci 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 (invite du shell root):

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 : Après la réponse de Jari et ce message en exécutant ces commandes, le problème est résolu.

service rsyslog stop
service network-manager stop
killall dhclient

4
La page de manuel de zerofree suggère de lancer telinit 1et cela a résolu le problème pour moi.
Alex Ryan

Réponses:


23

Certains processus gardent les fichiers ouverts pour l'écriture. Celles - ci pourraient être, par exemple, les programmes que les journaux d'écriture, comme des rsyslogdoutils de réseautage, comme dhclientou autre chose. Les fermer un à un et essayer de remonter pourrait fonctionner.

Vous pouvez trouver des processus qui utilisent certains fichiers en utilisant le programme fuser. Par exemple, fuser -v -m /retournera une liste de processus. Cependant, je ne sais pas si c’est l’une de ces solutions qui occupe le système de fichiers.


2
Les processus dont les fichiers sont ouverts en mode écriture ont un capital Fdans les indicateurs d'accès de la fusersortie.
Jan Hudec

21

Vous pouvez remonter le système de fichiers en lecture seule uniquement si aucun processus n’a un fichier ouvert en écriture. Exécuter lsof /pour voir quels processus ont des fichiers ouverts sur le système de fichiers racine. Les dossiers ouverts en écriture seront indiqués dans la FDcolonne. Vous pouvez les filtrer avec

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

Pour filtrer automatiquement les identifiants de processus, analysez les résultats de lsof -F pa:

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

1
Essayé avec cette solution, toujours occupé, il pourrait arriver que certaines ressources ne puissent pas être affichées de cette façon. Après avoir arrêté certains services en cours d'exécution, vous pouvez remonter le fs en lecture seule.
Sam Liao

J'ai fermé tous les processus qui avaient un fichier ouvert en lecture, en écriture ou les deux ( u) et qui dit toujours occupé.
Hubro

12

Améliorer la réponse de Pierre:

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

  • Edit /etc/fstabto commence en lecture seule au prochain démarrage. Ex:/dev/sda1 / ext2 ro 0 1
  • Redémarrez et ouvrez un shell (Host Key + F2, par exemple)
  • Exécuter zerofree

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

  • Monter avec l'option lecture-écriture: $ mount -o remount,rw /dev/sda1
  • Modifier à /etc/fstabnouveau, en restaurant votre valeur d'origine

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

  • Redémarrage
  • Maintenir Shift pendant le chargement de la VM
  • Options avancées> Option de noyau avec Mode de récupération> Invite de remplacement dans l'environnement racine

2
Capitaine Évident veut ajouter: Assurez-vous d’installer zerofree AVANT de redémarrer en mode ro
Xosofox

using "Drop to Root Shell Prompt" et zerofree: système de fichiers monté rw. Mais je n’ai eu aucun problème avec d’autres
ordinateurs virtuels

Cela ne fonctionnait que pour moi lorsque l' /dev/sda1 / ext2 ro 0 1entrée était en haut de la liste. Quand je l'ai mis pour la première fois en tant que dernière entrée, j'avais toujours l'erreur du point de montage occupé.
afilina le

6

Il y a parfois tellement de processus qui maintiennent le montage occupé qu'il peut être plus facile de simplement redémarrer 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 pourrez donc l'exécuter zerofree.

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

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


Génial! Pour votre information, je n’ai utilisé que cela /dev/sda1 / ext2 ro 0 1et j’ai pu démarrer en mode lecture seule.
Topera

5

Si vous ne pouvez toujours pas démonter ou remonter votre périphérique après avoir arrêté tous les services et processus contenant des fichiers ouverts, il est possible qu'un fichier d'échange ou une partition d'échange maintienne votre périphérique occupé. Cela ne se présentera pas avec fuserou lsof. Désactiver 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

Au lieu d'utiliser la commande sudo swapoff -a, vous pouvez également désactiver le swap en arrêtant un service ou une unité systemd . Par exemple:

sudo systemctl stop dphys-swapfile

ou:

sudo systemctl stop var-swap.swap

Dans mon cas, il était nécessaire de désactiver le swap, en plus d'arrêter tous les services et processus dont les fichiers étaient ouverts à l'écriture, afin que je puisse remonter ma partition racine en lecture seule afin de l'exécuter fscksur ma partition racine sans redémarrer. Cela était nécessaire sur un Raspberry Pi exécutant Jessie Raspbian.


4

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 /

1
Pour moi, les deux unités redémarrent immédiatement.
rld.

a travaillé pour moi dans "Options avancées> Option du noyau avec mode de récupération> Invite de
remplacement du

3

Ok, il y a ce que j'ai fait

Premièrement, mon objectif était de réduire ma partition /( ROOT) afin d’en ajouter une autre sur mon disque.

  • À partir de la session en cours une fois que tout est nettoyé et sauvegardé:

    init 1
    

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

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

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

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

    La seule chose que je puisse faire est un System Request, pour cela, je connais deux façons: (voir le Documentation/sysrq.txtfichier dans la documentation du noyau):

    1. d'abord en utilisant le magic SysRq keyclavier piège:

      • maintenez enfoncé AltGr, puis maintenez puis appuyez sur,
      • frappez PrtScnjuste une fois, mais ne libérez pas AltGr,
      • frapper sjuste une fois, cela enverra une Emergency syncdemande au noyau et
      • frapper u, cela enverra une Umount alldemande, cela remontera tous les systèmes de fichiers montés en lecture seule,
      • puis relâche 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
    

    ....

...


Note: In fine, si mon travail fsckétait réussi, j'ai démarré un Live USB afin de pouvoir le lancer resize2fs... Cette fonctionnalité n'est pas encore implémentée ...
F. Hauri

Mon fsckne sait pas -f; que ferait-il, zéro bloc non référencé?
ᴠɪɴᴄᴇɴᴛ

1
@ ᴠɪɴᴄᴇɴᴛ: C'est ext2le fsckcommutateur: -f force la vérification même si le système de fichiers semble propre.
F. Hauri

1

Pour tous ceux qui recherchent 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

Associez le fichier vdi en tant que volume supplémentaire et non système à un autre VirtualBox. Là, vous pouvez le (re) monter à votre guise et effectuer le zerofree.

Supposons que vous souhaitiez compacter le disque VDI de VM1 (machine virtuelle 1). Ensuite, vous avez besoin d'un deuxième VM2 . C'est, :

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

    • Sélectionnez VM2,
    • "Paramètres" -> "Stockage" -> "Ajouter un disque dur": "Sélectionnez-le comme disque supplémentaire",

    • sélectionnez le fichier vdi de VM1 que vous souhaitez compacter. Astuce: Assurez-vous que le disque dur que vous venez d'ajouter à VM2 passe en deuxième position dans l'ordre de démarrage après le disque d'origine de VM2.

    • démarrez 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. Conseil: Tout d'abord, ouvrez le volume avec le folebrowser de Linux, qui monte automatiquement le volume. Ensuite, utilisez mount -lpour voir quel est le _Device_dans la commande sudo mount -o remount,ro _Device_. Dans mon cas, c'était / dev / sdb1 . Donc, la commande était (1) sudo mount -o ro,remount /dev/sdb1et ensuite (2) sudo zerofree /dev/sdb1.

Au lieu de VM2, vous devriez pouvoir démarrer à partir d’un disque d’installation tel que et .iso et obtenir le même résultat MAIS je ne l’ai pas essayé.


0

Je suppose que vous essayez d'exécuter la mountcommande 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 fs racine avec grep " / " /proc/mountsou 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

J'ai eu ce problème qui m'a empêché de mettre ma machine en mode lecture seule. Résoudre le problème m'a pris plus de temps que je ne l’avais voulu admettre ... Je pense que mon problème était que je laissais Apache-Zeppelin courir et que je l’oublie. 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’avais l'habitude fuser -kill /de mettre fin à tous les processus pouvant être à l'origine du problème et cela m'a permis de revenir en mode ro.


0

La solution pour moi était de redémarrer le système d'exploitation et de choisir "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 contient 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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.