zerofree를 실행할 수 있도록 읽기 전용으로 마운트하려고 할 때 "mount: / is busy"

zerofree를 실행할 수 있도록 읽기 전용으로 마운트하려고 할 때 "mount: / is busy"

zerofree다음을 사용하여 VirtualBox vdi 이미지를 압축할 수 있도록 Ubuntu 11.04에서 실행하려고 합니다 .

VBoxManage modifyhd Ubuntu.vdi --compact

zerofree디스크 이미지를 실행하려면 읽기 전용으로 마운트해야 합니다. 나는 팔로우하고 있다이 지침이는 복구 모드에서 읽기 전용으로 다시 마운트하기 위해 이것을 사용한다고 말합니다(루트 쉘 프롬프트로 드롭):

mount -n -o remount,ro -t ext2 /dev/sda1 /

하지만 이렇게 하면 오류가 발생합니다.

mount: / is busy

이 작업을 수행하는 방법에 대한 아이디어가 있습니까?

후속 조치: Jari의 답변에 따라이 게시물이 명령을 실행하면 문제가 해결됩니다.

service rsyslog stop
service network-manager stop
killall dhclient

답변1

일부 프로세스는 쓰기를 위해 파일을 열어두고 있습니다. 예를 들어 로그를 작성하는 프로그램 rsyslogd, 네트워킹 도구 dhclient등이 될 수 있습니다 . 하나씩 종료하고 다시 마운트해 보면 효과가 있을 수 있습니다.

프로그램을 사용하여 특정 파일을 사용하는 프로세스를 찾을 수 있습니다 fuser. 예를 들어 fuser -v -m /프로세스 목록을 반환합니다. 그러나 파일 시스템을 바쁘게 유지하는 것이 이들 중 하나인지는 확실하지 않습니다.

답변2

Peter 답변 개선 :

내 마운트 지점을 사용하는 프로세스를 종료할 수 없습니다. 그래서 저는 이렇게 했습니다:

  • /etc/fstab다음 부팅 시 읽기 전용으로 시작하도록 편집합니다 . 전:/dev/sda1 / ext2 ro 0 1
  • 재부팅하고 셸을 엽니다(예: 호스트 키 + F2).
  • 제로프리 실행

시스템을 "복구"하려면:

  • 읽기-쓰기 옵션으로 마운트:$ mount -o remount,rw /dev/sda1
  • 다시 편집하여 /etc/fstab원래 값 복원

추가: 필요한 경우 열림복구 모드어떤 단계에서든:

  • 재부팅
  • VM이 로드되는 동안 교대근무를 유지하세요.
  • 고급 옵션 > 복구 모드의 커널 옵션 > 루트 쉘 프롬프트에 놓기

답변3

쓰기 위해 열려 있는 파일이 있는 프로세스가 없는 경우에만 파일 시스템을 읽기 전용으로 다시 마운트할 수 있습니다. 실행하여 lsof /루트 파일 시스템에 파일이 열려 있는 프로세스를 확인합니다. 쓰기 위해 열려 있는 파일이 열에 표시됩니다 FD. 다음을 사용하여 필터링할 수 있습니다.

lsof / | awk '$4 ~ /[0-9].*w/'

프로세스 ID를 자동으로 필터링하려면 다음 출력을 구문 분석하세요 lsof -F pa.

lsof -F pa /home | awk '/^p/ {pid = substr($0, 2)} /^a.*w/ {print pid}'

답변4

때로는 마운트를 계속 사용하는 프로세스가 너무 많아서 마운트를 읽기 전용으로 재부팅하는 것이 더 쉬울 수도 있습니다.

에서 루트 파일 시스템의 항목을 변경합니다 /etc/fstab. 예를 들면 다음과 같습니다.

/dev/sda1 / ext2 relatime,rw,errors=remount-ro 0 1

다음과 같이 됩니다:

/dev/sda1 / ext2 noatime,ro 0 1

재부팅 시 파일 시스템은 읽기 전용으로 마운트되므로 실행할 수 있습니다 zerofree.

작업이 끝나면 파일 시스템 읽기/쓰기를 다시 마운트하고( mount -o remount,rw /) 변경 사항을 취소합니다 /etc/fstab.

에서 영감을 받다https://wiki.debian.org/ReadonlyRoot#Enable_readonly_root

관련 정보