Linux

mv:無法將“home”移動到“home-old”:設備或資源繁忙

  • October 31, 2019

我想/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" 

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 是某個程序正在使用的目錄(可能作為目前工作目錄,或者作為根目錄,或者因為它已打開以供讀取)或正在被系統使用(例如作為 mount point),而係統認為這是一個錯誤。 (請注意,在這種情況下不需要返回 EBUSY ——無論如何進行重命名並沒有錯——但如果系統無法以其他方式處理這種情況,則允許返回 EBUSY。)

引用自:https://unix.stackexchange.com/questions/349849