mv : "home"을 "home-old"로 이동할 수 없음 : 장치 또는 리소스 사용 중


10

/home내 nfs 마운트 홈 디렉토리에 대한 심볼릭 링크 로 교체하고 싶습니다 .

루트 만 로그인하고 / home은 별도의 파일 시스템이 아니며 lsof는 잠금을 표시하지 않으며 selinux는 허용됩니다. 내가 무엇을 놓치고 있습니까?

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
발렌틴 Bajrami

top또는 로 알려지지 않은 상태에서 많은 리소스를 소비하는 의심스러운 프로세스를 찾아보십시오 ps. 그들은 현재 사용중인 작업을 보려고합니다 strace. 그 상황은 이상하다. 업데이트 : 경우를 대비 lsof하여 출력을 다시 확인하십시오 fuser.
ddnomad

1
위 출력에서 ​​볼 수 있듯이 @ val0x00ff는 / home이 마운트 지점이 아닙니다.
TheAmigo

1
@ddnomad 퓨저 / home에도 출력이 없습니다. 유휴 상태에 있고 바쁜 프로세스없이 새로 설치된 시스템입니다.
TheAmigo

@TheAmigo 나는 본다. 이미 호스트를 재부팅하려고 시도했다고 가정합니다. GRUB 메뉴에서 안전 모드로 부팅하여 시도 할 수도 있습니다.
ddnomad

답변:


9

mv : "/ home"을 "/ home-old"로 이동할 수 없음 : 장치 또는 리소스 사용량이 많음

내가 생각할 수있는 유일한 "사용"[*]은 파일 이름이 바뀌는 것을 막는 마운트 포인트입니다.

다른 무엇을 확인할 수 있습니까?

확실하지는 않지만 마운트가 다른 마운트 네임 스페이스에 여전히 존재하는 경우 발생할 수 있습니다. 루트 네임 스페이스에서 언 마운트가 전파되지 않기 때문에 어떤 이유로? 또는 내 시스템의 결과를 보면 아마도 시스템 서비스가 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

그것은 내가 제안한 행을 따라 명령을 사용했음을 의미합니까? "never"는 매우 강력한 주장이므로 내 명령은이를 보여주지 않습니다. 처음에는 더 간단하고 (기능적으로 :) 기능하는 명령과 시스템의 결과에 따라 이것이 왜 발생할 수 있는지에 대한 두 번째 추측을 추가했습니다.
sourcejedi

다른 "손상된"시스템을 발견했고 grep 명령이 실제로 NetworkManager를 가리 킵니다. 따라서 "NM 중지, 이름 바꾸기, NM 재시작"이 작동하지만 mountinfo의 grep이 범인을 찾는 것입니다.
TheAmigo

(/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 중지도 도움이되었습니다.
labradort

0

단일 사용자로 부팅하고 홈 디렉토리를 변경할 수 있습니다.

  1. 시스템을 재부팅하고 grub 선택 중에을 눌러 라인을 편집하십시오. e
  2. 에서 linux16라인 제거 rhgbquite옵션과 배치 자신에 넣어 init=/bin/bash.
  3. 누르면 ctrl+x시작됩니다. 이것은 bash 콘솔에서 당신을 promt 것입니다.
  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.