mv:cannot move "/home" to "/home-old":Dispositivo o risorsa occupati
L'unico "uso" [*] a cui riesco a pensare, che impedisce al nome di un file di cambiare, è un punto di montaggio.
Cos'altro posso controllare?
Non ne sono sicuro, ma forse questo potrebbe accadere se il montaggio esiste ancora in un altro spazio dei nomi di montaggio. Perché per qualche motivo non viene propagato lo smontaggio dallo spazio dei nomi root? O guardando il risultato sul mio sistema, forse systemd services con 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
Nota che questo problema - impossibile rinominare /home nonostante non venga visualizzato come punto di montaggio (nello spazio dei nomi corrente) - dovrebbe essere risolto nel kernel Linux versione 3.18+.
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?h=linux-3.18.y&id=8ed936b5671bfb33d89bc60bdcc7cf0470ba52fe
come scoprire lo spazio dei nomi di un particolare processo?
lsns
potrebbe essere utile se puoi installarlo. Altri comandi possibili:
Elenca gli spazi dei nomi di montaggio:
# readlink /proc/*/task/*/ns/mnt | sort -u
Identifica lo spazio dei nomi di montaggio root:
# readlink /proc/1/ns/mnt
Trova i processi con un dato spazio dei nomi di montaggio
# readlink /proc/*/task/*/ns/mnt | grep 4026531840
Ispeziona lo spazio dei nomi di un determinato processo:
# cat /proc/1/task/1/mountinfo
[*] EBUSY La ridenominazione fallisce perché oldpath o newpath è una directory che è in uso da qualche processo (forse come directory di lavoro corrente, o come directory root, o perché era aperta per la lettura) o è in uso dal sistema ( ad esempio come punto di montaggio) , mentre il sistema lo considera un errore. (Si noti che non è necessario restituire EBUSY in questi casi, non c'è niente di sbagliato nel rinominare comunque, ma è consentito restituire EBUSY se il sistema non è in grado di gestire tali situazioni.)
Era NetworkManager.
Esecuzione di systemctl stop mysqld httpd postfix ipmievd tuned atd rsyslog smartd crond irqbalance gssproxy polkit chronyd
non ha aiutato, ma ha reso la tabella dei processi molto piccola.
Dopo systemctl stop NetworkManager
, sono riuscito a rinominare /home.