시스템 운영 체제에서는 어떤 일이 발생합니까?

시스템 운영 체제에서는 어떤 일이 발생합니까?

SSD가 아닌 HDD에 스왑 파티션을 배치해야 한다는 것을 읽었습니다.

내 질문은 다음과 같습니다.

  • 배포판(또는 다른 것)은 언제, 어떻게 스왑 파티션을 찾기 위해 "검사"를 수행합니까?
  • 시동 중에 발생합니까?
  • 사용 가능한 모든 디스크를 확인하고 "스왑" 플래그가 있는 파티션을 검색합니까?
  • 그러한 파티션이 여러 개 있으면 어떻게 되나요?
  • 또한 동일한 디스크에서 두 개의 서로 다른 배포판(예: Fedora 및 Ubuntu)을 실행하는 경우 몇 개의 스왑 파티션이 필요합니까?

답변1

정적으로 구성된 스왑 공간(거의 모든 배포판에서 사용되는 유형)은 /etc/fstab파일 시스템처럼 구성됩니다.

일반적인 항목은 다음과 같습니다.

UUID=21618415-7989-46aa-8e49-881efa488132    none    swap     sw      0  0

플래그 필드(네 번째 필드)에서 이를 보거나 지정할 수도 있습니다 discard. nofail이러한 각 라인은 스왑 영역에 해당합니다.가지다파티션으로 스왑 파일 또는 전체 스왑 디스크를 가질 수 있습니다.

아주 특별한 경우에는 스왑 공간을 동적으로 구성할 수도 있지만, 이는 메모리 관리와 관련된 문제 동작을 일으킬 수 있으므로 매우 드뭅니다. 이 경우 구성은 런타임 시 필요에 따라 스왑 파일을 생성하고 활성화하는 사용자 공간 구성 요소에 의해 전적으로 처리됩니다.

얼마나 필요한지에 대해서는 답하기가 복잡한 질문입니다. 그러나 다른 배포판을 유휴 상태로 두면서 하나의 배포판을 실행할 수 있기를 원하지 않는 한 실행하려는 다양한 Linux 배포판의 수는 이에 영향을 미치지 않습니다. 시스템을 망칠 수 있는 매우 쉬운 방법이므로 이 작업을 수행하고 싶지 않습니다.)

Fedora, OpenSUSE, Linux Mint, Debian 및 Ubuntu를 포함한 거의 모든 주요 배포판에 대해 설치 프로그램을 실행하면 시스템의 기존 스왑 파티션을 감지하여 사용하려는 배포판에 추가합니다. (수동으로 파티션을 선택하지 않는 한) 대부분의 경우 시스템이 합리적인 방식으로 구성됩니다.

그 이상으로, 디스크가 많은 서버 시스템에 대해 이야기하는 경우가 아니면 개인적으로 다중 스왑 파티션을 피하는 것이 좋습니다. 그런 경우에도 제대로 작동하도록 설정하려면 무엇을 하고 있는지 알아야 합니다. .

답변2

예를 들어 Fedora와 Ubuntu?

...이제 둘 다 시스템화된 운영 체제입니다.

시스템 운영 체제에서는 어떤 일이 발생합니까?

기본 메커니즘

Systemd는 다양한 유형의 단위를 사용합니다. .mount유닛 파일은 볼륨을 마운트하도록 지시합니다. .swap단위 파일은 스왑 파티션에 대해 커널에 알려주는 내용을 나타냅니다. ( .service유닛 파일은 서비스 실행 방법을 알려줍니다. 등) 이는 기본 systemd 메커니즘입니다. 이를 구현하기 위해 systemd 자체는 관련 시스템 호출을 수행하는 하위 프로세스를 포크합니다.

해당 운영 체제에서 systemd 명령(with)을 사용하면 systemctl로드된 장치에 대한 정보를 알려줍니다. 예를 들어:--all.swap

dev-disk-by\x2dpartuuid-40549710\x2d05.swap 로드 활성 활동/dev/disk/by-partuuid/40549710-05
dev-disk-by\x2duuid-1bb589e8\x2d929f\x2d4041\x2d81f4\x2dff2b339b4e2a.swap 활성 활동 로드 /dev/disk/by-uuid/1bb589e8-929f-4041-81f4-ff2b339b4e2a
dev-sda5.swap 로드 활성 활성 /dev/sda5

.mount또한 장치에 대한 정보 도 알려줍니다 .

