mv: “home” u “home-old” a taşıyamaz: Aygıt veya kaynak meşgul


10

Ben /homenfs monte ev dirs bir symlink ile değiştirmek istiyorum .

Sadece root oturumu açıldı, / home ayrı bir dosya sistemi değil, lsof kilit göstermiyor, selinux izin veriyor. Neyi kaçırıyorum?

Doğrudan ssh üzerinden root olarak giriş yaptım:

[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

Başka neleri kontrol edebilirim?

Daha fazla sistem bilgisi:

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

Tembel umount seçeneğini olduğu gibi deneyinumount -f -l /home
Valentin Bajrami

topVeya tarafından bilinmediği halde çok fazla kaynak tüketen şüpheli bir süreç aramaya çalışın ps. Şu anda ne yaptığını izlemeye çalışıyorlar strace. Bu durum tuhaf tmm. GÜNCELLEME: ayrıca lsof, fuserher ihtimale karşı çıktı ile iki kez kontrol edin .
ddnomad

1
@ val0x00ff Yukarıdaki çıktıda gördüğünüz gibi, / home bir bağlama noktası değildir.
TheAmigo

1
@ddnomad kaynaştırıcı / ev de çıktı yok. Yeni kurulmuş bir sistem boşta oturuyor, meşgul süreç yok.
TheAmigo

@TheAmigo anlıyorum. Sanırım zaten ana bilgisayarı yeniden başlatmayı denediniz. Ayrıca GRUB menüsünden güvenli bir moda önyükleme yapıp orada deneyebilirsiniz.
ddnomad

Yanıtlar:


9

mv: "/ home" öğesini "/ home-old" öğesine taşıyamaz: Aygıt veya kaynak meşgul

Düşünebileceğim tek "kullanım" [*] Bir dosyanın adını değiştirmekten alıkoyan bir bağlama noktasıdır.

Başka neleri kontrol edebilirim?

Emin değilim, ancak bağlama başka bir bağlama ad alanında hala varsa bu olabilir. Bazı nedenlerden ötürü, kök ad alanından dağılmayı kesmediği için mi? Ya da sistemimdeki sonuca bakarken, belki systemd hizmetleri 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

Bu sorunun (bir bağlanma noktası olarak gösterilmemesine rağmen (geçerli ad alanında) yeniden adlandırılamayan / ev değiştirilemeyen) Linux çekirdek 3.18 ve sonraki sürümlerinde düzeltilmesi gerektiğini unutmayın.

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


belirli bir sürecin isim alanını nasıl bulabilirim?

lsnskurabilirseniz faydalı olabilir. Diğer olası komutlar:

Bağlama ad alanlarını listele:

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

Kök bağlama ad alanını tanımlayın:

# readlink /proc/1/ns/mnt

Belirli bir mount ad alanına sahip işlemleri bulma

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

Belirli bir işlemin ad alanını inceleyin:

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

[*] EBUSY Eski yol veya yeni yol, bazı işlemler tarafından (belki de geçerli çalışma dizini veya kök dizin olarak veya okuma için açık olduğu için) veya sistem tarafından ( (bağlanma noktası olarak) , sistem bunu bir hata olarak görür . (Bu gibi durumlarda EBUSY'yi iade etme zorunluluğunun olmadığını unutmayın - yine de yeniden adlandırma yapmakta yanlış bir şey yoktur - ancak sistem bu tür durumları başka türlü ele alamazsa EBUSY'yi iade etmesine izin verilir.)


/ home hiçbir ad alanında hiçbir zaman bir bağlantı kuramadı.
TheAmigo

Bu, önerdiğim satırlar boyunca komutları kullandığınız anlamına mı geliyor? "Asla" çok güçlü bir iddia olduğu için, komutlarım bunu göstermezdi. Başlangıçta daha basit (ve umarım işlevsel :) olacak bir komut ekledim ve bunun sistemimdeki sonuca göre neden olabileceğine dair ikinci bir spekülasyon ekledim.
sourcejedi

Başka bir "kırık" makine buldum ve grep komutunuz gerçekten de NetworkManager'a işaret ediyor. Bu yüzden benim "stop NM, yeniden adlandır, NM'yi yeniden başlat" çalışır, ancak mountinfo'nun grep'i suçluyu bulur.
TheAmigo

(çünkü /lib/systemd/system/NetworkManager.service, en azından baktığımız sistemlerde ProtectHome kullanıyor)
sourcejedi

6

NetworkManager'dı.

Koşu systemctl stop mysqld httpd postfix ipmievd tuned atd rsyslog smartd crond irqbalance gssproxy polkit chronydyardımcı olmadı, ancak işlem tablosunu çok küçük yaptı.

Sonra systemctl stop NetworkManager, / home adını değiştirebildim.


Ben sadece "hizmet NetworkManager durdurma" yapmak gerekiyordu ve sonra / eve taşımak mümkün sonra tüm iyi olduğundan emin olmak için bir yeniden başlatma yaptı.
sdjuan

Çok teşekkür ederim. Bu hiç de açık değil ve OP sorusunda açıkça olmayan bir bağlama noktası olarak / home hakkında konuşan düzinelerce sayfa okumak zorunda kaldım. NetworkManager'ı durdurmanın da Redhat 7.6 çalıştıran davamda yardımcı olduğunu buldum.
labradort

0

Tek bir kullanıcıya önyükleme yapabilir ve ana dizinde herhangi bir değişiklik yapabilirsiniz.

  1. Sistemimi yeniden başlattım ve grub seçimini durdurarak satırı düzenleyin e
  2. In linux16hattı kaldırıldı rhgbve quiteseçenekleri ve yerleştirildiği onların koymak init=/bin/bash.
  3. ctrl+xBaşlamak için basıldı . Bu sizi bash konsolunda tanıtacaktır.
  4. Düzenleyerek /okuma / yazma seçenekleriyle yeniden montajmount -o remount,rw /
  5. Bundan sonra /homedizininizi yeniden adlandırabilirsiniz.
  6. İş bittikten sonra selinux'u tekrar etiketleyin touch /.autorelabel
  7. Son olarak exec /sbin/initönyüklemeyi normal şekilde başlatmak için yürütün .

@sourcejedi: Cevabınız için teşekkür ederim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.