mv: impossible de déplacer "home" vers "home-old": périphérique ou ressource occupé

10

Je veux remplacer /homepar un lien symbolique vers mes répertoires personnels montés sur nfs.

Seul root est connecté, / home n'est pas un système de fichiers séparé, lsof n'affiche aucun verrou, selinux est permissif. Qu'est-ce que je rate?

Je suis connecté directement en tant que root via ssh:

[root@usil01-sql01 /]# uname -a
Linux usil01-sql01 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

[root@usil01-sql01 /]# w
 15:30:33 up  1:41,  1 user,  load average: 0.00, 0.02, 0.22
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/2    10.50.11.114     15:13    1.00s  0.19s  0.01s w

[root@usil01-sql01 /]# lsof | grep /home

[root@usil01-sql01 /]# lsof +D /home

[root@usil01-sql01 /]# df -h /home
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        63G  4.1G   56G   7% /

[root@usil01-sql01 /]# mount | grep -w /
/dev/sda2 on / type ext4 (rw,relatime,seclabel,data=ordered)

[root@usil01-sql01 /]# ls -lFd /home
drwxr-xr-x. 3 root root 4096 Mar  7 13:36 /home/

[root@usil01-sql01 /]# getenforce
Permissive

[root@usil01-sql01 /]# mv /home /home-old
mv: cannot move "/home" to "/home-old": Device or resource busy

Que puis-je vérifier d'autre?

Plus d'informations sur le système:

[root@usil01-sql01 /]# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 836.6G  0 disk 
|-sda1   8:1    0 768.6G  0 part /storage
|-sda2   8:2    0    64G  0 part /
`-sda3   8:3    0     4G  0 part [SWAP]
sr0     11:0    1  1024M  0 rom  

[root@usil01-sql01 /]# blkid
/dev/sda2: UUID="5ba6a429-4c65-4023-82b4-3673bfcf6a88" TYPE="ext4" 
/dev/sda3: UUID="b5eb680f-8789-43b2-9f7e-c52570b0eb73" TYPE="swap" 
/dev/sda1: UUID="cb22d57d-4a5b-4963-a990-890abe0c56dc" TYPE="ext4" 
TheAmigo
la source
Essayez l'option paresseux umount comme dansumount -f -l /home
Valentin Bajrami
Essayez de rechercher un processus suspect qui consomme trop de ressources sans être connu de vous avec topou ps. Ils essaient de regarder ce qu'il fait en ce moment en utilisant strace. Cette situation est bizarre tmm. MISE À JOUR: vérifiez également la lsofsortie avec fuserune au cas où.
ddnomad
1
@ val0x00ff comme vous pouvez le voir dans la sortie ci-dessus, / home n'est pas un point de montage.
TheAmigo
1
@ddnomad fuser / home n'a pas non plus de sortie. Il s'agit d'un système fraîchement installé, inactif, sans processus occupés.
TheAmigo
@TheAmigo je vois. Je suppose que vous avez déjà essayé de redémarrer simplement l'hôte. Vous pouvez également essayer de démarrer en mode sans échec à partir du menu GRUB et de l'essayer là-bas.
ddnomad

Réponses:

9

mv: impossible de déplacer "/ home" vers "/ home-old": périphérique ou ressource occupé

La seule "utilisation" [*] à laquelle je peux penser, qui contient le nom d'un fichier à modifier, est un point de montage.

Que puis-je vérifier d'autre?

Je ne suis pas certain, mais cela pourrait se produire si le montage existe toujours dans un autre espace de noms de montage. Parce que les démontages ne se propagent pas à partir de l'espace de noms racine, pour une raison quelconque? Ou en regardant le résultat sur mon système, peut-être avec les services systemd 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 corrigé 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?

lsnspourrait être utile si vous pouvez l'installer. Plus de commandes possibles:

Liste des 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

Rechercher des processus avec un espace de noms de montage donné

# readlink /proc/*/task/*/ns/mnt | grep 4026531840

Inspectez 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 pour la lecture) ou est utilisé par le système (pour exemple comme point de montage) , tandis que le système considère cela comme une erreur. (Notez qu'il n'y a aucune obligation de retourner EBUSY dans de tels cas - il n'y a rien de mal à faire le renommage de toute façon - mais il est autorisé de retourner EBUSY si le système ne peut pas gérer de telles situations autrement.)

sourcejedi
la source
/ home n'a jamais été un montage dans aucun espace de noms.
TheAmigo
Est-ce à dire que vous avez utilisé des commandes dans le sens que j'ai suggéré? Parce que «jamais» est une affirmation très forte, mes commandes ne le démontreraient pas. J'ai ajouté une commande au début qui serait plus simple (et si tout va bien fonctionnelle :), et une deuxième spéculation sur pourquoi cela pourrait se produire en fonction du résultat sur mon système.
sourcejedi
J'ai trouvé une autre machine "cassée" et votre commande grep pointe en effet le doigt sur NetworkManager. Donc mon "stop NM, renommer, redémarrer NM" fonctionne, mais votre grep de mountinfo est ce qui trouve le coupable.
TheAmigo
(parce que /lib/systemd/system/NetworkManager.service utilise ProtectHome, au moins sur les systèmes que nous examinons)
sourcejedi
6

C'était NetworkManager.

L'exécution systemctl stop mysqld httpd postfix ipmievd tuned atd rsyslog smartd crond irqbalance gssproxy polkit chronydn'a pas aidé, mais a rendu la table de processus très petite.

Après systemctl stop NetworkManager, j'ai pu renommer / home.

TheAmigo
la source
Je devais seulement faire le "service NetworkManager stop" et puis j'ai pu déplacer / home puis faire un redémarrage pour m'assurer que tout allait bien.
sdjuan
Merci beaucoup. Ce n'est pas du tout évident et j'ai dû lire des dizaines de pages parlant de / home comme point de montage, ce qui n'est clairement pas dans la question OP. J'ai trouvé que l'arrêt de NetworkManager a également aidé dans mon cas, en exécutant Redhat 7.6.
labradort du
0

Vous pouvez démarrer sur un seul utilisateur et apporter des modifications sur le répertoire personnel.

  1. Redémarré mon système et en sélectionnant grub pendant modifier la ligne en appuyant sur e
  2. En linux16ligne supprimé rhgbet quiteoptions et mis en place init=/bin/bash.
  3. Le pressé ctrl+xpour commencer. Cela vous invitera sur la console bash.
  4. Remontez /avec les options de lecture / écriture en émettantmount -o remount,rw /
  5. Après cela, vous pouvez modifier votre /homerépertoire, le renommer, etc.
  6. Une fois le travail terminé, renommer le selinux en émettant touch /.autorelabel
  7. Enfin, exécutez exec /sbin/initpour démarrer le démarrage normalement.

@sourcejedi: merci pour votre réponse.

igiannak
la source