[리눅스] 커맨드 라인으로 완벽 제어하는 이동식 저장장치 수동 마운트 및 fstab 자동화 가이드
안녕하세요! 지난 하드웨어 업그레이드 연재에 이어, 오늘은 라즈베리파이를 진정한 서버나 임베디드 장비로 활용할 때 반드시 마스터해야 하는 ‘커맨드 라인(명령행) 기반 이동식 디스크 관리 및 마운트(Mount)’ 방법을 깊이 있게 다뤄보겠습니다.
라즈베리파이 OS 데스크톱(GUI) 환경에서는 USB 플래시 드라이브나 외장 하드를 꽂으면 알아서 탐색기가 열리며 자동 마운트됩니다. 하지만 센서 데이터를 수집하거나 로봇을 제어하는 등의 백그라운드 프로젝트에서는 메모리 낭비를 줄이기 위해 GUI를 끄고 콘솔(CLI) 모드로 구동하는 경우가 많습니다.
이때 디스크가 제대로 연결되지 않거나, 내가 원하는 특정 경로에 외부 저장장치를 영구적으로 종속시키고 싶다면 리눅스의 파일 시스템 추상화 계층을 직접 제어해야 합니다. 터미널 명령어 몇 줄로 디스크 관리 마스터가 되는 방법을 핵심만 짚어드립니다!
🔗 1. ‘연결(Connected)’과 ‘마운트(Mounted)’의 차이해해보기
리눅스 시스템을 처음 접할 때 가장 낯선 개념 중 하나가 바로 ‘마운트’입니다.
라즈베리파이 USB 포트에 외장 드라이브를 물리적으로 꽂는 행위는 단순한 ‘연결(Connected)’입니다. 컴퓨터는 하드웨어가 들어왔다는 것은 인지하지만, 사용자가 명령을 내리거나 GUI 시스템이 승인하기 전까지는 내부 콘텐츠가 완벽히 숨겨진 invisible 상태로 유지됩니다. 마치 책꽂이에 꽂혀 있는 책을 눈으로 보고는 있지만, 책장을 펼치기 전까지는 내용을 읽을 수 없는 것과 같습니다.
리눅스 커널이 이 디스크 내부에 접근하여 파일을 읽고, 쓰고, 수정할 수 있도록 가상 파일 시스템 계층 구조의 특정 폴더와 장치를 논리적으로 결합하는 행위를 ‘마운트(Mounting)’라고 부릅니다.
현재 시스템의 전체 마운트 상태를 들여다보고 싶다면 터미널에 아래 명령어를 입력하면 됩니다.
mount
이 명령어는 [장치명] on [마운트 포인트], [파일 시스템 타입], [옵션] 구조로 엄청난 양의 정보를 쏟아냅니다. 우리가 주목해야 할 실제 물리 장치들은 모두 /dev/라는 접두사로 시작합니다.
/dev/mmcblk0p1: 라즈베리파이의 메인 저장소인 SD 카드의 첫 번째 파티션/dev/sda1: USB 포트에 첫 번째로 연결된 외부 드라이브 파티션
🔎 2. 장치 찾기 및 수동 마운트/해제 실전 명령어
새로운 USB 드라이브를 꽂았을 때, 리눅스 커널이 이 장치에 어떤 이름을 부여했는지 확인하는 가장 정확한 로우 레벨(Low-level) 도구는 fdisk입니다.
# 연결된 모든 디스크 및 파티션 레이아웃 목록 조회
sudo fdisk -l
이 명령어를 실행하면 드라이브의 용량과 함께 마운트에 절대적으로 필요한 정보인 파일 시스템 타입(vfat, exfat, ntfs, ext4 등)을 파악할 수 있습니다.
💡 시스템 로그 실시간 추적 최신 Tip: 최신 라즈베리파이 OS 환경에서는 디바이스 로그가 텍스트 파일 대신 시스템 저널 시스템에 기록됩니다. USB 드라이브를 연결했을 때 커널이 어떤 장치명(sda1, sdb1 등)을 할당하는지 실시간으로 모니터링하려면 터미널에 아래 명령어를 실행한 채로 USB를 꽂아보세요.
# 실시간으로 새롭게 발생하는 커널 및 시스템 로그만 추적하기
sudo journalctl -f
또는 오직 하드웨어 커널 메시지(dmesg)만 실시간으로 필터링해서 보고 싶다면 아래 명령어가 가장 깔끔합니다.
sudo dmesg -w
(로그 모니터링을 종료하고 터미널로 돌아오려면 동일하게 Ctrl + C를 누르면 됩니다.)
① 마운트 포인트 생성 및 권한 부여
디스크를 얹어놓을 빈 디렉터리(마운트 포인트)를 생성하고 일반 사용자도 접근할 수 있도록 권한을 열어줍니다.
sudo mkdir /mnt/usb
sudo chmod 775 /mnt/usb
② 수동 마운트 실행
만약 내 USB 드라이브가 FAT32(vfat) 포맷이고 /dev/sda1로 인식되었다면 아래 명령어로 수동 연결합니다.
sudo mount -t vfat /dev/sda1 /mnt/usb
이제 /mnt/usb 경로로 이동하면 외장 디스크의 파일들이 깔끔하게 보이기 시작합니다.
③ 안전하게 마운트 해제 (Unmount)
작업이 끝나고 USB를 뽑기 전에는 반드시 논리적 연결을 끊어주어야 데이터 유실을 막을 수 있습니다. 알파벳 ‘u’ 뒤에 ‘n’이 없는 umount 명령어임에 유의하세요.
sudo umount /dev/sda1
(만약 대상 장치의 파일을 어떤 프로그램이 열어두고 있거나 터미널 경로가 그 안에 머물러 있다면 에러가 발생하므로, cd ~ 등으로 위치를 옮긴 뒤 실행해야 합니다.)
🗂️ 3. UUID 기반 fstab 파일 시스템 테이블 영구 등록
수동 마운트는 라즈베리파이를 껐다 켜면 초기화된다는 단점이 있습니다. 부팅할 때마다 자동으로 마운트되게 하려면 시스템 설정 파일인 /etc/fstab에 등록해야 합니다.
이때 단순히 /dev/sda1이라는 장치명을 쓰면 위험합니다. 부팅할 때 부가적인 외장 하드가 여러 개 꽂혀있을 경우, 커널이 장치 순서를 무작위로 매겨 엉뚱한 디스크가 마운트될 수 있기 때문입니다.
이를 해결하기 위해 파티션 생성 시 무작위로 부여되는 고유 주소인 UUID(Universally Unique Identifier)를 활용해야 합니다.
① 내 디스크의 고유 UUID 찾기
sudo blkid
이 명령어를 실행하면 각 장치의 고유 UUID 값과 볼륨 라벨을 보여줍니다. 예를 들어 UUID="2A0F-AF03"과 같은 값을 안전하게 복사해 둡니다.
② /etc/fstab 수정하기
텍스트 에디터로 파일 시스템 테이블을 엽니다.
sudo nano /etc/fstab
파일의 맨 하단에 아래 양식으로 한 줄을 추가해 줍니다. (UUID 값과 마운트 경로는 본인 환경에 맞게 수정합니다.)
/dev/disk/by-uuid/2A0F-AF03 /mnt/usb1GB vfat nofail 0 0
- nofail 옵션 (★필수): 이 옵션이 없으면, 나중에 해당 USB 드라이브를 뽑은 채로 라즈베리파이를 켰을 때 부팅 과정에서 디스크를 찾지 못해 시스템 전체가 먹통이 되는 대참사가 발생합니다.
nofail을 적어주어야 장치가 없어도 안전하게 부팅을 마칩니다. - 마지막 두 숫자 (0 0): 첫 번째
0은 덤프 백업 기능 비활성화, 두 번째0은 부팅 시 무결성 검사(fsck)를 생략하겠다는 의미입니다. (일반 데이터 저장용 외장 드라이브는 0으로 두는 것이 부팅 속도에 이롭습니다.)
③ nano 에디터 저장 및 즉시 반영
- 수정을 마쳤다면
^O(Ctrl + O)를 눌러 저장하고 엔터를 친 뒤,^X(Ctrl + X)로 에디터를 빠져나옵니다. - 터미널로 돌아와 변경된 fstab 설정을 커널 데몬에 새로고침해 줍니다.
sudo systemctl daemon-reload
- 이제 라즈베리파이를 재부팅하지 않고도 아래 명령 한 줄이면 fstab에 등록된 드라이브만 골라서 즉시 마운트가 완료됩니다.
sudo mount -a
📊 4. 보너스 팁: 마운트된 디스크 잔여 용량 확인 (df)
디스크가 제대로 연결되었는지, 용량은 얼마나 남았는지 확인하고 싶다면 가독성이 떨어지는 mount 대신 가볍고 훌륭한 치트키 명령어인 df를 입력해 보세요.
df -h
-h (Human-readable) 옵션을 주면 기가바이트(G), 메가바이트(M) 단위로 변환되어 현재 마운트된 모든 외부 저장소의 전체 크기와 사용량, 남은 공간을 한눈에 명확하게 파악할 수 있어 무척 편리합니다.
📝 마치며
오늘 다룬 CLI 기반 디스크 마운트 제어 기법은 시스템 해킹, 임베디드 백업 자동화 인프라를 구축할 때 필수적으로 거쳐야 하는 기본기입니다.
실습 중 fstab 옵션 설정이나 UUID 매핑이 꼬여 부팅 경고가 뜨신다면 언제든 댓글로 질문을 남겨주세요! 😊
댓글 남기기