다음 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
답변
일부 프로세스는 파일을 쓰기 위해 열어 둡니다. 예를 들어 rsyslogd
, 네트워킹 도구 와 같은 로그를 작성하는 프로그램 등이 될 수 있습니다 dhclient
. 하나씩 종료하고 다시 마운트하려고하면 작동 할 수 있습니다.
프로그램을 사용하여 특정 파일을 사용하는 프로세스를 찾을 수 있습니다 fuser
. 예를 들어 fuser -v -m /
프로세스 목록을 반환합니다. 그러나 파일 시스템을 계속 사용하는 것 중 하나인지 확실하지 않습니다.
답변
쓰기 위해 열린 파일이있는 프로세스가없는 경우 파일 시스템을 읽기 전용으로 다시 마운트 할 수 있습니다. 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}'
답변
베드로의 답변 개선 :
마운트 포인트를 사용하는 프로세스를 종료 할 수 없습니다. 그래서 나는 이것을했다 :
/etc/fstab
다음 부팅시 읽기 전용으로 시작하도록 편집하십시오 . 전의:/dev/sda1 / ext2 ro 0 1
- 셸을 재부팅하고 엽니 다 (예 : 호스트 키 + F2).
- 제로 프리 실행
시스템을 “복구”하려면 :
- 읽기-쓰기 옵션으로 마운트 :
$ mount -o remount,rw /dev/sda1
/etc/fstab
원래 값을 복원하여 다시 편집
추가 : 필요한 경우 모든 단계에서 복구 모드 를 엽니 다 .
- 재부팅
- VM이로드되는 동안 교대 유지
- 고급 옵션> 복구 모드의 커널 옵션> 루트 쉘 프롬프트로 드롭
답변
마운트를 사용 중 상태로 유지하는 프로세스가 너무 많기 때문에 마운트 읽기 전용으로 간단히 재부팅하는 것이 더 쉬울 수 있습니다.
루트 파일 시스템의 항목을 다음과 같이 변경하십시오 /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에서 영감을 얻음
답변
열려있는 파일로 모든 서비스 및 프로세스를 중지 한 후에도 여전히 장치를 마운트 해제하거나 다시 마운트 할 수없는 경우 스왑 파일 또는 스왑 파티션이있을 수 있습니다. fuser
또는로 표시되지 않습니다 lsof
. 다음과의 교환을 해제하십시오.
sudo swapoff -a
다음을 사용하여 스왑 파티션 또는 스왑 파일의 요약을 미리 확인하고 표시 할 수 있습니다.
swapon -s
또는:
cat /proc/swaps
명령을 사용하는 대신 sudo swapoff -a
서비스 또는 시스템 장치 를 중지하여 스왑을 비활성화 할 수도 있습니다 . 예를 들면 다음과 같습니다.
sudo systemctl stop dphys-swapfile
또는:
sudo systemctl stop var-swap.swap
필자의 경우, 쓰기를 위해 열린 파일로 서비스 및 프로세스를 중지하는 것 외에도 스왑을 해제해야하므로 fsck
재부팅하지 않고 루트 파티션 에서 실행하기 위해 루트 파티션을 읽기 전용으로 다시 마운트 할 수있었습니다 . 이것은 Raspbian Jessie를 실행하는 Raspberry Pi에서 필요했습니다.
답변
systemd를 사용하면 systemd-journald를 중지하여 디스크 쓰기가 중지됩니다.
# systemctl stop systemd-journald.socket
# systemctl stop systemd-journald.service
# mount -o ro,remount /
답변
좋아, 내가 한 일이있다
첫째, 내 목표는 것이었다 감소 내 /
( ROOT
내 디스크의 다른 하나를 추가하기 위해) 파티션을.
-
모든 것이 정리되고 백업되면 세션 실행에서 :
init 1
데스크탑이 사라지고 이제 Linux 콘솔에 있습니다 …
... Give root password for maintenance or press CTRL+D to continue TheRootPassword_SomethingLike1234
-
이제 마운트 시도
/
에서 읽기 전용 모드 :mount -o remount,ro / mount: / is busy
-
좋아, 지금부터 이론적으로 단일 사용자 모드 에 있지만
ps ax
많은 다른 프로세스를 보여줍니다!그들 모두를 죽이는 것은 정말 불가능하거나 위험합니다 … (
kill 1
금지되었습니다 … psdoom 을 할 시간이 없습니다내가 할 수있는 유일한 것은
System Request
입니다.이 두 가지 방법을 알고 있습니다 : (Documentation/sysrq.txt
커널 문서의 파일 참조 ) :-
먼저
magic SysRq key
키보드 커널 트랩을 사용하십시오.- 을 누른 상태로 AltGr유지 한 다음,
- 명중 PrtScn한 번만 있지만 공개하지 않습니다 AltGr,
- s한 번만 누르면
Emergency sync
커널에 요청을 보내고 - hit u,
Umount all
요청 을 보내면 마운트 된 모든 파일 시스템을 읽기 전용으로 다시 마운트합니다. - 그런 다음 놓습니다 AltGr
-
또는 명령 행으로 :
echo s >/proc/sysrq-trigger echo u >/proc/sysrq-trigger
-
-
이제는 할 수있었습니다
fsck -fC0 /dev/mapper/MyDisk-ROOT
….
…