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
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 dhclient
ou 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é.
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:
/etc/fstab
to démarre en lecture seule au prochain démarrage. Ex: /dev/sda1 / ext2 ro 0 1
Pour "récupérer" votre système:
$ mount -o remount,rw /dev/sda1
/etc/fstab
encore une fois, restaurer votre valeur d'origineExtra: si nécessaire, ouvrez mode de récupération à n'importe quelle étape:
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
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.
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 /
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):
en utilisant d'abord magic SysRq key
piège du noyau du clavier:
Emergency sync
demande au noyau etUmount all
demande, cela remontera tous les systèmes de fichiers montés en lecture seule,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
....
...
Supposons que vous souhaitiez compacter le disque VDI de VM1 (Machine virtuelle 1). Ensuite, vous avez besoin d'une seconde VM2. C'est, :
Depuis VirtualBox Manager:
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.
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é.
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
.)
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.
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 /
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.
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
.