mv: "होम" को "होम-ओल्ड" पर नहीं ले जा सकते: डिवाइस या संसाधन व्यस्त


10

मैं /homeअपने nfs- माउंटेड होम डायर के लिए सिम्लिंक के साथ बदलना चाहता हूं।

केवल रूट लॉग इन है, / होम एक अलग फाइल सिस्टम नहीं है, lsof कोई लॉक नहीं दिखाता है, सेलिनक्स अनुमेय है। मैं क्या खो रहा हूँ?

मैं सीधे ssh के माध्यम से रूट के रूप में लॉग इन हूं:

[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 -f -l /home
वैलेंटाइन बजरमी

एक ऐसी संदिग्ध प्रक्रिया को देखने की कोशिश करें जो आपके साथ topया साथ नहीं जाने पर बहुत संसाधनों का उपभोग करती है ps। उन्हें देखने का प्रयास करें कि यह अभी क्या उपयोग कर रहा है strace। वह स्थिति अजीब tmm है। अद्यतन: बस एक मामले में एक के lsofसाथ डबल चेक आउटपुट fuser
ddnomad

1
@ val0x00ff जैसा कि आप ऊपर दिए गए आउटपुट में देख सकते हैं, / घर माउंट पॉइंट नहीं है।
TheAmigo

1
@ddnomad फ्यूज़र / होम का भी कोई आउटपुट नहीं है। यह एक ताजा-स्थापित प्रणाली है, जो बेकार बैठी है, कोई व्यस्त प्रक्रिया नहीं है।
TheAmigo

@ TheAmigo मैं देख रहा हूं। मुझे लगता है कि आप पहले से ही मेजबान को रिबूट करने की कोशिश कर चुके हैं। आप GRUB मेनू से एक सुरक्षित मोड में बूट करने की कोशिश कर सकते हैं और इसे वहां आज़मा सकते हैं।
ddnomad

जवाबों:


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

इस समस्या पर ध्यान दें - माउंट प्वाइंट (वर्तमान नाम स्थान में) के रूप में नहीं दिखाने के बावजूद / घर का नाम बदलने में असमर्थ - लिनक्स कर्नेल संस्करण 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 नाम बदलने में विफल रहता है क्योंकि पुरानापथ या नयापथ एक निर्देशिका है जो किसी प्रक्रिया द्वारा उपयोग में है (शायद वर्तमान कार्यशील निर्देशिका के रूप में, या रूट निर्देशिका के रूप में, या क्योंकि यह पढ़ने के लिए खुला था) या सिस्टम द्वारा उपयोग में है (के लिए) माउंट बिंदु के रूप में उदाहरण) , जबकि सिस्टम इसे एक त्रुटि मानता है। (ध्यान दें कि इस तरह के मामलों में EBUSY को वापस करने की कोई आवश्यकता नहीं है - वैसे भी नाम बदलने में कुछ भी गलत नहीं है - लेकिन अगर सिस्टम अन्यथा ऐसी स्थितियों को संभाल नहीं सकता है, तो EBUSY को वापस करने की अनुमति है।)


/ घर कभी भी किसी भी नामस्थान में माउंट नहीं रहा है।
TheAmigo

क्या इसका मतलब है कि आपने मेरे द्वारा सुझाई गई लाइनों के साथ कमांड का उपयोग किया है? क्योंकि "कभी नहीं" एक बहुत मजबूत दावा है, मेरे आदेश यह प्रदर्शित नहीं करेंगे। मैंने शुरुआत में एक कमांड जोड़ा है जो सरल होगा (और उम्मीद है कि कार्यात्मक :), और मेरे सिस्टम पर परिणाम के आधार पर ऐसा होने की दूसरी अटकलें क्यों हो सकती हैं।
sourcejedi

मुझे एक और "टूटी हुई" मशीन मिली और आपका grep कमांड वास्तव में NetworkManager पर उंगली दिखाता है। तो मेरा "NM को रोकें, नाम बदलें, NM को पुनः आरंभ करें" काम करता है, लेकिन आपके माउंटिनफॉ का grep वही है जो अपराधी को ढूंढता है।
TheAmigo

(क्योंकि /lib/systemd/system/NetworkManager.service प्रोटेक्टहोम का उपयोग करता है, कम से कम उन प्रणालियों पर जो हम देख रहे हैं)
sourcejedi

6

यह NetworkManager था।

रनिंग से systemctl stop mysqld httpd postfix ipmievd tuned atd rsyslog smartd crond irqbalance gssproxy polkit chronydमदद नहीं मिली, लेकिन इस प्रक्रिया की तालिका बहुत छोटी थी।

के बाद systemctl stop NetworkManager, मैं नाम बदलने / घर करने में सक्षम था।


मुझे केवल "सेवा NetworkManager स्टॉप" करने की आवश्यकता थी और फिर / घर स्थानांतरित करने में सक्षम था फिर यह सुनिश्चित करने के लिए एक रिबूट किया कि सब ठीक था।
sdjuan

आपका बहुत बहुत धन्यवाद। यह बिल्कुल स्पष्ट नहीं है और मुझे दर्जनों पृष्ठों को माउंट पॉइंट के रूप में / होम के बारे में बात करते हुए पढ़ना था, जो स्पष्ट रूप से ओपी प्रश्न में नहीं है। मैंने पाया कि NetworkManager ने भी मेरे मामले में मदद की, Redhat 7.6 चल रहा है।
लैब्राडॉर्ट

0

आप एकल उपयोगकर्ता पर बूट कर सकते हैं और होम डायरेक्टरी पर कोई भी बदलाव कर सकते हैं।

  1. मेरे सिस्टम को रिबूट किया और ग्रब चयन को दबाकर लाइन संपादित करें e
  2. में linux16लाइन से हटाया rhgbऔर quiteविकल्प और उनकी रखा में डाल init=/bin/bash
  3. ctrl+xशुरू करने के लिए दबाया । यह आपको bash कंसोल पर प्रोमोट करेगा।
  4. /जारी करके पढ़ने / लिखने के विकल्पों के साथ रिमाउंट करेंmount -o remount,rw /
  5. उसके बाद आप अपनी /homeनिर्देशिका का नाम बदल सकते हैं आदि।
  6. काम करने के बाद जारी करके सेलिनक्स को रिलेबल किया जाता है touch /.autorelabel
  7. अंत exec /sbin/initमें सामान्य रूप से बूट शुरू करने के लिए निष्पादित करें।

@ सोर्सजीडी: आपके उत्तर के लिए धन्यवाद।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.