리눅스 lsblk 명령어 사용법 - 디스크·파티션 구조와 UUID 한눈에 보기
이 명령어를 언제 쓰는가
서버에 디스크를 붙이거나 클라우드에서 볼륨을 추가한 직후 가장 먼저 친다. 커널이 새 디바이스를 잡았는지, 이름이 /dev/sdc인지 /dev/nvme1n1인지, 파티션이 이미 있는지 없는지를 한 화면에서 확인할 수 있다.
df는 마운트된 것만 보여 주기 때문에 "디스크는 붙였는데 안 보인다"는 상황에서는 쓸모가 없다. lsblk는 마운트 여부와 무관하게 커널이 아는 블록 디바이스 전부를 트리로 그려 주고, LVM이나 LUKS, 소프트웨어 RAID처럼 층이 쌓인 구조도 부모-자식 관계로 보여 준다.
기본 형식
lsblk [옵션] [디바이스]
인자 없이 실행하면 모든 블록 디바이스를 트리로 출력한다. 디바이스를 지정하면 그 아래만 본다. 루트 권한이 없어도 대부분의 정보가 나오므로 조회용으로 부담 없이 쓸 수 있다.
자주 쓰는 옵션
| 옵션 | 의미 | 예시 |
|---|---|---|
| -f | 파일시스템 타입, LABEL, UUID, 마운트 지점 표시 | lsblk -f |
| -o 컬럼들 | 보고 싶은 컬럼만 지정 | lsblk -o NAME,SIZE,TYPE,MOUNTPOINTS |
| -p | 이름을 /dev/sda1 같은 전체 경로로 | lsblk -p |
| -d | 파티션을 빼고 디스크만 | lsblk -d -o NAME,SIZE,MODEL |
| -l | 트리 대신 평평한 목록. 스크립트 파싱에 유리 | lsblk -l |
| -n | 헤더 줄 제거 | lsblk -ln -o NAME |
| -b | 크기를 바이트 단위 숫자로 | lsblk -b -o NAME,SIZE |
| -e 7 | major 7(loop 디바이스) 제외. snap 노이즈 제거 | lsblk -e 7 |
| -J | JSON 출력. 자동화용 | lsblk -J -o NAME,UUID |
실전 예제
1) 새로 붙인 디스크가 보이는지 확인한다. Ubuntu에서 snap이 만든 loop 디바이스가 화면을 채우면 -e 7로 걷어낸다.
lsblk -e 7
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 49.9G 0 part /
└─sda15 8:15 0 106M 0 part /boot/efi
sdb 8:16 0 200G 0 disk
여기서 sdb는 파티션도 파일시스템도 없는 생디스크다. 하위 항목이 없다는 것이 그 신호다.
2) 파일시스템과 UUID를 확인한다. /etc/fstab에 넣을 UUID를 여기서 그대로 복사한다.
lsblk -f /dev/sdb
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb xfs data 3f7c1e2a-6b90-4c1d-9a55-0b3d2f8e14aa 186G 3% /data
util-linux 2.37 이상의 -f는 NAME,FSTYPE,FSVER,LABEL,UUID,FSAVAIL,FSUSE%,MOUNTPOINTS와 같다. 구형에서는 FSVER가 없고 마지막 컬럼이 MOUNTPOINT다.
3) 필요한 컬럼만 골라 본다. 스크립트나 문서에 붙일 때 깔끔하다.
lsblk -p -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
4) 마운트되지 않은 파티션만 찾아낸다. 리부팅 후 자동 마운트가 빠진 볼륨을 잡아낼 때 쓴다.
lsblk -ln -o NAME,TYPE,MOUNTPOINTS | awk '$2=="part" && $3=="" {print $1}'
5) 디스크 모델과 시리얼을 확인한다. 물리 서버에서 교체할 디스크를 특정할 때 필요하다.
lsblk -d -o NAME,SIZE,ROTA,MODEL,SERIAL
ROTA가 1이면 회전하는 디스크(HDD), 0이면 SSD·NVMe다.
함정과 주의점
MOUNTPOINT와 MOUNTPOINTS를 구분하라. util-linux 2.37에서 MOUNTPOINTS(복수)가 추가되면서 lsblk와 lsblk -f의 기본 출력이 복수형으로 바뀌었다. 바인드 마운트처럼 한 디바이스가 여러 곳에 걸릴 수 있어서다. 단수 MOUNTPOINT는 지금도 그대로 있고 마운트 지점 하나만(대개 마지막 것) 보여 주므로, 이식성이 필요한 스크립트에는 단수형을 쓰는 편이 안전하다. 반대로 -o ...,MOUNTPOINTS를 하드코딩하면 2.37보다 낮은 구형 배포판에서 unknown column으로 죽는다. 사용 가능한 컬럼은 lsblk --help 하단에서 확인할 수 있다.
lsblk에 안 보이면 커널이 아직 모른다는 뜻이다. 가상화 환경에서 볼륨을 붙였는데 목록에 없다면 파티션 테이블 문제가 아니라 스캔이 안 된 것이다. sudo partprobe 또는 echo "- - -" | sudo tee /sys/class/scsi_host/host0/scan으로 재스캔하고, 그래도 없으면 하이퍼바이저 쪽에서 연결이 안 된 것이다.
SIZE는 파티션 크기이지 파일시스템 크기가 아니다. 볼륨을 200GB로 늘리면 lsblk의 SIZE는 즉시 200G로 보이지만, 그 안의 파일시스템은 여전히 옛 크기다. df -h가 안 늘어난 이유가 이것이며 growpart 후 resize2fs(ext4) 또는 xfs_growfs(xfs)를 해야 한다.
macOS에는 lsblk가 없다. 맥에서 같은 정보를 보려면 diskutil list를 쓴다. 디바이스 이름 체계(/dev/disk0s2)와 개념이 달라 리눅스용 스크립트를 그대로 옮길 수 없다.
함께 보면 좋은 명령어
- blkid — 디바이스 하나의 UUID·TYPE만 값으로 뽑을 때. 스크립트에 넣기 좋다.
- df — 마운트된 파일시스템의 사용량을 볼 때. lsblk는 구조, df는 잔량이다.
- mount / findmnt — lsblk로 확인한 디바이스를 실제로 붙이고 마운트 상태를 검증할 때.