스왑 파티션이 어디에 있는지 리눅스는 어떻게 알 수 있습니까?


13

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

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

  • 스왑 파티션을 찾기 위해 배포 (또는 다른 것)가 "확인"을 언제 어떻게 수행합니까?
  • 부팅 중에 발생합니까?
  • 사용 가능한 모든 디스크를 확인하고 'swap'플래그가있는 파티션을 검색합니까?
  • 그런 파티션이 여러 개 있으면 어떻게됩니까?
  • 또한 동일한 디스크에서 두 개의 다른 배포판을 실행하는 경우 얼마나 많은 스왑 파티션이 필요합니까? Fedora와 Ubuntu를 가정 해 봅시다.

17
SSD의 스왑은 실제로 매우 큰 스왑입니다 (macOS는 오래 전부터 그렇게하고 있음). 그러나 SSD에 대한 추가 읽기 / 쓰기를 수행하면 수명이 단축 될 수 있습니다.
Nonyme

20
스왑이 SSD가 아닌 HDD에서 어디에 있어야한다고 읽었습니까? 또한 기사 나 댓글은 몇 살입니까? 최신 SSD는웨어 레벨링에서 훨씬 우수하며 SSD를 처음 사용할 때와 동일한 방식으로 반복해서 쓴 후에도 실패하지 않습니다. 또한 SSD 만있는 컴퓨터가 있다면 스왑을 전혀 사용하지 않는 것 외에는 선택의 여지가 없습니다
JDS

2
@zakinster : 1TB 드라이브가 항상 가득 찬 경우는 어떻습니까? 스토리지 규정에 따라 스토리지 요구가 증가했습니다.
Monica와의 가벼움 경주

3
다른 말로, "예, 동의합니다. 이전 진술과 달리 실제 디스크 크기는 관련이 없습니다. 사용하는 디스크의 양입니다"
Monica와 Lightness Races

6
@DavidSchwartz 그리고 "대량의 스왑을 사용"하는 경우 SSD가 HDD보다 시스템 성능 손실을 훨씬 적게 인식하지만 시스템에 RAM을 추가하거나 가상 시스템을 줄이는 것이 더 나은 방법입니다. 상당한 스왑 사용을 중지하는 방식으로 워크로드의 메모리 풋 프린트. 또한 거의 사용하지 않는 데이터로 스왑을 채운 장기 실행 시스템과 활발하게 스왑 및 스캔하는 시스템 사이에는 차이가 있습니다.
twalberg

답변:


24

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

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

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

flags 필드 (네번째 필드)에서 discard또는 nofail지정된 것을 볼 수도 있습니다 . 하나 개의 스왑 영역마다 같은 라인에 대응 (이되지 않습니다 파티션을 할, 당신은 스왑 파일, 또는 전체 스왑 디스크를 가질 수 있습니다).

실제로는 특별한 경우 스왑 공간을 동적으로 구성했을 수도 있지만 메모리 관리와 관련하여 문제가있는 행동을 일으킬 수 있기 때문에 드문 경우입니다. 이 경우, 구성은 런타임시 필요에 따라 스왑 파일을 작성하고 사용 가능하게하는 사용자 공간 구성 요소에 의해 전적으로 처리됩니다.

필요한만큼의 대답은 복잡한 질문이지만, 실행하려는 다른 Linux 배포판의 수는 최대 절전 모드에서 다른 배포판을 사용하지 않고 한 배포판을 실행할 수있는 경우를 제외하고는 이에 영향을 미치지 않습니다. 시스템을 망칠 수있는 쉬운 방법 이므로이 작업을 원하지 않을 것입니다.

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

그 외에도, 많은 디스크가있는 서버 시스템에 대해 이야기하지 않는 한 다중 스왑 파티션을 피하는 것이 좋습니다. 그렇지 않으면 제대로 작동하도록 설정하기 위해 수행중인 작업을 알아야합니다. .


Linux 배포판이 2 개인 경우 시스템에 대해 하나의 스왑 파티션이있을 수 있습니다. 따라서 최대 절전 모드에서 다시 시작하려고 시도 할 수 있습니다 /tmp. 이 경우 가상 머신을 사용하는 것이 좋습니다.
Hastur

그러나 Linux OS가 설치된 동일한 SSD에 스왑 전용 파티션이있는 경우 권장 사항은 실제로 스왑이 있거나 사용중인 것으로 보이지 않습니다. 실행 systemctl --all | grep swap하면 두 가지 결과가 다시 나타납니다. dev-disk-by\x2duuid-1c692cc4\x2df942\x2d4478\x2dad0f\x2d266b7484273a.swap그리고 swap.target모두의이다 ACTIVE = 비활성죽은 = SUB는 . 시스템이 스왑 영역을 사용하게하려면 어떻게합니까?
Rockin4Life33

