zerofree
다음을 사용하여 VirtualBox vdi 이미지를 압축할 수 있도록 Ubuntu 11.04에서 실행하려고 합니다 .
VBoxManage modifyhd Ubuntu.vdi --compact
실행하려면 zerofree
디스크 이미지가 읽기 전용으로 마운트됩니다. 나는 후속 조치를 취하고 있다이 지침이를 사용하여 복구 모드에서 읽기 전용으로 다시 마운트하라는 메시지가 표시됩니다(루트 쉘 프롬프트로 드롭).
mount -n -o remount,ro -t ext2 /dev/sda1 /
하지만 이렇게 하면 오류가 발생합니다.
mount: / is busy
이 작업을 수행하는 방법에 대한 아이디어가 있습니까?
후속 조치: Jia Li의 답변에 따라이 게시물이 명령을 실행하면 문제를 해결할 수 있습니다.
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이 로드되는 동안 Shift 키를 누르세요.
- 고급 옵션 > 복구 모드의 커널 옵션 > 루트 셸 프롬프트에서 제거
답변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