btrfs를 사용하여 SSD 디스크에 스왑 파일을 만드는 방법

btrfs를 사용하여 SSD 디스크에 스왑 파일을 만드는 방법

btrfs가 포함된 SSD가 있는데 다음과 같은 스왑 파일을 만들어 보았습니다.

dd if=/dev/zero of=swapfile01  bs=1M count=10240
mkswap swapfile01
chmod 600 swapfile01
swapon swapfile01

dmesg에서 나는 본다

[238434.731654] swapon: swapfile has holes

디스크 조각화로 인해 구멍이 난 것은 이해하지만 SSD 디스크이므로 별 문제가 되지 않을까요? 구멍을 무시하는 방법이 있나요? 아니면 어떻게 해결할 수 있나요?

주제에서 벗어남 - 내가 이것을 원하는 이유(댓글에서 관련 없는 질문을 피하기 위해): 암호화된 디스크가 있어서 **** 크기 조정이 어렵기 때문에 스왑 파티션 크기를 조정하는 대신 스왑 파일을 만들기로 결정했습니다(14GB를 추가했습니다). RAM 용량은 4GB에서 16GB까지이며 지금은 최대 절전 모드로 전환할 수 없습니다.)

답변1

2019년 현황

Btrfs 및 Linux 커널의 개발로 인해 원래의 답이 나왔습니다.쓸모없는. 참조하세요이 다른 답변.


2016년의 원래 답변

에서btrfs FAQ:

btrfs는 스왑 파일을 지원합니까? 현재는 없습니다. 파일을 만드는 것만으로는 NOCOW가 도움이 되지 않습니다. 스왑 파일 지원은 잠재적 손상으로 인해 btrfs가 의도적으로 구현하지 않는 하나의 기능에 의존합니다. (...) 성능이 좋지는 않지만 해결 방법은 루프 장치를 통해 스왑 파일을 마운트하는 것입니다.

따라서 btrfs 파티션에 스왑 파일을 생성하는 좋은 방법은 아직 없습니다.

답변2

상술 한 바와 같이,리눅스 5.0부터이제 BTRFS에서 스왑 파일을 생성할 수 있습니다. 하지만 압축되지 않은 NoCOW여야 합니다. 실제로 이러한 파일을 만드는 방법은 다음과 같습니다.

  1. 빈 파일을 만듭니다.touch /swap
  2. 속성을 chattr설정하는 데 사용합니다 .NoCOWchattr +C /swap
  3. 속성 이 나타나는지 확인합니다 C.lsattr /swap
  4. 채우기: dd if=/dev/zero of=/swap bs=1M count=1024 # 1GB
  5. mkswap /swap && chmod 600 /swap && swapon /swap

또는 디렉터리를 만들고 chattr +C해당 디렉터리로 설정한 다음 그 아래에 스왑 파일을 만들 수 있습니다.

chattr +C이미 존재하는 비어 있지 않은 파일에는 작업을 수행할 수 없습니다 . 정의되지 않은 동작으로 문서화되어 있습니다(실제로 속성을 변경하지 않습니다). 따라서 빈 파일을 만든 다음 을 사용하거나 chattr를 사용하여 디렉터리를 만든 chattr다음 그 안에 파일을 만들어야 합니다(이 경우 chattr디렉터리를 지정한 후 생성된 모든 파일은 nocow 속성을 갖게 됩니다).

경고:언급한 대로 이를 위해서는 커널 버전 5.0 이상이 필요합니다. 예를 들어 Raspberry Pi는 4.19.* 커널을 사용하므로 이 기술을 사용할 수 없습니다.

답변3

커밋에서 볼 수 있듯이 스왑 파일 지원이 커널 버전 5.0에 추가되었습니다.https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ed46ff3d423780fa5173b38a844bf0fdb210a2a7 btrfs에서 스왑 파일을 활성화하려면 파일이 하나의 장치에서 압축 없이 NOCOW로 완전히 할당되어야 합니다.

답변4

btrfs의 스왑에 대해 알아두면 유용한 점은 백업 스냅샷/하위 볼륨을 수행하는 경우 스냅샷을 생성하지 않는 전용 하위 볼륨을 생성해야 한다는 것입니다.

swapon스냅샷 하위 볼륨에서는 스왑 파일이 다시 COW가 되며 재부팅 후에는 COW를 사용할 수 없습니다 .https://www.spinics.net/lists/linux-btrfs/msg96790.html

sudo btrfs property set -ts /.sxbackup/sx-20210211-092159-utc/ ro false마지막 하위 볼륨을 , 삭제 등 쓰기 가능으로 만들었고 다시 메인 볼륨에 swap사용할 수 있었습니다 swapon. 하지만 다음에 전용 하위 볼륨을 만들겠습니다.

관련 정보