21

페도라와 우분투를 말합니까?

… 둘 다 오늘날 시스템 운영 체제입니다.

시스템 운영 체제에서 발생하는 사항

기본 메커니즘

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

이러한 시스템 운영 체제에서 systemctl(with --all) 명령 을 사용 하면로드 된 .swap장치 에 대해 알려줍니다 . 예를 들면 다음과 같습니다.

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

또한 .mount단위 에 대해 알려줄 것 입니다.

시스템 관리자는 실제로 같은 쓸 수 있습니다 .swapXE 쓸 수있는 것처럼, 손으로 유닛 파일을 .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에 의해 자동 생성

[단위]
SourcePath = / etc / fstab
설명서 = man : fstab (5) man : systemd-fstab-generator (8)

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

자동으로 생성 된 단위 파일

하나는 손으로 쓸 수 있습니다. 그러나 일반적으로 이러한 파일 .mount.swap단위 파일은 생성기 라고하는 프로그램에 의해 자동으로 생성됩니다 . 이러한 두 생성기는 systemd-fstab-generatorsystemd-gpt-auto-generator입니다. 부트 스트랩 프로세스 초기에 systemctl daemon-reload명령 에 대한 응답으로 실행되며 (위에서 볼 수 있듯이)에서 문서화되지 않은 하위 디렉토리에 전체 단위 파일로드를 생성합니다 /run/systemd/. systemd 자체 는 생성 된 단위 파일 만 사용합니다 .

이전 생성기 /etc/fstab는 해당 파일 형식에 대한 여러 시스템 확장자를 인식하여를 읽습니다 . 답변 의견에서 지적했듯이 전통적으로 스왑 파티션에는 마운트 유형sw있으며 이는 다른 운영 체제가이 표에서 스왑 레코드를 인식하는 방법입니다. 그러나 Linux 소프트웨어는 VFS 유형을 대신 인식하여 VFS 유형 을 찾는 대안을 택했습니다 swap. systemd-fstab-generator여기서도 예외는 아닙니다 /etc/fstab. 이것이 기본 메커니즘으로 변환 할 때 해석하는 방식입니다.

후자의 생성기는 EFI 시스템 파티션이있는 동일한 디스크에있는 EFI 파티션 테이블을 처리하여 잘 알려진 다양한 파티션 유형 GUID 가있는 EFI 파티션 테이블 항목을 찾습니다 . 이러한 GUID 중 하나는 Linux 스왑 파티션에 할당 된 일반적인 GUID입니다. 그리고 systemd-gpt-auto-generatorGUID가있는 파티션을 찾으면 (systemd doco에 주어진 기준을 만족하는) 파티션을 만들 .swap것입니다. 전혀 /etc/fstab관여 하지 않습니다 .

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

마찬가지로 /etc/fstab기본 메커니즘으로 변환 되고 systemd의 기본 메커니즘 에는 다른 단위 활성화 방법이 있기 때문에 비 시스템 운영 체제의 동작과 미묘하게 다릅니다. .mount유닛은 기본적으로한다 자동 활성화systemd-udevd 의 출현에 응답하여, 부트 스트랩에도 후에는, 축전 장치를 탑재. 아니면은로 표시 할 수 있습니다 Wants=또는 Requires=일부의 .service또는 .socket그들이 때 활성화 (재) 될 것을 의미 단위. 심지어있다 RequiresMountsFor=.

설치 프로그램 및 체계적인 방법

전통적으로 운영 체제 설치 프로그램 및 시스템 관리자는 나중에 시스템을 재구성하여에 sw항목을 기록 했습니다 /etc/fstab. 이것이 네이티브 .mount.swap유닛이 자동 생성되는 방식입니다. 설치 / 구성 유틸리티는 사용자 인터페이스에서 시스템 관리자가 어떤 종류의 선택을하고 /etc/fstab일치하도록 쓰기 때문에 스왑 파일이 저장된 위치를 "인식"합니다 . 때로는 설치의 일부로 스왑 파티션을 만들어야합니다. ; 때로는 디스크에서 이미 찾은 스왑 파티션을 사용 하기도합니다 . (파티션 유형을보고있는 설치자도).

