Devin.KR
로그인

리눅스 lsblk 명령어 사용법 - 디스크·파티션 구조와 UUID 한눈에 보기

개발자 조회 1

이 명령어를 언제 쓰는가

서버에 디스크를 붙이거나 클라우드에서 볼륨을 추가한 직후 가장 먼저 친다. 커널이 새 디바이스를 잡았는지, 이름이 /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 7major 7(loop 디바이스) 제외. snap 노이즈 제거lsblk -e 7
-JJSON 출력. 자동화용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 이상의 -fNAME,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(복수)가 추가되면서 lsblklsblk -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가 안 늘어난 이유가 이것이며 growpartresize2fs(ext4) 또는 xfs_growfs(xfs)를 해야 한다.

macOS에는 lsblk가 없다. 맥에서 같은 정보를 보려면 diskutil list를 쓴다. 디바이스 이름 체계(/dev/disk0s2)와 개념이 달라 리눅스용 스크립트를 그대로 옮길 수 없다.

함께 보면 좋은 명령어

  • blkid — 디바이스 하나의 UUID·TYPE만 값으로 뽑을 때. 스크립트에 넣기 좋다.
  • df — 마운트된 파일시스템의 사용량을 볼 때. lsblk는 구조, df는 잔량이다.
  • mount / findmnt — lsblk로 확인한 디바이스를 실제로 붙이고 마운트 상태를 검증할 때.