/sysctl/fs.txt

/proc/sys/fs/*에 대한 문서 커널 버전 2.2.10
(c) 1998, 1999, Rik van Riel riel@nl.linux.org
(c) 2009, Shen Fengshen@cn.fujitsu.com

일반 정보 및 법적 고지 사항은 README 파일을 참조하십시오.


이 파일은 /proc/sys/fs/ 디렉토리에 있는 sysctl 파일의 문서를 포함하며, Linux 커널 버전 2.2.10에 적용됩니다.
이 디렉토리의 파일은 Linux 커널의 작동 과정에서 다양한 일반적인 사항을 조정하고 모니터링하는 데 사용할 수 있습니다. 일부 파일은 시스템에 문제를 일으킬 수 있으므로, 실제 조정을 하기 전에 문서와 소스 코드를 모두 읽어보는 것이 좋습니다.


  1. 현재 다음과 같은 파일들이 /proc/sys/fs에 있습니다:
  • aio-max-nr
  • aio-nr
  • dentry-state
  • dquot-max
  • dquot-nr
  • file-max
  • file-nr
  • inode-max
  • inode-nr
  • inode-state
  • nr_open
  • overflowuid
  • overflowgid
  • pipe-user-pages-hard
  • pipe-user-pages-soft
  • protected_fifos
  • protected_hardlinks
  • protected_regular
  • protected_symlinks
  • suid_dumpable
  • super-max
  • super-nr

aio-nr 및 aio-max-nr:

aio-nr은 현재 활성화된 모든 AIO 컨텍스트에 대해 io_setup 시스템 호출에서 지정된 이벤트 수의 누적 합계입니다. aio-nr이 aio-max-nr에 도달하면 io_setup은 EAGAIN 오류로 실패합니다. 참고: aio-max-nr을 증가시켜도 커널 데이터 구조체의 사전 할당이나 크기 조정이 발생하지 않습니다.


dentry-state:

linux/include/linux/dcache.h에서:

struct dentry_stat_t dentry_stat {
        int nr_dentry;
        int nr_unused;
        int age_limit;         /* age in seconds */
        int want_pages;        /* pages requested by system */
        int nr_negative;       /* # of unused negative dentries */
        int dummy;             /* Reserved for future use */
};

덴트리는 동적으로 할당 및 해제됩니다.

nr_dentry는 할당된 덴트리 총 수(활성 + 미사용)를 표시합니다. nr_unused는 현재 사용 중이 아니지만 LRU 목록에 저장되어 미래 재사용을 위해 보관된 덴트리 수를 표시합니다.

Age_limit은 메모리가 부족할 때 dcache 항목을 회수할 수 있는 초 단위의 시간이며, shrink_dcache_pages()가 호출되었고 dcache가 아직 정리되지 않았을 때 want_pages가 0이 아닌 경우 적용됩니다.

nr_negative는 사용되지 않은 dentries 중 파일과 매핑되지 않은 부정적인 dentries의 수를 표시합니다. 대신, 이들은 사용자가 제공한 존재하지 않는 파일의 거부를 가속화하는 데 도움을 줍니다.


dquot-max 및 dquot-nr:

dquot-max 파일은 캐시된 디스크 할당량 항목의 최대 수를 표시합니다.

dquot-nr 파일은 할당된 디스크 할당량 항목의 수와 사용 가능한 디스크 할당량 항목의 수를 표시합니다.

사용 가능한 캐시된 디스크 할당량 항목의 수가 매우 낮고 동시 시스템 사용자가 매우 많은 경우, 한도를 높이는 것이 좋습니다.


file-max & file-nr:

file-max 파일의 값은 Linux 커널이 할당할 수 있는 최대 파일 핸들 수를 나타냅니다. 파일 핸들이 부족하다는 오류 메시지가 많이 발생한다면 이 한도를 증가시키는 것이 좋습니다.

역사적으로 커널은 파일 핸들을 동적으로 할당할 수 있었지만, 다시 해제할 수는 없었습니다. file-nr의 세 가지 값은 할당된 파일 핸들 수, 할당되었지만 사용되지 않은 파일 핸들 수, 최대 파일 핸들 수를 나타냅니다. Linux 2.6은 항상 사용 가능한 파일 핸들 수로 0을 보고합니다 — 이는 오류가 아니라, 할당된 파일 핸들 수가 사용 중인 파일 핸들 수와 정확히 일치함을 의미합니다.

file-max보다 많은 파일 설명자를 할당하려는 시도는 printk로 보고됩니다. VFS: file-max limit <number> reached를 찾아보세요.


