mv: kann "home" nicht nach "home-old" verschieben: Gerät oder Ressource belegt

10

Ich möchte durch /homeeinen Symlink zu meinen nfs-gemounteten Home-Verzeichnissen ersetzen.

Nur root ist angemeldet, / home ist kein separates Dateisystem, lsof zeigt keine Sperren an, selinux ist zulässig. Was vermisse ich?

Ich bin direkt als root über ssh angemeldet:

[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

Was kann ich noch überprüfen?

Weitere Systeminformationen:

[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
quelle
Versuchen Sie die faule Umount-Option wie inumount -f -l /home
Valentin Bajrami
Versuchen Sie, einen verdächtigen Prozess nachzuschlagen, der zu viele Ressourcen verbraucht, ohne Ihnen mit topoder bekannt zu sein ps. Sie versuchen zu beobachten, was es gerade tut strace. Diese Situation ist seltsam, tmm. UPDATE: Überprüfen Sie auch die lsofAusgabe mit fusereiner für alle Fälle.
ddnomad
1
@ val0x00ff Wie Sie in der obigen Ausgabe sehen können, ist / home kein Mountpunkt.
TheAmigo
1
@ddnomad fuser / home hat auch keine Ausgabe. Es ist ein frisch installiertes System, das im Leerlauf sitzt und keine ausgelasteten Prozesse hat.
TheAmigo
@ TheAmigo Ich verstehe. Ich nehme an, Sie haben bereits versucht, den Host einfach neu zu starten. Sie können auch versuchen, über das GRUB-Menü in einen abgesicherten Modus zu booten und es dort zu versuchen.
ddnomad

Antworten:

9

mv: kann "/ home" nicht nach "/ home-old" verschieben: Gerät oder Ressource belegt

Die einzige "Verwendung" [*], die mir einfällt und die den Namen einer Datei vor dem Ändern bewahrt, ist ein Einhängepunkt.

Was kann ich noch überprüfen?

Ich bin nicht sicher, aber vielleicht könnte dies passieren, wenn der Mount noch in einem anderen Mount-Namespace vorhanden ist. Weil aus irgendeinem Grund keine Unmounts aus dem Root-Namespace weitergegeben werden? Oder schauen Sie sich das Ergebnis auf meinem System an, vielleicht mit systemd-Diensten mit 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

Beachten Sie, dass dieses Problem - das nicht umbenannt werden kann / obwohl es nicht als Einhängepunkt angezeigt wird (im aktuellen Namespace) - in der Linux-Kernel-Version 3.18+ behoben werden sollte.

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?h=linux-3.18.y&id=8ed936b5671bfb33d89bc60bdcc7cf0470ba52fe


Wie finde ich den Namespace eines bestimmten Prozesses heraus?

lsnskann nützlich sein, wenn Sie es installieren können. Weitere mögliche Befehle:

Liste der Mount-Namespaces:

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

Identifizieren Sie den Root-Mount-Namespace:

# readlink /proc/1/ns/mnt

Suchen Sie Prozesse mit einem bestimmten Mount-Namespace

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

Überprüfen Sie den Namespace eines bestimmten Prozesses:

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

[*] EBUSY Das Umbenennen schlägt fehl, weil oldpath oder newpath ein Verzeichnis ist, das von einem Prozess verwendet wird (möglicherweise als aktuelles Arbeitsverzeichnis oder als Stammverzeichnis oder weil es zum Lesen geöffnet war) oder vom System verwendet wird (z Beispiel als Einhängepunkt) , während das System dies als Fehler betrachtet. (Beachten Sie, dass es in solchen Fällen nicht erforderlich ist, EBUSY zurückzugeben - es ist sowieso nichts Falsches daran, die Umbenennung vorzunehmen -, aber es ist zulässig, EBUSY zurückzugeben, wenn das System solche Situationen nicht anders behandeln kann.)

sourcejedi
quelle
/ home war noch nie ein Mount in einem Namespace.
TheAmigo
Bedeutet das, dass Sie Befehle in der von mir vorgeschlagenen Weise verwendet haben? Da "nie" eine sehr starke Behauptung ist, würden meine Befehle dies nicht demonstrieren. Ich habe zu Beginn einen Befehl hinzugefügt, der einfacher (und hoffentlich funktionsfähig :) wäre, und eine zweite Spekulation darüber, warum dies aufgrund des Ergebnisses auf meinem System passieren könnte.
Sourcejedi
Ich habe eine andere "kaputte" Maschine gefunden und Ihr grep-Befehl zeigt tatsächlich mit dem Finger auf NetworkManager. Mein "NM stoppen, umbenennen, NM neu starten" funktioniert also, aber Ihr grep von mountinfo ist das, was den Schuldigen findet.
TheAmigo
(weil /lib/systemd/system/NetworkManager.service ProtectHome verwendet, zumindest auf den Systemen, die wir betrachten)
sourcejedi
6

Es war NetworkManager.

Laufen systemctl stop mysqld httpd postfix ipmievd tuned atd rsyslog smartd crond irqbalance gssproxy polkit chronydhat nicht geholfen, aber die Prozesstabelle sehr klein gemacht.

Danach systemctl stop NetworkManagerkonnte ich / home umbenennen.

TheAmigo
quelle
Ich musste nur "Service NetworkManager Stop" ausführen und konnte dann umziehen / nach Hause und dann einen Neustart durchführen, um sicherzustellen, dass alles in Ordnung war.
SDJuan
Vielen Dank. Dies ist überhaupt nicht offensichtlich und ich musste Dutzende von Seiten lesen, auf denen über / home als Einhängepunkt gesprochen wurde, was eindeutig nicht in der OP-Frage enthalten ist. Ich fand, dass das Stoppen von NetworkManager in meinem Fall auch beim Ausführen von Redhat 7.6 hilfreich war.
Labradort
0

Sie können auf einem einzelnen Benutzer booten und Änderungen am Ausgangsverzeichnis vornehmen.

  1. Neustart meines Systems und Durring Grub-Auswahl Bearbeiten Sie die Zeile durch Drücken von e
  2. In linux16Zeile entfernt rhgb& quiteOptionen und in ihre platziert setzen init=/bin/bash.
  3. Die gedrückt ctrl+x, um zu starten. Dies wird Sie auf der Bash-Konsole auffordern.
  4. Montage /mit Lese- / Schreiboptionen durch Ausgabe erneutmount -o remount,rw /
  5. Danach können Sie Ihr /homeVerzeichnis bearbeiten, umbenennen usw.
  6. Nachdem die Arbeit erledigt ist, beschriften Sie den Selinux durch Ausgabe neu touch /.autorelabel
  7. Schließlich ausführen exec /sbin/initals normal starten Boot.

@sourcejedi: Danke für deine Antwort.

igiannak
quelle