xe가 , , 및 기타 유닛 파일을 직접 작성할 수 있는 것처럼 시스템 관리자는 실제로 .swap이러한 유닛 파일을 직접 작성할 수 있습니다. systemd 자체는 파일 시스템에서 단위 파일을 찾습니다. 그것들은 기본 메커니즘입니다..service.socket

이러한 단위 파일에 무엇이 있는지, 파일 시스템에서 해당 파일을 찾을 수 있는 위치를 보여달라고 systemd에 요청할 수도 있습니다.

$ systemctl cat dev-disk-by\\x2duuid-1bb589e8\\x2d929f\\x2d4041\\x2d81f4\\x2dff2b339b4e2a.swap
# /run/systemd/generator/dev-disk-by\x2duuid-1bb589e8\x2d929f\x2d4041\x2d81f4\x2dff2b339b4e2a.swap
# systemd-fstab-generator에 의해 자동으로 생성됨

[단위]
소스 경로=/etc/fstab
문서=man:fstab(5) man:systemd-fstab-generator(8)

[교환]
무엇=/dev/disk/by-uuid/1bb589e8-929f-4041-81f4-ff2b339b4e2a
옵션=sw
$

유닛 파일 자동 생성

사람들은 손으로 쓸 수 있습니다. 대개그러나 이러한 파일 .mount.swap유닛 파일은 다음과 같은 파일에 의해 생성됩니다.발전기. 그러한 생성기 두 개는 systemd-fstab-generator및 입니다 systemd-gpt-auto-generator. 둘 다 부팅 프로세스 초기에 실행되고 systemctl daemon-reload명령에 응답하며 (위에서 볼 수 있듯이) 전체 장치 파일을 /run/systemd/.system 자체 에 로드합니다.생성된 유닛 파일만 사용.

이전 생성기는 /etc/fstab파일 형식을 인식하는 여러 시스템 확장자를 읽습니다. 내 답변에 대한 설명에서 지적했듯이 스왑 파티션은 전통적으로설치 유형이것이 sw다른 운영 체제가 이 테이블의 스왑 레코드를 인식한다는 것을 발견한 방법입니다. 그러나 Linux 소프트웨어는 식별을 위해 또 다른 접근 방식을 취합니다.VFS 유형swap대신 VFS 유형을 찾으십시오 . systemd-fstab-generator여기서도 예외는 아닙니다. 이는 /etc/fstab기본 메커니즘으로 변환할 때 해석되는 방식입니다.

후자 생성기는 EFI 시스템 파티션이 있는 동일한 디스크에서 EFI 파티션 테이블을 처리하여 잘 알려진 다양한 EFI 파티션 테이블이 있는 항목을 찾습니다.파티션 유형GUID. 이러한 GUID 중 하나는 Linux 스왑 파티션에 할당된 기존 GUID입니다. systemd-gpt-auto-generator해당 GUID가 있는 파티션이 발견되면(systemd doco에 제공된 기준을 충족) .swap이에 대한 단위가 생성됩니다./etc/fstab전혀 관여하지 않음.

물론 이 과정에는 부작용이 많다. 예를 들어 /etc/fstab테이블에 기본 키가 없기 때문에 레코드에 중복된 "사양" 및 "파일"(예: "무엇" 및 "위치") 필드가 있을 수 있습니다. 그러나 기본 systemd 메커니즘에서 "파일"(예: "위치") 필드는 .mount장치 이름에 포함된 장치의 고유 키입니다. 두 .mount유닛이 공유할 수 없습니다. 장치 의 경우 .swap"사양"(예: "콘텐츠") 필드는 장치의 고유 키입니다. 두 .swap유닛이 이를 공유할 수 없습니다. 따라서 모든 레코드가 /etc/fstab반드시 기본 메커니즘으로 변환되어 작동하는 것은 아닙니다. 특히 사람들이 두 가지 다른 목적으로 동일한 마운트 지점을 나열하거나 두 가지 다른 방식으로 동일한 스왑 파티션을 나열하는 등의 작업을 수행하는 경우에는 더욱 그렇습니다.

/etc/fstab마찬가지로 기본 메커니즘과 systemd의 기본 메커니즘으로 변환되었기 때문에유닛을 활성화하는 다른 방법이 있습니다, 시스템이 아닌 운영 체제와 약간 다르게 동작합니다. 기본적으로 .mount단위는 다음과 같습니다.자동 활성화systemd-udevd, 부팅 후에도 마운트된 저장 장치가 있으면 응답합니다. 또는 하나 Wants=또는 Requires=일부 .service또는 단위 로 나열될 수 있습니다 .socket. 이는 활성화될 때 (재)활성화된다는 의미입니다. 심지어 RequiresMountsFor=.