nr_open:

이 값은 프로세스가 할당할 수 있는 파일 핸들의 최대 수를 표시합니다. 기본 값은 1024*1024 (1048576)로 대부분의 시스템에 충분합니다. 실제 한계는 RLIMIT_NOFILE 리소스 한계에 의존합니다.


inode-max, inode-nr 및 inode-state:

파일 핸들과 마찬가지로 커널은 inode 구조체를 동적으로 할당하지만, 현재는 이를 해제할 수 없습니다.

inode-max 값은 최대 inode 핸들러 수를 나타냅니다. 이 값은 file-max 값의 3~4배로 설정해야 합니다. 왜냐하면 stdin, stdout 및 네트워크 소켓도 이를 처리하기 위해 inode 구조체가 필요하기 때문입니다. inode가 자주 부족해지면 이 값을 증가시켜야 합니다.

inode-nr 파일에는 inode-state의 첫 두 항목이 포함되어 있으므로 해당 파일로 넘어가겠습니다…

Inode-state에는 세 개의 실제 숫자와 네 개의 가짜 항목이 있습니다. 실제 숫자는 출현 순서대로 nr_inodes, nr_free_inodes, preshrink입니다.

nr_inodes는 시스템이 할당된 inode의 수를 의미하며, 이 값은 inode-max보다 약간 더 클 수 있습니다. 왜냐하면 Linux는 한 페이지 분량씩 inode를 할당하기 때문입니다.

nr_free_inodes는 사용 가능한 inode의 수를 나타내며, preshrink는 nr_inodes > inode-max이고 시스템이 추가 할당 대신 inode 목록을 정리해야 할 때 0이 아닌 값을 가집니다.


overflowgid & overflowuid:

일부 파일 시스템은 16비트 UID 및 GID만 지원하지만, Linux에서는 UID 및 GID가 32비트입니다. 이러한 파일 시스템 중 하나를 쓰기 권한으로 마운트할 경우, 65535를 초과하는 UID 또는 GID는 디스크에 기록되기 전에 고정된 값으로 변환됩니다.

이 sysctl은 고정된 UID 및 GID의 값을 변경할 수 있도록 합니다. 기본값은 65534입니다.


pipe-user-pages-hard:

비특권 사용자가 파이프에 할당할 수 있는 최대 총 페이지 수입니다. 이 한도에 도달하면 사용량이 한도 아래로 떨어질 때까지 새로운 파이프를 할당할 수 없습니다. 0으로 설정되면 한도가 적용되지 않으며, 이는 기본 설정입니다.


pipe-user-pages-soft:

비특권 사용자가 파이프에 할당할 수 있는 최대 총 페이지 수로, 이 한도에 도달하면 파이프 크기가 단일 페이지로 제한됩니다. 이 한도에 도달하면, 이 사용자의 파이프 크기가 단일 페이지로 제한되어 총 메모리 사용량을 제한하며, fcntl()을 사용하여 크기를 늘리려는 시도는 사용량이 한도 아래로 떨어질 때까지 거부됩니다. 기본 값은 기본 크기에서 최대 1024개의 파이프를 할당할 수 있도록 허용합니다. 0으로 설정되면 한도가 적용되지 않습니다.


protected_fifos:

이 보호의 목적은 공격자가 제어하는 FIFO에 의도하지 않은 쓰기가 발생하지 않도록 하는 것입니다. 프로그램이 일반 파일을 생성할 것으로 예상되는 경우에도 마찬가지입니다.

0으로 설정되면 FIFO에 대한 쓰기가 제한되지 않습니다.

“1”로 설정되면 world writable sticky 디렉토리에서 우리가 소유하지 않은 FIFO에 O_CREAT 열기를 허용하지 않습니다. 단, 해당 FIFO가 디렉토리 소유자가 소유한 경우 예외입니다.

“2”로 설정되면 world writable sticky 디렉토리에도 적용됩니다.

이 보호 기능은 Openwall의 제한 사항을 기반으로 합니다.


장기간 존재해 온 보안 문제의 한 종류는 하드링크 기반의 시간 검사 시점과 사용 시점 간의 경합(race)으로, 주로 /tmp와 같은 world writable 디렉토리에서 자주 발생합니다. 이 취약점을 악용하는 일반적인 방법은 특정 하드링크를 따라갈 때 권한 경계를 넘어가는 것(예: 루트 프로세스가 다른 사용자가 생성한 하드링크를 따라가는 경우)입니다. 또한,
분리된 파티션이 없는 시스템에서는 이 기능이 관리자가 취약한 setuid/setgid 파일을 업그레이드하거나 특수 파일로 연결하는 것을 방지하여 무권한 사용자가 이를 “고정”하는 것을 막습니다.

