스왑 실패 : Btrfs 파일 시스템이있는 Linux 시스템에서 잘못된 인수


16

Btrfs 파일 시스템이있는 Debian Squeeze 시스템에서 실행되는이 일련의 작업에 어떤 문제가 있습니까?

$ dd if=/dev/zero of=swapfile2 bs=1024 count=524288
$ sudo mkswap swapfile2
$ sudo chown root:root swapfile2
$ sudo chmod 0600 swapfile2  
$ sudo swapon -v -f swapfile2
swapon on swapfile2
swapon: /home/mathieu/swapfile2: found swap signature: version 1, page-size 4, same byte order
swapon: /home/mathieu/swapfile2: pagesize=4096, swapsize=536870912, devsize=536870912
swapon: swapfile2: swapon failed: Invalid argument

내 파일 시스템은 다음과 같습니다

$ mount
/dev/mapper/voxbox-root on / type btrfs (rw)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/mapper/voxbox-boot on /boot type ext2 (rw)
fusectl on /sys/fs/fuse/connections type fusectl (rw)

malat, 나는 당신의 질문을 다시 열고 다음과 같이 당신의 대답을 추가했습니다. 답변을 게시 해 주시면 삭제하겠습니다.
Sathyajith Bhat

답변:


16

이 버그 보고서이 토론으로 이어집니다

따라서 "잘못된 인수"는 "파일 시스템이 스왑 파일을 지원하지 않습니다"로 읽어야합니다.

게시 에 의해 MALAT


6
좋은 캐치! btrfs는 주변 파일 데이터를 이동하고 리눅스 스왑 코드는 스왑 파일의 매핑 한 번 걸리기 때문에 파일 시스템은 스왑 파일을 지원하지 않습니다. 이것이 허용되면 재앙이 발생합니다. 한 번 사용한 스왑 파일이 차단 한 임의의 파일 데이터가 손상 될 수 있습니다.
David Schwartz

1
최신 스왑 온 매뉴얼 페이지에 새로운 트릭 "문서 중 하나는 루프백 장치에 파일을 매핑하는 것"이 ​​있습니다. 아직 시도하지 않았습니다.
malat

8

평판이 50 미만이므로 댓글을 달 수 없습니다. 그러나 기존 답변을 업데이트해야합니다. 리눅스 커널 5.0.0에서 btrfs는 기본적으로 스왑 파일을 지원합니다. (NO-COW로 설정해야합니다)

다음은 kernel.org의 정보입니다 : https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F

커널 5.0 이상에서 btrfs는 기본 스왑 파일을 지원하지만 몇 가지 제한이 있습니다. 스왑 파일-한 장치에서 압축하지 않고 NOCOW로 완전히 할당해야합니다.

이 링크는 https://wiki.archlinux.org/index.php/swap#Swap_file 을 수행하는 방법을 보여줍니다 .

리눅스 <4.21에서 시도하지 마십시오 !!!

경고 : 버전 5.0 이전의 Linux 커널에서 Btrfs는 스왑 파일을 지원하지 않습니다. 이 경고에 유의하지 않으면 파일 시스템이 손상 될 수 있습니다. 루프 장치를 통해 마운트 될 때 Btrfs에서 스왑 파일을 사용할 수 있지만 스왑 성능이 크게 저하됩니다.


1
링크에서 관련 섹션을 인용 해 주시겠습니까?
Burgi

@ Burgi 나는 내 대답을 편집했고 지금은 더 낫다!
recolic

2

어쨌든 파일을 바꾸려면 btrfs-swapon을 사용하십시오.


나는 같은 해결책을 찾았지만 그러한 접근법의 정확성에 대해 우려하고 있습니다. 전의. 루프 개발을 사용하여으로 만든 구멍 검사를 할 수 truncate -s 4G swapfile_holes.img있습니다. 즉, swapon무언가를 확인 하는 이유 는 스왑 파일이 합리적인 성능을위한 일부 요구 사항을 충족시켜야하기 때문입니다.
ony

1
그리고 얼마 전에 losetup매핑을 사용하지 않기로 결정했습니다 . losetupbtrfs에서 스왑을 사용하기 시작한 후 (사전 할당 된 파일 사용) 시스템이 중단되었습니다 . 아마도 버퍼와 캐시를 방해 할 수 있습니다. 즉, 시스템은 메모리를 확보하고 무언가를 교환하려고하지만 동일한 크기의 캐시가 증가합니다. 확실하지 않지만, 나는 그것을 피할 것입니다.
ony

0

2019 년 4 월 업데이트 : recolic의 답변을 참조하십시오 .Btrfs 는 Linux 커널 버전 5.0.0 부터 스왑지원하기 시작 했다고 주장합니다 .

원래 답변 :

Sathya의 답변에는 죽은 링크가 포함 된 것 같습니다.

Btrfs FAQ에서 이것을 발견했습니다.

btrfs는 스왑 파일을 지원합니까?

현재는 없습니다. 파일을 NOCOW로 만드는 것만으로는 도움이되지 않습니다. 스왑 파일 지원은 잠재적 인 손상으로 인해 btrfs가 의도적으로 구현하지 않는 하나의 기능에 의존합니다. 스왑 구현은 스왑 파일의 블록 번호와 같이 btrfs에 포함되지 않을 수도있는 일부 가정에 의존하는 반면, btrfs는 여러 장치의 경우 다른 블록 번호 매핑을 갖습니다. 스왑을 btrfs로 이식하는 데 사용할 수있는 새로운 API가 있습니다. 자세한 내용은 프로젝트 아이디어 # 스왑 파일 지원을 참조하십시오.

해결 방법은 성능은 좋지 않지만 루프 장치를 통해 스왑 파일을 마운트하는 것입니다.

출처 : https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F


FAQ는 또한 리눅스 커널 5.0부터 Btrfs에서의 스왑이 지원된다고 말합니다
phuclv

@ phuclv : 예, 진행!
mpb

-2

Invalid argumentswapon명령에 대한 인수에 문제가 있다고 말합니다 .

먼저을 읽으십시오 man swapon.

시도하십시오 sudo swapon swapfile2. 제 경우에는 효과가 있습니다.


5
맨 페이지를 읽지 않고 -v 및 -f 플래그를 찾을 수 있다고 생각하십니까?
malat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.