mv :impossible de déplacer "/home" vers "/home-old" :appareil ou ressource occupé
La seule "utilisation"[*] à laquelle je peux penser, qui empêche le nom d'un fichier de changer, est un point de montage.
Que puis-je vérifier d'autre ?
Je ne suis pas certain, mais cela pourrait peut-être arriver si le montage existe toujours dans un autre espace de noms de montage. Parce que les démontages ne sont pas propagés à partir de l'espace de noms racine, pour une raison quelconque? Ou en regardant le résultat sur mon système, peut-être des services systemd avec ProtectHome
?
$ grep -h home /proc/*/task/*/mountinfo | sort -u
121 89 0:22 /systemd/inaccessible/dir /home ro,nosuid,nodev shared:142 master:24 - tmpfs tmpfs rw,seclabel,mode=755
275 243 253:2 / /home ro,relatime shared:218 master:33 - ext4 /dev/mapper/alan_dell_2016-home rw,seclabel,data=ordered
321 288 253:2 / /home rw,relatime shared:262 master:33 - ext4 /dev/mapper/alan_dell_2016-home rw,seclabel,data=ordered
84 64 253:2 / /home rw,relatime shared:33 - ext4 /dev/mapper/alan_dell_2016-home rw,seclabel,data=ordered
85 46 253:2 / /home rw,relatime master:33 - ext4 /dev/mapper/alan_dell_2016-home rw,seclabel,data=ordered
Notez que ce problème - impossible de renommer /home bien qu'il ne s'affiche pas comme point de montage (dans l'espace de noms actuel) - devrait être résolu dans la version 3.18+ du noyau Linux.
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?h=linux-3.18.y&id=8ed936b5671bfb33d89bc60bdcc7cf0470ba52fe
comment trouver l'espace de noms d'un processus particulier ?
lsns
pourrait être utile si vous pouvez l'installer. Plus de commandes possibles :
Répertorier les espaces de noms de montage :
# readlink /proc/*/task/*/ns/mnt | sort -u
Identifiez l'espace de noms de montage racine :
# readlink /proc/1/ns/mnt
Trouver des processus avec un espace de noms de montage donné
# readlink /proc/*/task/*/ns/mnt | grep 4026531840
Inspecter l'espace de noms d'un processus donné :
# cat /proc/1/task/1/mountinfo
[*] EBUSY Le changement de nom échoue car oldpath ou newpath est un répertoire utilisé par un processus (peut-être comme répertoire de travail actuel, ou comme répertoire racine, ou parce qu'il était ouvert en lecture) ou est utilisé par le système ( par exemple comme point de montage) , tandis que le système considère qu'il s'agit d'une erreur. (Notez qu'il n'y a aucune obligation de renvoyer EBUSY dans de tels cas - il n'y a rien de mal à renommer de toute façon - mais il est permis de renvoyer EBUSY si le système ne peut pas gérer de telles situations autrement.)
C'était NetworkManager.
Exécution de systemctl stop mysqld httpd postfix ipmievd tuned atd rsyslog smartd crond irqbalance gssproxy polkit chronyd
n'a pas aidé, mais a rendu la table de processus très petite.
Après le systemctl stop NetworkManager
, j'ai pu renommer /home.