mv: não é possível mover “home” para “home-old”: Dispositivo ou recurso ocupado

7

Eu quero substituir /home por um link simbólico para meus diretórios iniciais nfs-montados.

Somente o root está logado, o / home não é um sistema de arquivos separado, o lsof não mostra nenhum bloqueio, o selinux é permissivo. O que estou perdendo?

Estou logado diretamente como 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

O que mais posso verificar?

Mais informações do sistema:

[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" 
    
por TheAmigo 07.03.2017 / 22:37

2 respostas

7

mv: cannot move "/home" to "/home-old": Device or resource busy

O único "use" [*] que consigo pensar, que contém o nome de um arquivo de alteração, é um ponto de montagem.

What else can I check?

Não tenho certeza, mas talvez isso possa acontecer se a montagem ainda existir em outro namespace de montagem. Porque não está obtendo desmontagens propagadas do namespace raiz, por algum motivo? Ou olhando o resultado no meu sistema, talvez os serviços systemd com 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

Observe que este problema - incapaz de renomear / home apesar de não mostrar como um ponto de montagem (no namespace atual) - deve ser corrigido no kernel do Linux versão 3.18 +.

link

como descobrir o namespace de um processo específico

lsns pode ser útil se você puder instalá-lo. Mais comandos possíveis:

Listar namespaces de montagem:

# readlink /proc/*/task/*/ns/mnt | sort -u

Identifique o namespace de montagem raiz:

# readlink /proc/1/ns/mnt

Localizar processos com um determinado namespace de montagem

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

Inspecione o namespace de um determinado processo:

# cat /proc/1/task/1/mountinfo

[*] EBUSY A renomeação falha porque oldpath ou newpath é um diretório que               está em uso por algum processo (talvez como diretório de trabalho atual,               ou como diretório raiz, ou porque ele estava aberto para leitura) ou é               em uso pelo sistema (por exemplo, como ponto de montagem) , enquanto o               sistema considera isso um erro. (Observe que não há requisitos               para retornar EBUSY em tais casos - não há nada de errado com               fazendo a renomeação de qualquer maneira, mas é permitido retornar EBUSY se o               O sistema não pode lidar com tais situações.)

    
por 07.03.2017 / 23:37
4

Era o NetworkManager.

A execução de systemctl stop mysqld httpd postfix ipmievd tuned atd rsyslog smartd crond irqbalance gssproxy polkit chronyd não ajudou, mas tornou a tabela de processos muito pequena.

Depois de systemctl stop NetworkManager , consegui renomear / home.

    
por 08.03.2017 / 15:56