mv:无法将“home”移动到“home-old”:设备或资源繁忙

mv:无法将“home”移动到“home-old”:设备或资源繁忙

我想/home用符号链接替换我的 nfs 安装主目录。

仅 root 登录,/home 不是单独的文件系统,lsof 显示没有锁,selinux 是宽松的。我缺少什么?

我通过 ssh 直接以 root 身份登录:

[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

我还可以检查什么?

更多系统信息:

[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" 

答案1

mv:无法将“/home”移动到“/home-old”:设备或资源繁忙

我能想到的唯一“使用”[*] 是一个挂载点,它可以防止文件名发生更改。

我还可以检查什么?

我不确定,但如果挂载仍然存在于另一个挂载命名空间中,也许会发生这种情况。因为出于某种原因它没有从根命名空间传播卸载?或者查看我的系统上的结果,也许 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

请注意,此问题 - 尽管 /home 未显示为挂载点(在当前命名空间中),但仍无法重命名 - 应在 Linux 内核版本 3.18+ 中修复。

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


如何找出特定进程的名称空间?

lsns如果您可以安装它,可能会很有用。更多可能的命令:

列出挂载命名空间:

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

识别根挂载命名空间:

# readlink /proc/1/ns/mnt

查找具有给定挂载命名空间的进程

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

检查给定进程的命名空间:

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

[*] EBUSY 重命名失败,因为 oldpath 或 newpath 是某个进程正在使用的目录(可能作为当前工作目录,或作为根目录,或因为它已打开以供读取)或正在被系统使用(例如作为挂载点),而系统认为这是一个错误。 (请注意,在这种情况下不需要返回 EBUSY — 无论如何进行重命名都没有问题 — 但如果系统无法以其他方式处理此类情况,则允许返回 EBUSY。)

答案2

这是网络管理员。

运行systemctl stop mysqld httpd postfix ipmievd tuned atd rsyslog smartd crond irqbalance gssproxy polkit chronyd没有帮助,但使进程表变得非常小。

之后systemctl stop NetworkManager,我能够重命名/home。

答案3

您可以在单个用户上启动并对主目录进行任何更改。

  1. 重新启动我的系统并在 grub 选择期间按按编辑该行e
  2. 在线linux16删除rhgb&quite选项并放入其放置的init=/bin/bash.
  3. 按下按钮ctrl+x开始。这将在 bash 控制台上提示您。
  4. /通过发出以下命令重新挂载读/写选项mount -o remount,rw /
  5. 之后,您可以编辑/home目录、重命名等。
  6. 工作完成后,通过以下命令重新标记 selinuxtouch /.autorelabel
  7. 最后执行exec /sbin/init即可正常启动。

@sourcejedi:谢谢您的回答。

相关内容