“0”으로 설정되면 하드링크 생성 행위가 제한되지 않습니다.

“1”로 설정되면 사용자가 소스 파일을 소유하지 않거나 읽기/쓰기 권한이 없는 경우 하드링크를 생성할 수 없습니다.

이 보호 기능은 Openwall 및 grsecurity의 제한 사항을 기반으로 합니다.


protected_regular:

이 보호 기능은 protected_fifos와 유사하지만, 공격자가 제어하는 일반 파일에 대한 쓰기를 방지합니다. 이는 프로그램이 해당 파일을 생성할 것으로 예상되는 경우에 적용됩니다.

“0”으로 설정되면 일반 파일로의 쓰기가 제한되지 않습니다.

“1”로 설정되면 세계 쓰기 가능 sticky 디렉토리에서 소유하지 않은 일반 파일에 대해

O_CREAT 열기를 허용하지 않습니다. 단, 해당 파일이 디렉토리 소유자가 소유한 경우 제외됩니다.

“2”로 설정되면 그룹 쓰기 가능 sticky 디렉토리에도 적용됩니다.


오랫동안 존재해 온 보안 문제의 한 종류는 심볼릭 링크 기반의 시간 검사 시점과 사용 시점의 경합(race)으로, 주로 /tmp와 같은 world writable 디렉토리에서 발생합니다. 이 결함의 일반적인 악용 방법은 특정 심볼릭 링크를 따라갈 때 권한 경계를 넘어가는 것입니다(예:루트 프로세스가 다른 사용자의 심볼릭 링크를 따라가는 경우). 수년간의 사례 중 일부를 포함한 불완전한 목록은 다음을 참조하세요:

http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=/tmp

“0”으로 설정되면 심볼릭 링크 추적 행위가 제한 없이 허용됩니다.

“1”로 설정되면 심볼릭 링크는 다음 조건 중 하나를 충족할 때만 추적 가능합니다:

스티키 세계 쓰기 가능 디렉토리 외부에 있을 때, 심볼릭 링크와 추적자의 uid가 일치할 때, 또는 디렉토리 소유자가 심볼릭 링크의 소유자와 일치할 때.

이 보호 기능은 Openwall 및 grsecurity의 제한 사항을 기반으로 합니다.


suid_dumpable:

이 값은 setuid 또는 기타 보호/오염된 바이너리의 코어 덤프 모드를 조회하고 설정하는 데 사용됩니다. 모드는 다음과 같습니다.

0 – (기본값) – 전통적인 동작. 권한 수준을 변경한 프로세스나 실행 전용 프로세스는 덤프되지 않습니다.

1 – (디버그) – 가능한 경우 모든 프로세스가 코어 덤프를 생성합니다. 코어 덤프는 현재 사용자에게 소유권이 있으며 보안이 적용되지 않습니다. 이는 시스템 디버깅 상황에만 사용하도록 의도되었습니다. Ptrace는 검사되지 않습니다. 이 모드는 일반 사용자가 특권 프로세스의 메모리 내용을 검사할 수 있도록 허용하므로 보안상 위험합니다.

2 – (suidsafe) – 일반적으로 덤프되지 않는 바이너리도 덤프되지만, “core_pattern” 커널 sysctl이 파이프 핸들러나 완전한 경로로 설정된 경우에만 적용됩니다. (이 제한 사항에 대한 자세한 내용은 CVE-2006-2451을 참조하세요.) 이 모드는 관리자가 일반 환경에서 문제를 디버깅하려고 시도할 때 적합하며, 특권 코어 덤프를 신중하게 처리하는 파이프 핸들러를 사용하거나 코어 덤프를 수집하기 위해 특정 디렉토리를 정의한 경우에 적용됩니다. 파이프 핸들러나 완전히 지정된 경로 없이 코어 덤프가 발생하면 syslog에 올바른 설정이 부족하다는 경고 메시지가 출력됩니다.


super-max & super-nr:
이 숫자는 커널이 가질 수 있는 슈퍼블록의 최대 수를 제어하며, 따라서 커널이 마운트할 수 있는 파일 시스템의 최대 수를 결정합니다. super-max 값보다 더 많은 파일 시스템을 마운트해야 할 경우에만 super-max를 증가시켜야 합니다.


aio-nr & aio-max-nr:

aio-nr은 시스템 전체의 비동기 I/O 요청 수를 표시합니다. aio-max-nr은 aio-nr이 성장할 수 있는 최대 값을 변경할 수 있습니다.


