mv:「home」を「home-old」に移動できません:デバイスまたはリソースがビジーです


10

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

次のようにレイジーumountオプションを試してくださいumount -f -l /home
Valentin Bajrami

topまたはで知られていない間に多くのリソースを消費する不審なプロセスを調べてみてくださいps。彼らは今それが何をしているのかをを使って見ようとするstrace。そのような状況は変です。更新:念のためlsoffuser1つで出力を再確認してください。
ddnomad 2017年

1
上記の出力でわかるように、@ val0x00ff、/ homeはマウントポイントではありません。
TheAmigo 2017年

1
@ddnomad fuser / homeにも出力がありません。新たにインストールされたシステムはアイドル状態で、ビジーなプロセスはありません。
TheAmigo 2017年

@TheAmigoなるほど。すでにホストを再起動しようとしていると思います。また、GRUBメニューからセーフモードで起動して、そこで試すこともできます。
ddnomad 2017年

回答:


9

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を返すことができます。)


/ homeはどのネームスペースでもマウントされたことはありません。
TheAmigo 2017年

それはあなたが私が提案した行に沿ってコマンドを使用したという意味ですか?「決して」は非常に強力な主張であるため、私のコマンドはそれを実証しません。最初に、よりシンプルな(そしてうまくいけば機能する)コマンドを追加しました。また、これが私のシステムの結果に基づいて発生する理由についての2番目の推測です。
sourcejedi 2017年

私は別の「壊れた」マシンを見つけました、そしてあなたのgrepコマンドは確かにNetworkManagerを指しています。したがって、「NMの停止、名前の変更、NMの再起動」は機能しますが、mountinfoのgrepが原因を特定します。
TheAmigo 2017年

(/lib/systemd/system/NetworkManager.serviceは、少なくとも私たちが調べているシステムではProtectHomeを使用しているため)
sourcejedi

6

それはNetworkManagerでした。

実行systemctl stop mysqld httpd postfix ipmievd tuned atd rsyslog smartd crond irqbalance gssproxy polkit chronydしても効果はありませんでしたが、プロセステーブルが非常に小さくなりました。

systemctl stop NetworkManager、/ homeの名前を変更できました。


「service NetworkManager stop」のみを実行する必要があり、/ homeを移動してから再起動して、すべてが正常であることを確認しました。
sdjuan

どうもありがとうございました。これはまったく明白ではなく、/ homeをマウントポイントとして話している何十ものページを読む必要がありましたが、これは明らかにOPの質問には含まれていません。私の場合、Redhat 7.6を実行しているときにNetworkManagerを停止することも役立つことがわかりました。
ラブラドール

0

シングルユーザーで起動し、ホームディレクトリに変更を加えることができます。

  1. システムを再起動し、grubの選択を繰り返している間に、 e
  2. linux16行削除rhgbquiteオプションとその配置に置きますinit=/bin/bash
  3. ctrl+x開始するために押されました。これにより、bashコンソールでプロンプトが表示されます。
  4. /発行することにより、読み取り/書き込みオプションで再マウントしますmount -o remount,rw /
  5. その後、/homeディレクトリを編集して名前を変更できます。
  6. 作業が完了したら、次のコマンドを実行してselinuxにラベルを付け直します。 touch /.autorelabel
  7. 最後に実行exec /sbin/initして、通常どおりブートを開始します。

@sourcejedi:回答ありがとうございます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.