Linux 커널이 "umount /"를 지원하는 이유는 무엇입니까?

Linux 커널이 "umount /"를 지원하는 이유는 무엇입니까?

Linux가 이를 지원하는 이유:

umount /

누군가가 이것을 대신에 이렇게 쓰는 이유는 다음과 같습니다.

mount / -oremount,ro

여기서 커널 코드를 보고 있습니다.

if (&mnt->mnt == current->fs->root.mnt && !(flags & MNT_DETACH)) {
    /*
     * Special case for "unmounting" root ...
     * we just try to remount it readonly.
     */
    if (!ns_capable(sb->s_user_ns, CAP_SYS_ADMIN))
        return -EPERM;
    down_write(&sb->s_umount);
    if (!sb_rdonly(sb))
        retval = do_remount_sb(sb, SB_RDONLY, NULL, 0);

https://elixir.bootlin.com/linux/v4.18/source/fs/namespace.c#L1612

답변1

Luciano Andress Martini지적했다:

처음 Linux에서 파일 시스템에 문제가 발생했을 때 fsck"/dev/hda2가 읽기-쓰기로 마운트되었습니다"와 같은 메시지를 받았습니다. 그 당시(1999년) 나는 그게 무슨 뜻인지 이해하지 못했습니다. 저는 11살이고 머릿속에 떠오르는 유일한 생각은 umount /, 작동한다는 것입니다(읽기 전용으로 다시 설치했기 때문입니다).

(이렇게 하려면 쓰기 위해 파일을 열지 않아야 합니다. 예를 들어 시스템이 단일 사용자 모드에서 실행 중일 때 작동합니다. fsck를 실행한 후에도 여전히 읽기 전용 모드로 마운트된 파일 시스템을 복구하려면 항상 재부팅해야 합니다. 보안상의 이유로).

즉, 파일 시스템을 읽기 전용으로 다시 마운트하는 명령이 있는지조차 모르는 경우 fsck(복구) /dev/fd0또는 파일 시스템이 필요한 /home동일한 명령을 시도할 수 있습니다. 특별한 경우 fsck에는 분명히 마운트 해제한 파일 시스템에 명령이 있는 경우에도 이를 허용합니다. :-). 손상된 시스템을 복구하려고 할 때 Linux가 도움을 줄 수 있다는 것은 대단한 일입니다.

이 특별한 경우에는 또 다른 용도가 있습니다: umount -a오래된 종료 스크립트에서. 이는 단순히 모든 파일 시스템을 역순으로 마운트 해제하고 루트 파일 시스템으로 끝나는 것으로 정의됩니다. 모든 파일 시스템이 디스크에서 일관된 상태를 유지하므로 fsck다음에 부팅할 때 필요하지 않습니다. 리눅스 커널은 다음과 같습니다아니요모든 파일 시스템을 자동으로 닫으려면 종료 프로그램이나 "초기화 시스템"이 필요합니다.

umount왜 이 특별한 경우가 명령 이 아닌 커널에 있는지 잘 모르겠습니다 . 한 가지 이유는 이전 커널이 파일 시스템이 마운트된 디렉터리가 아닌 마운트된 장치의 이름을 허용하기 때문일 수 있습니다. 아마도 이로 인해 이 코드를 커널에 넣는 것이 더 간단하고 안정적으로 보일 수 있습니다.

umount(2)특별한 경우는 또는 에 대한 현재 매뉴얼 페이지에 문서화되어 있지 않습니다 umount(8). 따라서 현재 매뉴얼 페이지에는 umount -a오류가 항상 표시될 것이라고 암시되어 있지만 사실은 그렇지 않습니다. umount -a지금은 그다지 널리 사용되지 않는 것 같아요 .

이전 버전의 Linux에도 매우 유사한 코드 주석이 있었습니다.0.99.10(1993) 포함.

이는 전통적인 UNIX 표준이 아닌 것 같습니다. FreeBSD 커널대신 오류를 반환합니다.. 이 경우 현재 사용 중인 파일 시스템을 마운트 해제하기 위한 일반 오류 검사와 별도로 특정 오류 검사가 있는 이유가 무엇인지 잘 모르겠습니다. FreeBSD에 상응하는 프로그램은 umount -a이 문제를 인식하고 첫 번째 파일 시스템(예: 루트)을 마운트 해제하기 전에 중지됩니다. (코드는여기, 그러나 C에서 루프와 배열 인덱싱이 작동하는 방식을 이해해야 합니다 for:-).

예를 들어 , 종속적인 이전 스크립트는 umount -aDebian에서 여전히 사용할 수 있는 SysVinit의 최신 스크립트와 대조됩니다. 명시 적으로 읽기 /etc/init.d/umount_root전용으로 다시 마운트합니다 . /나머지 마운트는 /etc/init.d/umountfs및 에서 별도로 처리됩니다 /etc/init.d/umountnfs.sh.

umount -a최신 시스템에서는 이상적이지 않습니다. 계속 사용할 수 /proc있도록 파일 시스템을 마운트된 상태 로 유지하는 것이 /proc/mounts더 간단할 것입니다 . /dev일반적으로 별도로 마운트된 파일 시스템도 있는데, 이는 문제가 될 수 있습니다.

이전 종료 스크립트의 예는 etc/rc.d/rc.0이전 / SysVinit-2.4.tar.z의 참조 스크립트를 참조하세요 SysVinit-2.4.tar.gz.

#! /bin/sh
#
# brc       This file is executed by init(8) when the system is being
#       shutdown (i.e. set to run at level 0).  It usually takes
#       care of un-mounting al unneeded file systems.
#
# Version:  @(#)/etc/brc        2.01    02/17/93
#
# Authors:  Miquel van Smoorenburg, <[email protected]>
#       Fred N. van Kempen, <[email protected]>
#

  PATH=/bin:/etc:/usr/bin
  echo Unmounting file systems.....
  umount -a
  echo Done.

관련 정보