mv: impossibile spostare "home" su "home-old": dispositivo o risorsa occupata


10

Voglio sostituire /homecon un link simbolico ai miei dir home montati su nfs.

Solo il root è loggato, / home non è un filesystem separato, lsof non mostra alcun lock, selinux è permissivo. Cosa mi sto perdendo?

Ho effettuato l'accesso direttamente come root tramite 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

Cos'altro posso controllare?

Ulteriori informazioni di 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" 

Prova l'opzione pigro umount come inumount -f -l /home
Valentin Bajrami

Prova a cercare un processo sospetto che consuma molte risorse senza essere conosciuto con topo ps. Provano a vedere cosa sta facendo in questo momento usando strace. Questa situazione è strana tmm. AGGIORNAMENTO: ricontrolla anche l' lsofoutput con fuseruno nel caso.
ddnomad,

1
@ val0x00ff come puoi vedere nell'output sopra, / home non è un punto di montaggio.
Amigo

1
Anche @ddnomad fuser / home non ha output. È un sistema appena installato seduto inattivo, senza processi occupati.
Amigo

@TheAmigo che vedo. Presumo che tu abbia già provato a riavviare semplicemente l'host. Potresti anche provare ad avviare in modalità provvisoria dal menu di GRUB e provarlo lì.
ddnomad

Risposte:


9

mv: impossibile spostare "/ home" su "/ home-old": dispositivo o risorsa occupata

L'unico "uso" [*] che mi viene in mente, che detiene la modifica del nome di un file, è un punto di montaggio.

Cos'altro posso controllare?

Non sono sicuro, ma forse questo potrebbe accadere se il mount esiste ancora in un altro spazio dei nomi di mount. Perché non sta ottenendo gli smontaggi propagati dallo spazio dei nomi radice, per qualche motivo? O guardando il risultato sul mio sistema, magari con i servizi di 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

Nota questo problema - impossibile rinominare / home nonostante non sia mostrato come punto di mount (nello spazio dei nomi corrente) - dovrebbe essere risolto nella versione 3.18+ del kernel di Linux.

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?

lsnspotrebbe essere utile se è possibile installarlo. Più comandi possibili:

Elenco spazi dei nomi di montaggio:

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

Identifica lo spazio dei nomi di root mount:

# readlink /proc/1/ns/mnt

Trova i processi con un determinato spazio dei nomi di mount

# 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 non riesce perché oldpath o newpath è una directory che è in uso da qualche processo (forse come directory di lavoro corrente o come directory di root o perché era aperta per la lettura) o è in uso dal sistema (per esempio come mount point) , mentre il sistema lo considera un errore. (Si noti che in tali casi non è necessario restituire EBUSY - comunque non c'è nulla di sbagliato nel fare la ridenominazione - ma è consentito restituire EBUSY se il sistema non può altrimenti gestire tali situazioni.)


/ home non è mai stato un mount in nessuno spazio dei nomi.
Amigo

Significa che hai usato i comandi seguendo le linee che ho suggerito? Poiché "mai" è un'affermazione molto forte, i miei comandi non lo dimostrerebbero. Ho aggiunto un comando all'inizio che sarebbe più semplice (e si spera funzionale :), e una seconda speculazione sul perché ciò potrebbe accadere in base al risultato sul mio sistema.
Fontejedi

Ho trovato un'altra macchina "rotta" e il tuo comando grep punta davvero il dito su NetworkManager. Quindi il mio "stop NM, rinomina, riavvia NM" funziona, ma il tuo grep di mountinfo è ciò che trova il colpevole.
Amigo

(perché /lib/systemd/system/NetworkManager.service utilizza ProtectHome, almeno sui sistemi che stiamo esaminando)
sourcejedi

6

Era NetworkManager.

L'esecuzione systemctl stop mysqld httpd postfix ipmievd tuned atd rsyslog smartd crond irqbalance gssproxy polkit chronydnon ha aiutato, ma ha reso la tabella dei processi molto piccola.

Dopo systemctl stop NetworkManager, sono stato in grado di rinominare / home.


Avevo solo bisogno di "interrompere NetworkManager di servizio" e quindi sono stato in grado di spostare / home, quindi ho fatto un riavvio per assicurarmi che tutto andasse bene.
sdjuan,

Grazie mille. Questo non è affatto ovvio e ho dovuto leggere dozzine di pagine che parlano di / home come punto di montaggio, il che chiaramente non rientra nella domanda OP. Ho scoperto che anche l'interruzione di NetworkManager mi ha aiutato a eseguire Redhat 7.6.
labradort,

0

È possibile avviare un singolo utente e apportare eventuali modifiche alla home directory.

  1. Riavviato il mio sistema e durante la selezione di grub modifica la riga premendo e
  2. In linux16linea rimosso rhgbe quiteopzioni e messo al loro posto init=/bin/bash.
  3. Il premuto ctrl+xper iniziare. Questo ti prometterà sulla console bash.
  4. Rimontare /con le opzioni di lettura / scrittura emettendomount -o remount,rw /
  5. Dopodiché puoi modificare la tua /homedirectory rinominandola ecc.
  6. Al termine del lavoro rietichettare il selinux emettendo touch /.autorelabel
  7. Infine esegui exec /sbin/initper avviare l'avvio come di consueto.

@sourcejedi: grazie per la risposta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.