mount-max:

이 값은 마운트 네임스페이스에 존재할 수 있는 최대 마운트 수를 나타냅니다.


  1. /proc/sys/fs/binfmt_misc
    /proc/sys/fs/binfmt_misc 디렉토리 내 파일의 문서는 Documentation/admin-guide/binfmt-misc.rst에 있습니다.

  1. /proc/sys/fs/mqueue – POSIX 메시지 큐 파일 시스템
    “mqueue” 파일 시스템은 사용자가 POSIX 메시지 큐 API를 구현하는 사용자 공간 라이브러리를 생성하기 위해 필요한 커널 기능을 제공합니다(POSIX 1003.1-2001 버전의 시스템 인터페이스 사양에서 MSG 태그로 표시됨).

“mqueue” 파일 시스템에는 파일 시스템이 사용하는 리소스의 양을 결정하거나 설정하는 값들이 포함되어 있습니다.

/proc/sys/fs/mqueue/queues_max는 시스템에서 허용되는 메시지 큐의 최대 수를 설정하거나 조회하기 위한 읽기/쓰기 파일입니다.

/proc/sys/fs/mqueue/msg_max는 큐 내 메시지 최대 수를 설정/조회하는 읽기/쓰기 파일입니다. 실제로 이는 mq_open 호출 시 설정되는 다른 (사용자) 제한의 제한 값입니다. 큐의 이 속성은 msg_max보다 작거나 같아야 합니다.

/proc/sys/fs/mqueue/msgsize_max는 메시지 크기 최대 값을 설정하거나 조회하기 위한 읽기/쓰기 파일입니다(이는 각 메시지 큐가 생성될 때 설정되는 속성입니다).

/proc/sys/fs/mqueue/msg_default는 mq_open(2)의 attr 매개변수가 지정되지 않았을 때 큐에 저장할 수 있는 메시지 수의 기본 값을 설정하거나 조회하기 위한 읽기/쓰기

/proc/sys/fs/mqueue/msg_default는 mq_open(2)의 attr 매개변수가 NULL일 때 큐 내 메시지 기본 수를 설정하거나 조회하는 읽기/쓰기 파일입니다. 이 값이 msg_max를 초과하면 기본 값은 msg_max로 초기화됩니다.

/proc/sys/fs/mqueue/msgsize_default는 mq_open(2)의 attr 매개변수가 NULL일 때 기본 메시지 크기 값을 설정하거나 조회하기 위한 읽기/쓰기 파일입니다. 이 값이 msg_max를 초과하면 기본 값은 msg_max로 초기화됩니다.


  1. /proc/sys/fs/epoll – epoll 인터페이스의 구성 옵션
    이 디렉토리는 epoll(7) 인터페이스의 구성 옵션을 포함합니다.
max_user_watches

각 epoll 파일 descriptor는 이벤트 준비 상태를 모니터링할 파일 수를 저장할 수 있습니다. 이 모니터링되는 각 파일은 “watch”를 구성합니다. 이 구성 옵션은 각 사용자에게 허용되는 “watch”의 최대 수를 설정합니다.

각 “watch”는 32비트 커널에서는 약 90바이트, 64비트 커널에서는 약 160바이트의 메모리를 소비합니다. 현재 max_user_watches의 기본값은 사용 가능한 lowmem의 1/32를 “watch” 비용(바이트 단위)으로 나눈 값입니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You May Also Like
Read More

Documentation/sysctl/net.txt

출처: https://www.kernel.org/doc/Documentation/sysctl/net.txt"busy poll timeout" 번역 표현이 참 어색합니다. 적당한 한글 표현을 못 찾겠습니다. proc/sys/net/*에 대한 문서(c) 1999 Terrehon…
Read More

/sysctl/README

RHCA 달리던 중에 "RH442 Performance Tuning Linux in Physical Virtual and Cloud"라는 과목이 있습니다. 보던 중 sysctl을 이용해서…
Read More

/sysctl/user.txt

출처: https://www.kernel.org/doc/Documentation/sysctl/user.txt proc/sys/user/* 커널 버전 4.9.0에 대한 문서(c) 2016 Eric Biederman ebiederm@xmission.com 이 파일에는 /proc/sys/user의 sysctl 파일에 대한…
Read More

Zram 성능 분석

Blog를 보다가 관심 가는 글이 보여서 AI번역+약간 교정해 보았습니다.출처: https://notes.xeome.dev/notes/Zram 소개 Zram은 압축된 가상 메모리 블록 장치를 활용하여…