쉘 명령은 과도한 메모리 사용을 유발하지만 쉘 스크립트는 그렇지 않습니다.

쉘 명령은 과도한 메모리 사용을 유발하지만 쉘 스크립트는 그렇지 않습니다.

[리눅스 민트 20.1, 16GB RAM, 16GB 스왑]

최근에 시스템(루트 및 백업 파티션)을 BTRFS로 변환했습니다. 루트의 일부 스냅샷을 백업 드라이브에 보관하려고 했지만 다음 명령의 메모리 사용량으로 인해 시스템이 충돌합니다.

btrfs send /.snapshots/98/snapshot | btrfs receive /media/backups/@root/.snapshots/98

이 명령은 거의 20GB의 RAM을 차지했으며 그 과정에서 시스템이 몇 번 완전히 정지되었습니다. 내 루트 파티션은 스냅샷을 제외하고 약 11GB를 사용합니다.

다음 테스트는 다음과 같이 스크립트에서 동일한 명령을 사용하는 것입니다(원래 이유는 systemd-run메모리 제한을 테스트하고 설정하는 것이었습니다).

#!/usr/bin/fish

btrfs send /.snapshots/98/snapshot | btrfs receive /media/backups/@root/.snapshots/98

이 스크립트를 실행하면 총 8MB가 사용되며 4배 더 빠릅니다. 동일한 테스트 환경에서 실행 중인지 확인하기 위해 원본 백업 스냅샷이 삭제되고 커밋되었는지 확인했습니다( btrfs subvol delete -Cv). 또한 bash로 동일한 테스트를 실행하여 동일한 결과를 얻었습니다.

업데이트: 모든 테스트를 동일하게 만들기 위해 별칭 (to ) 대신 다시 실행 fish했습니다 . 결과는 동일합니다.bash/usr/bin/btrfssudo btrfs

업데이트 #2: 이전 업데이트에 오류가 있었습니다.

관련 정보