제로 프리를 실행할 수 있도록 읽기 전용으로 마운트하려고 할 때 “mount : / busy 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



답변

일부 프로세스는 파일을 쓰기 위해 열어 둡니다. 예를 들어 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커널 문서의 파일 참조 ) :

    1. 먼저 magic SysRq key키보드 커널 트랩을 사용하십시오.

      • 을 누른 상태로 AltGr유지 한 다음,
      • 명중 PrtScn한 번만 있지만 공개하지 않습니다 AltGr,
      • s한 번만 누르면 Emergency sync커널에 요청을 보내고
      • hit u, Umount all요청 을 보내면 마운트 된 모든 파일 시스템을 읽기 전용으로 다시 마운트합니다.
      • 그런 다음 놓습니다 AltGr
    2. 또는 명령 행으로 :

      echo s >/proc/sysrq-trigger
      echo u >/proc/sysrq-trigger
      
  • 이제는 할 수있었습니다

    fsck -fC0 /dev/mapper/MyDisk-ROOT
    

    ….