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 -a
Debian에서 여전히 사용할 수 있는 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.