Saya ingin mengganti /home
dengan symlink ke dir home-mount nfs saya.
Hanya root yang login, / home bukan sistem file yang terpisah, lsof tidak menunjukkan kunci, selinux permisif. Apa yang saya lewatkan?
Saya masuk secara langsung sebagai root melalui 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
Apa lagi yang bisa saya periksa?
Info sistem lebih lanjut:
[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"
linux
centos
filesystems
TheAmigo
sumber
sumber
umount -f -l /home
top
ataups
. Mereka mencoba untuk menonton apa yang sedang dilakukan menggunakan sekarangstrace
. Situasi itu aneh tmm. UPDATE: periksa jugalsof
output denganfuser
satu berjaga-jaga.Jawaban:
Satu-satunya "penggunaan" [*] yang dapat saya pikirkan, yang menyimpan nama file dari perubahan, adalah titik mount.
Saya tidak yakin, tapi mungkin ini bisa terjadi jika mount masih ada di mount namespace lain. Karena itu tidak mendapatkan unmount yang diperbanyak dari root namespace, untuk beberapa alasan? Atau melihat hasil pada sistem saya, mungkin layanan systemd dengan
ProtectHome
?Perhatikan masalah ini - tidak dapat mengubah nama / rumah meskipun tidak muncul sebagai titik mount (dalam namespace saat ini) - harus diperbaiki dalam kernel Linux versi 3.18+.
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?h=linux-3.18.y&id=8ed936b5671bfb33d89bc60bdcc7cf0470bafefe
bagaimana cara mengetahui namespace dari proses tertentu?
lsns
mungkin berguna jika Anda dapat menginstalnya. Lebih banyak perintah yang mungkin:Daftar mount namespaces:
Identifikasi root mount namespace:
Temukan proses dengan mount namespace yang diberikan
Periksa namespace dari proses yang diberikan:
[*] EBUSY Ganti nama gagal karena oldpath atau newpath adalah direktori yang digunakan oleh beberapa proses (mungkin sebagai direktori kerja saat ini, atau sebagai direktori root, atau karena itu terbuka untuk dibaca) atau sedang digunakan oleh sistem (untuk contohnya sebagai mount point) , sementara sistem menganggap ini sebagai kesalahan. (Perhatikan bahwa tidak ada keharusan untuk mengembalikan EBUSY dalam kasus seperti itu — toh tidak ada yang salah dengan melakukan penggantian nama) - tetapi diperbolehkan untuk mengembalikan EBUSY jika sistem tidak dapat menangani situasi seperti itu.)
sumber
Itu NetworkManager.
Berlari
systemctl stop mysqld httpd postfix ipmievd tuned atd rsyslog smartd crond irqbalance gssproxy polkit chronyd
tidak membantu, tetapi membuat tabel proses menjadi sangat kecil.Setelah itu
systemctl stop NetworkManager
, saya bisa mengganti nama / rumah.sumber
Anda dapat boot pada satu pengguna dan membuat perubahan pada direktori home.
e
linux16
baris dihapusrhgb
&quite
pilihan dan dimasukkan ke dalam mereka ditempatkaninit=/bin/bash
.ctrl+x
untuk memulai. Ini akan membuat Anda tertarik pada bash console./
dengan opsi baca / tulis dengan menerbitkanmount -o remount,rw /
/home
direktori, ganti nama, dll.touch /.autorelabel
exec /sbin/init
untuk memulai boot seperti biasa.@sourcejedi: terima kasih atas jawaban Anda.
sumber