이 글은 메모리가 부족한 라즈베리파이 환경에서 Swap 파일을 생성하고, /etc/fstab에 등록하여 재부팅 후에도 자동으로 활성화되도록 설정하는 전체 과정을 정리한 글입니다. echo ... | sudo tee -a /etc/fstab 명령어의 구조 분석부터 시작해, /etc/fstab 파일의 구조와 각 필드의 의미, fstab 수정 후 안전하게 검증하는 방법(findmnt --verify), systemd 재로드 필요성까지 실제 터미널 작업 순서대로 다룹니다. 라즈베리파이 OS의 파티션 구성 특이사항(LABEL 기반 마운트, /boot/firmware 경로)도 함께 설명합니다.

Swap 파일 생성 전체 과정

Swap 파일을 추가하려면 파일 생성 → 권한 설정 → 포맷 → 활성화 → fstab 등록 순으로 진행합니다.

# 1. Swap 파일 생성 (2GB 예시)
sudo fallocate -l 2G /swapfile

# 2. 보안을 위한 권한 설정 (root만 읽고 쓸 수 있도록)
sudo chmod 600 /swapfile

# 3. Swap 영역으로 포맷
sudo mkswap /swapfile

# 4. Swap 활성화
sudo swapon /swapfile

# 5. 재부팅 후에도 유지되도록 fstab에 등록
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

마지막 단계가 없으면 재부팅 시 swap이 사라지므로 반드시 등록해야 합니다.

echo ... | sudo tee -a /etc/fstab 명령어 분석

이 명령어는 세 부분으로 구성됩니다.

첫 번째, echo '/swapfile none swap sw 0 0'fstab의 한 줄로 들어갈 문자열을 생성합니다. 각 필드는 공백으로 구분된 6개의 값입니다.

두 번째, | (파이프)앞 명령어의 출력을 다음 명령어의 입력으로 전달합니다.

세 번째, sudo tee -a /etc/fstabtee는 입력받은 내용을 파일에 기록하면서 동시에 화면에도 출력하는 명령어입니다. -a 플래그는 append(추가) 모드로, 기존 내용을 덮어쓰지 않고 파일 끝에 추가합니다. 이 플래그가 없으면 fstab 전체가 날아가 부팅 불가 상태가 될 수 있으므로 매우 중요합니다.

>> 리다이렉션 대신 tee -a를 쓰나?

직관적으로는 sudo echo '...' >> /etc/fstab이 더 단순해 보이지만, 이 방식은 Permission denied 에러가 발생합니다. 쉘이 리다이렉션(>>)을 먼저 처리하는데, 이때 쉘은 일반 사용자 권한으로 /etc/fstab을 열려고 시도하기 때문입니다. sudoecho에만 적용되고 리다이렉션에는 적용되지 않습니다.

반면 tee를 사용하면 tee 자체가 sudo로 실행되어 root 권한으로 파일에 쓸 수 있습니다. 이것이 리눅스에서 root 소유 파일에 내용을 추가할 때 tee -a를 쓰는 전통적인 패턴입니다.

/etc/fstab 파일의 구조

/etc/fstab은 File System Table의 약자로, 부팅 시 어떤 저장 장치를 어디에 어떻게 마운트할지 정의한 설정 파일입니다. systemd가 부팅 시 이 파일을 읽어 자동으로 마운트 작업을 수행합니다.

각 줄은 6개 필드로 구성됩니다.

<device>  <mount_point>  <filesystem>  <options>  <dump>  <pass>
필드 설명
device 마운트할 장치 (UUID, LABEL, 경로 등)
mount_point 연결할 디렉토리 경로 (swap은 none)
filesystem 파일시스템 타입 (ext4, vfat, swap 등)
options 마운트 옵션 (defaults, sw, ro 등)
dump 백업 여부 (보통 0)
pass fsck 검사 순서 (0: 검사 안 함, 1: 루트, 2: 나머지)

라즈베리파이의 fstab 구성

라즈베리파이 Ubuntu의 기본 fstab은 다음과 같습니다.

LABEL=writable    /                ext4     defaults  0  1
LABEL=system-boot /boot/firmware   vfat     defaults  0  1
/swapfile         none             swap     sw        0  0

일반 PC와 다른 특징이 두 가지 있습니다. 첫째, UUID 대신 LABEL을 사용합니다. SD카드를 다른 기기에서 굽거나 복제하는 경우가 많은 라즈베리파이 환경에서는 UUID가 매번 바뀌지만 LABEL은 이미지에 고정되어 있어 관리가 편합니다. 둘째, 부트 파티션 경로가 일반 리눅스의 /boot가 아닌 **/boot/firmware**입니다. 여기에 config.txt, cmdline.txt, 커널 이미지 등 라즈베리파이 부팅에 필수적인 파일들이 들어 있으므로 함부로 수정하면 안 됩니다.

fstab 수정 후 안전하게 검증하기

fstab 수정은 위험한 작업이므로 재부팅 전에 반드시 검증해야 합니다. 잘못 작성된 fstab은 부팅 실패로 이어질 수 있습니다.

# 가장 안전한 검증 (읽기 전용, 시스템 변경 없음)
sudo findmnt --verify

findmnt --verify는 실제로 마운트하지 않고 fstab 문법만 검사하므로 가장 안전합니다. 문법 오류, 중복 마운트 포인트, 잘못된 UUID 등을 찾아줍니다.

실행 결과 예시:

none
   [W] non-bind mount source /swapfile is a directory or regular file
   [W] your fstab has been modified, but systemd still uses the old version;
       use 'systemctl daemon-reload' to reload

0 parse errors, 0 errors, 2 warnings

0 parse errors, 0 errors이면 문법은 완전히 정상입니다. 경고 두 개는 모두 무해합니다.

경고 해석과 처리

첫 번째 경고는 swap 파일이 일반 파일 형태라 findmnt가 낯설어하는 것입니다. findmnt는 일반 파일시스템 마운트 검증이 주 목적이라 swap 파일에 대해서는 완벽하게 인식하지 못합니다. 무시해도 됩니다.

두 번째 경고는 중요합니다. fstab은 수정했지만 systemd가 아직 예전 버전을 메모리에 캐시하고 있다는 의미입니다. 최신 리눅스는 fstab을 읽어 내부적으로 .mount 유닛 파일로 변환해 관리하는데, fstab 변경 후에는 systemd에 알려줘야 합니다.

sudo systemctl daemon-reload

이 명령어는 systemd가 새 fstab을 다시 읽게 만듭니다. 기존 마운트에 영향을 주지 않으므로 안전합니다.

최종 확인

모든 설정이 끝나면 swap이 실제로 작동 중인지 확인합니다.

# swap 활성화 상태 확인
sudo swapon --show

# 메모리와 swap 용량 확인
free -h

swapon --show 출력에 /swapfile이 나오고, free -hSwap: 줄에 용량이 잡혀 있으면 설정이 완료된 것입니다. 이후 재부팅해도 fstab 등록 덕분에 자동으로 swap이 활성화됩니다.