가상 머신이나 스토리지에서 디스크 크기를 늘려도 리눅스는 자동으로 알아차리지 않는다. 반영은 아래 네 단계를 순서대로 밟는다. 어느 단계까지 와 있는지 확인하지 않고 명령부터 실행하면 엉뚱한 장치를 건드린다.
현재 상태부터 확인한다.
lsblk
df -Th
lsblk 에서 디스크는 커진 크기로 보이는데 그 아래 파티션은 예전 크기라면 2단계부터, 디스크 자체가 예전 크기면 1단계부터 시작한다.
재부팅하면 확실하지만, 운영 중이라면 SCSI 장치를 다시 스캔한다.
echo 1 > /sys/class/block/sdc/device/rescan
lsblk /dev/sdc
새로 붙인 디스크가 아예 보이지 않는 경우에는 호스트 버스를 스캔한다.
for h in /sys/class/scsi_host/host*/scan; do echo "- - -" > "$h"; done
NVMe 는 nvme 도구로 다시 읽는다.
nvme ns-rescan /dev/nvme0
growpart 가 가장 안전하다. 없으면 cloud-utils-growpart 패키지를 설치한다. 장치 이름과 파티션 번호를 공백으로 구분해서 넘긴다.
dnf install -y cloud-utils-growpart
growpart /dev/sdc 1
lsblk /dev/sdc
parted 로도 가능하다. 대화형에서 끝 지점을 100% 로 옮긴다.
parted /dev/sdc print
parted /dev/sdc resizepart 1 100%
마운트한 채로 진행할 수 있지만 파티션 테이블을 다시 쓰는 작업이므로 작업 전에 스냅샷이나 백업을 확보한다. 파티션이 디스크의 마지막에 있어야 하고, 뒤에 다른 파티션이 있으면 그 파티션을 먼저 옮기거나 지워야 한다.
df 의 장치가 /dev/mapper/... 형태면 LVM 이다.
pvresize /dev/sdc1
vgs
lvextend -r -l +100%FREE /dev/mapper/vg_data-lv_data
-r 은 파일 시스템까지 함께 늘린다. 이 옵션을 주면 4단계는 생략해도 된다.
LVM 이 아닌 단순 파티션이라면 파일 시스템 종류에 맞는 명령을 쓴다. 종류를 먼저 확인한다.
df -Th /datadrive
xfs_growfs /datadrive # xfs — 마운트 지점을 인자로 준다
resize2fs /dev/sdc1 # ext4 — 장치를 인자로 준다
xfs 는 마운트된 상태에서만 늘릴 수 있고 줄일 수 없다. 인자도 장치가 아니라 마운트 지점이라는 점에서 resize2fs 와 다르다.
df -h /datadrive
lsblk
디스크 전체를 파일 시스템으로 쓰는 구성(파티션 없이 /dev/sdc 에 바로 mkfs)이라면 2단계가 필요 없고 xfs_growfs 만 하면 된다.
growpart 가 NOCHANGE: partition is size ... it cannot be grown 을 내면 커널이 아직 새 크기를 모르는 것이다. 1단계로 돌아간다.
/etc/fstab 에 UUID 로 적어 두었다면 파티션을 늘려도 UUID 는 바뀌지 않으므로 손댈 필요가 없다. 반대로 파티션을 지우고 다시 만들었다면 UUID 가 바뀌므로 blkid 로 확인해 fstab 을 고쳐야 한다.