mv:「/home」を「/home-old」に移動できません:デバイスまたはリソースがビジーです
私が考えることができる唯一の「使用」[*]は、変更されないようにファイルの名前を保持しますが、マウントポイントです。
<ブロック引用>他に何が確認できますか?
確かではありませんが、マウントが別のマウント名前空間にまだ存在する場合、おそらくこれが発生する可能性があります。何らかの理由で、ルート名前空間から伝播されたアンマウントを取得していないためですか?または、私のシステムで結果を見ると、おそらく ProtectHome
の systemd サービス ?
$ 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 を返すことができます。)
それは NetworkManager でした。
systemctl stop mysqld httpd postfix ipmievd tuned atd rsyslog smartd crond irqbalance gssproxy polkit chronyd
を実行中 役に立ちませんでしたが、プロセス テーブルが非常に小さくなりました。
systemctl stop NetworkManager
の後 、/home の名前を変更できました。