그러나 체계화 된 사람들은 상태가없는 시스템/etc 이라고 하는 빈 트리 에서 자동으로 구성되는 운영 체제라는 개념을 가지고 있으며, 이는 EFI 파티션 테이블을 읽는 생성기와 같은 메커니즘에 관한 것입니다. 체계적인 사람들의 계획에는 , 그리고 전혀 영구적 인 구성 데이터가 없으며 ,이 모든 것들이 디스크의 파티션 테이블의 내용 , 모든 부트 스트랩 및 모든에서 추론 됩니다 . 그들은 현재 운영 체제 설치 프로그램을 작성하지 않는 것보다 홍보 하고 있습니다./etc/fstab/etcsystemctl daemon-reload/etc/fstab

기존 방식에서는 물론 각 운영 체제에 고유 한 개인 스왑 파티션이 있고 서로의 스왑 파티션에 닿지 않도록 할 수 있습니다. 그리고 당신은 스왑 파티션을 통해 디스크에 최대 절전 모드를 사용하여 최대 절전 모드 동안 (다른 운영 체제에 멀티 부팅 할 수있을 것으로 기대된다 실제로 경우 아주 나쁜 생각 때문에 그것이 원인이 파일 시스템 손상이 방법에 매우 쉽게 될 것입니다) 필요한.

체계화 된 체계에서, 운영 체제가 체계화 된 사람들이 계획 한대로 "상태 비 저장"상태가 아니더라도, 전술 한 발전기는 가동된다; 따라서 필수 파티션 유형을 가진 모든 ESP / 루트 디스크의 스왑 파티션은 모든 시스템 운영 체제에서 자동으로 사용됩니다. 자동 검색된 스왑 파티션을 모두 공유하므로 설치된 운영 체제 당 하나의 스왑 파티션을 만들 필요가 없습니다.

추가 자료


아주 좋은-설명 주셔서 감사합니다!
Andy Dalton

systemd에 대해 이야기하기 위해 실제로 투표를하고 싶은 부분이 있습니다. 그러나 물론 그것은 불공평하며 (그리고 체계적이거나 아니더라도 당신이 틀렸다는 것을 의미하지는 않습니다) 어쨌든 나는 건설적인 적절한 방법이라고 생각하지 않았기 때문에 어쨌든 투표를하지 않습니다. 그러나 Lennart에 대한 언급을 보았음에도 불구 하고이 답변에 투표했습니다. 다른 것이 없다면 노력을 기울이고 칭찬해야합니다. 나는 무국적 쓰레기에 대해 간략하게 읽었으며 그것은 오히려 ... 그 일이 무엇인지 잘 모르겠 기 때문에 그대로 두겠습니다.
Pryftan 2019

13

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

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

/dev/sdb    none    swap     sw      0  0

나는 systemd스왑을 관리 하는 방법에 익숙 하지 않지만 최종 결과는 동일하다고 생각합니다. 사용자 공간 프로세스는 스왑에 할당 된 공간을 알고 있으며 사용자 공간 프로세스는 커널에 알립니다.


질문자는 리눅스에 관해 물었고, 이것은 리눅스에있어서 잘못이 아니다. 그러나 그것은 리눅스 특유의 것입니다. 예를 들어 FreeBSD와 같은 다른 운영 체제 는 VFS 유형이 아닌 마운트 유형 /etc/fstab에서 스왑 레코드를 인식 합니다. swswap
JdeBP

1
답이 질문의 모든 부분을 다루지는 않습니다.
Sergiy Kolodyazhnyy

또한이 답변 역시 시스템 운영 체제 세계에서 오래되었다는 점도 지적해야합니다. 고려하지 않습니다 systemd-gpt-auto-generator.
JdeBP

2
systemd가 fstab을 사용하지 않는다는 것은 무엇을 의미합니까? 물론 그렇습니다!
psusi

1
@psusi : systemd는 이해하지만 fstab은 필요하지 않습니다.
MSalters

4

다른 모든 답변은 부팅시 스왑 파일 시스템을 가리키는 방법을 언급합니다.

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

  • 스왑 공간은 파일 일 수도 있습니다.
  • 스왑 공간 파티션은 일반적으로 0x82 유형으로 표시됩니다.
  • 스왑을 장착 할 수 있습니다런타임 중 언제든지 공간을 .
  • 파티션 / 파일을 표시 / 초기화하려면 나중에 스왑 공간으로 인식하고 사용 / 마운트하려면 명령을 사용해야합니다 mkswap.
  • 스왑 파티션 / 파일을 수동으로 활성화 / 사용하려면 다음 명령을 사용하십시오 swapon.
  • 마찬가지로 교체하면으로 이동합니다 swapoff.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.