다음은 (좋은 생각인지 여부에 관계없이) 작동하지 않는 것 같습니다.
me@client:~ $ ssh host
me@host:~ $ cd /media/big-hdd
me@host:/media/big-hdd $ sudo fallocate -l 8g swapfile
me@host:/media/big-hdd $ sudo chown me swapfile
me@host:/media/big-hdd $ logout
me@client:~ $ sudo mkdir /media/big-hdd
me@client:~ $ sudo sshfs me@host:/media/big-hdd /media/big-hdd
me@client:~ $ sudo mkswap /media/big-hdd/swapfile
Setting up swapspace version 1, size = 8388604 KiB
no label, UUID=7d6b9704-7692-4463-b0c7-8a94668d715f
me@client:~ $ sudo swapon /media/big-hdd/swapfile
swapon: /media/big-hdd/swapfile: insecure permissions 0644, 0600 suggested.
swapon: /media/big-hdd/swapfile: insecure file owner 1002, 0 (root) suggested.
swapon: /media/big-hdd/swapfile: swapon failed: Invalid argument
누군가가 제안했다다른 곳에서문제 는 실제 할당이 없고 메모리만 예약되어 있기 Invalid argument
때문입니다 . fallocate
하지만 (훨씬 느림)
me@host:/media/big-hdd $ sudo dd if=/dev/zero of=swapfile count=2048 bs=4MiB
아무것도 변하지 않았습니다.
이것은 원칙적으로 불가능합니까, 아니면 작동하지 못하게 하는 실수를 저질렀습니까?
답변1
sshfs
이는 파일 시스템을 구현하는 방식으로 인해 불가능합니다.
기본적으로 파일 시스템의 클라이언트 측을 일련의 sftp
파일 전송에 매핑합니다. 파일을 로컬로 업데이트하고 sshfs
원격으로 복사합니다(완료). 매뉴얼 페이지 자체의 내용은 다음과 같습니다.
SSHFS가 설치된 로컬 컴퓨터에서 구현은 FUSE(사용자 공간의 파일 시스템) 커널 모듈을 사용합니다. 이로 인해 최종 사용자는 마치 자신의 컴퓨터에 있는 로컬 파일인 것처럼 SSH 보안을 통해 제공되는 원격 파일과 원활하게 상호 작용할 수 있습니다. 원격 컴퓨터에서 SSH의 SFTP 하위 시스템을 사용합니다.
또한 FUSE는 사용자 공간에서 구현되므로 스왑이 발생할 수 있다는 점을 명심하세요. 이미 스와핑 중인 시스템에 미치는 영향을 생각해 보세요. FUSE 하위 시스템이 호출되지만 실행하려면 다른 프로세스를 스와핑해야 합니다(또는 더 나쁘게는 자체적으로 다시 스와핑해야 함).
이는 NFS와 같은 블록 기반 파일 시스템을 통해 달성할 수 있으며 실제로 이는 80~90년대 초기 디스크 없는 시스템에서 사용되었습니다.
답변2
놀랍게도 직접 작동하지 않습니다. swapon <swapfile-on-ssh>
둘 다 swapon -o loop <swapfile-on-ssh>
실패 Invalid argument
하고 swapon: swapfile has holes
로그에 표시됩니다.
그러나 다음과 같이 작동할 수 있습니다 losetup
.
losetup -f <swapfile>
losetup # To take a look which device I've got
swapon /dev/loop<N>
나는 이 트릭을 사용하여 라즈베리 3에서 gcc를 구축했습니다. 다른 답변(sshfs 자체가 스와핑 대상일 수 있음)에 대한 우려가 여전히 존재합니다.