설치 프로그램 및 시스템화 방법

일반적으로 sw항목은 운영 체제 설치 프로그램과 나중에 시스템을 재구성하는 시스템 관리자가 작성했습니다 /etc/fstab. 이것이 네이티브 .mount.swap유닛이 궁극적으로 자동으로 생성되는 방식입니다. 설치/구성 유틸리티는 시스템 관리자가 사용자 인터페이스에서 몇 가지 항목을 선택하고 match 를 기록하기 때문에 스왑 파일이 있는 위치를 "알고" 있습니다 /etc/fstab. 때때로 이 옵션은설치 과정에서 스왑 파티션을 생성해 주셔야 합니다.;때때로디스크에 있는 스왑 파티션을 사용하세요.(설치 프로그램은 파티션 유형도 확인합니다).

그러나 시스템을 갖춘 사람들은 다음과 같은 생각을 가지고 있었습니다. 운영 체제는 /etc소위 말하는 본질적으로 비어 있는 트리에서 자동으로 구성될 수 있습니다.무상태 시스템, EFI 파티션 테이블을 읽기 위한 생성기 등의 메커니즘이 전부입니다. 시스템화된 사람들의 계획에는 /etc/fstab영구 구성 데이터가 전혀 없습니다 /etc. 이 모든 것은디스크의 파티션 테이블 내용에서 추론, 모든 부트로더 및 모든 systemctl daemon-reload.쓰지 마세요/etc/fstab.

물론 전통적인 시나리오에서는 각 운영 체제가 고유한 개인 스왑 파티션을 갖고 서로의 스왑 파티션을 접촉하지 않도록 할 수 있습니다. 실제로 스왑 파티션을 통해 최대 절전 모드를 사용하여 디스크를 굽고 최대 절전 모드 동안 다른 운영 체제로 여러 번 부팅할 수 있기를 원하는 경우(이것은아주 나쁜 생각왜냐하면이로 인해 파일 시스템이 쉽게 손상될 수 있습니다.)필요합니다.

systemd 시나리오에서는 운영 체제가 아직 systemd 사람들이 상상하는 것처럼 "상태 비저장" 상태가 아니더라도 앞서 언급한 생성기가 실행됩니다.모두모든 시스템 운영 체제는 필수 파티션 유형이 있는 스왑 파티션(ESP/루트 디스크)을 자동으로 사용합니다. 자동으로 검색된 모든 스왑 파티션을 공유하므로 실제로 설치된 각 운영 체제에 대해 스왑 파티션을 만들 필요가 없습니다.

추가 읽기

답변3

역사적으로 스왑 파티션은 /etc/fstab유형의 항목으로 지정 되었습니다 swap. 시작 시 시작 프로세스는 이 파일을 읽고 이 구성을 커널에 푸시합니다.

항목의 예는 다음 /etc/fstab과 같습니다.

/dev/sdb    none    swap     sw      0  0

나는 스왑이 어떻게 관리되는지 잘 모르지만 systemd최종 결과는 같다고 생각합니다. 사용자 공간 프로세스는 스왑에 할당된 공간을 알고 사용자 공간 프로세스는 커널에 알립니다.

답변4

다른 모든 답변에는 부팅시 스왑 파일 시스템을 가리키는 방법이 언급되어 있습니다.

그러나 다른 답변에 추가해야 할 몇 가지 사항이 있습니다.

  • 스왑 공간은 파일일 수도 있습니다.
  • 스왑 공간 파티션은 일반적으로 0x82 유형으로 표시됩니다.
  • 하나를 설치할 수 있습니다교환런타임 중 어느 시점에나 공간이 있습니다.
  • 나중에 스왑 공간으로 인식되고 사용/마운트될 수 있도록 파티션/파일을 표시/초기화하려면 다음 명령을 사용해야 합니다 mkswap.
  • 스왑 파티션/파일을 수동으로 활성화/사용하려면 다음 명령을 사용할 수 있습니다 swapon.
  • 다시 한번 말씀드리지만, 이 기능을 끄려면 를 선택하시면 됩니다 swapoff.

관련 정보