쓰기 위해 파일이 열려 있으면 "mount -o remount,ro"가 반드시 실패합니까?

쓰기 위해 파일이 열려 있으면 "mount -o remount,ro"가 반드시 실패합니까?

umount -l저는 이동식 장치에 대해 안전하고 경쟁 조건이 없는 대안을 개발 중입니다 .

계획 중이다:

  1. umount --move000절대 경로를 통해 더 이상 파일을 열 수 없도록 권한 디렉토리 에 있습니다 .
  2. 프로세스를 대화형으로 종료(또는 정상적으로 종료)하고 쓰기 위해 파일을 엽니다.
  3. 단계 (2)가 완료될 때만 읽기 전용 모드로 원자 재마운트
  4. 문제를 일으킬 수 있는 읽기 전용 프로세스를 대화형으로 종료/종료
  5. 드디어 umount성공했다

rw(3) 단계에 및 가 있는 경쟁 조건이 있습니다 mount -o remount,ro.

mount -o remount,ro파일 시스템에 쓰기 위해 열려 있는 파일이 있으면 반드시 실패합니까?

매뉴얼 페이지에는 이에 대한 내용이 없으며 이 사실을 알게 된 후 나는 약간 편집증에 빠졌습니다.이후에도 장치에 쓸 수 있습니다.blockdev --setro.

답변1

예. 관련 코드는sb_prepare_remount_readonly(Linux 4.0부터는 다른 버전에서 코드가 다르게 구성될 수 있습니다.) 논리는 다음과 같습니다.

  • 설치된 각 인스턴스에 대해 다음을 수행합니다.
    • 인스턴스가 읽기 전용이 아닌 경우:
      • 신규저자 등록을 금지합니다 MNT_WRITE_HOLD. ( )
      • 등록된 Writer가 있는 경우 오류 플래그를 설정합니다(return EBUSY).
  • 파일이 삭제되었지만(inode 개수 = 0) 아직 삭제되지 않은 경우(파일이 열려 있었기 때문에 여전히 존재하는 경우) 오류 플래그를 설정합니다.
  • 오류 플래그가 설정되지 않은 경우 파티션은 읽기 전용으로 표시됩니다.
  • 설치된 각 인스턴스에 대해 다음을 수행합니다.
    • 작가의 가입을 차단하지 마세요.

작성자 등록은 메타데이터( 등) 쓰기 및 쓰기를 위해 파일을 여는 지속적인 작업 mkdir입니다 chmod. 통화 보기mnt_want_write등록된 작가의 수가 늘어나는 곳입니다.

시스템 설계에서는 읽기 전용 재마운트가 쓰기 등록 장벽이 되도록 보장합니다. 성공하면 등록된 작성자가 없으며 특히 재마운트 작업 시 쓰기 위해 열려 있는 파일이 있을 수 없습니다. 다시 마운트한 후에는 쓰기 위해 파일을 열 수 없으므로 여전히 쓰기 위해 열려 있는 파일이 없습니다.

관련 정보