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