Profile picture

[Linux] ext4 -> xfs 파일시스템 전환기

JaehyoJJAng2025년 09월 10일

개요

  • OS: Rocky Linux

  • 현재:

    • 1번 베이 디스크 = 메인 디스크 → /dev/sda (OS 설치됨, ext4)
    • 2번 베이 디스크 = 백업 디스크 → /dev/sdb (OS 설치됨, ext4)
  • 파티션 구조 (예시, 메인 디스크 /dev/sda 기준):

    파티션 마운트 지점
    /dev/sda1 /boot
    /dev/sda2 /
    /dev/sda3 swap
    /dev/sda4 extended
    /dev/sda5 /var
    /dev/sda6 /usr
    /dev/sda7 /home
  • 목표:

    • ext4 대신 xfs를 사용하도록 다시 구성
    • 방법:
      한쪽 디스크를 xfs로 새로 세팅 → 기존 디스크 내용 rsync로 복제 → 그 디스크로 부팅


작업 순서 정리

  • 디스크/파티션/마운트 상태 확인 (lsblk, fdisk, /etc/fstab 확인)
  • 부팅된 상태에서, 초기화할 디스크(fdisk로 파티션 재구성)
    • 기존 구조와 동일한 파티션 구조로 만들기
  • 새 파티션에 xfs 파일시스템 생성 (swap은 그대로 mkswap)
  • /disk 아래에 새 디스크 마운트 트리 구성 후, 각각 파티션 마운트
  • rsync로 현재 시스템(sda)의 데이터를 /disk로 모두 복제 (특정 디렉터리 exclude)
  • /disk 안의 /etc/fstab, dracut 설정, grub 설정을 새 디스크 기준으로 수정
  • chroot/disk에 들어가서:
    • dracut -f 실행 (xfs 드라이버 포함)
    • grub2-mkconfig, grub2-install 등으로 부팅 설정 완성
  • 서버 종료 → 디스크 자리 다시 교체 → 새 디스크로 부팅 테스트
  • 정상 부팅 확인 후, 남은 디스크도 같은 방식으로 정리할지 결정

작업 시작

1. 현재 디스크 상태 확인

lsblk
fdisk -l /dev/sda
fdisk -l

여기서 /dev/sda의 파티션 구조, 마운트 포인트, 파일시스템 타입(ext4) 확인하기.


2. /dev/sdb 파티션 초기화 및 재구성

fdisk /dev/sdb
  • 기존 파티션 삭제 (d)
  • 새 파티션 생성 (n)
    • /dev/sda동일한 구조로 맞추기:
      • sdb1 : /boot
      • sdb2 : /
      • sdb3 : swap
      • sdb4 : extended
      • sdb5 : /var
      • sdb6 : /usr
      • sdb7 : /home
  • 변경 내용 저장 (w)

작업 후 확인하기.

fdisk -l /dev/sdb

3. XFS 파일시스템 생성

실무에서는 /boot는 ext4, 나머지(/, /var, /usr, /home)는 xfs로 가는 경우도 많다고 한다.

mkfs.xfs /dev/sdb1
mkfs.xfs /dev/sdb2
mkfs.xfs /dev/sdb5
mkfs.xfs /dev/sdb6
mkfs.xfs /dev/sdb7
mkswap /dev/sdb3

4. 새 디스크 마운트 트리 구성

mkdir /disk
mount /dev/sdb2 /disk      # / (root)

mkdir /disk/{boot,var,usr,home}
mount /dev/sdb1 /disk/boot
mount /dev/sdb5 /disk/var
mount /dev/sdb6 /disk/usr
mount /dev/sdb7 /disk/home

5. rsync로 데이터 복제

현재 부팅된 디스크(/dev/sda)의 데이터를 /disk(=새 디스크)로 복제한다.

이 때 /proc, /sys, /dev, /run, /tmp, /mnt, /media, /disk 등은 복제 대상에서 제외

rsync -avh --exclude /disk --exclude /dev --exclude /proc --exclude /sys --exclude /run / /disk

복제 후 /disk/etc, /disk/var, /disk/usr 등에 데이터가 잘 들어갔는지 확인.


5. 새 루트(/disk) 설정 수정

/disk/etc/fstab 수정하기

/disk/etc/fstab를 열어서, 기존 ext4 -> xfs로 변경 + UUID도 새 디스크 파티션의 UUID 값으로 변경해줘야 함.


# 현재 디스크 UUID 확인
blkid /dev/sdb*

# /disk/etc/fstab 편집
  • 기존에 /dev/sda1/UUID가 ext4로 되어 있다면 → xfs로 변경
  • 장치 이름(/dev/sdaX) 대신 UUID로 쓰는 걸 권장
  • swap도 /dev/sdb3 UUID로 수정
# 예시
UUID=...   /      xfs   defaults  0 0
UUID=...   /boot  xfs   defaults  0 0
UUID=...   /var   xfs   defaults  0 0
UUID=...   /usr   xfs   defaults  0 0
UUID=...   /home  xfs   defaults  0 0
UUID=...   swap   swap  defaults  0 0

6. dracut 설정에서 xfs 드라이버 추가하기

새 환경(/disk) 기준으로 dracut 설정 파일을 하나 만든다.

mkdir -p /disk/etc/dracut.conf.d

cat << 'EOF' > /disk/etc/dracut.conf.d/xfs.conf
add_drivers+=" xfs "
EOF

7. chroot로 들어가서 grub + initramfs 재구성

새 루트로 진입

mount --bind /dev  /disk/dev
mount --bind /proc /disk/proc
mount --bind /sys  /disk/sys

chroot /disk /bin/bash

이 안에서 아래 작업 진행하기

dracut 재생성 (xfs 포함한 initramfs)

dracut -f

커널 버전이 여러 개면 각 버전별로 생성됨.


grub 설정파일 재생성

grub2-mkconfig -o /boot/grub2/grub.cfg

(UEFI 환경이면 보통 /boot/efi/EFI/rocky/grub.cfg 등 경로가 다를 수 있음)


새 디스크에 grub 설치해주기

grub2-install /dev/sdb

이 때 새 OS가 얹힌 디스크가 /dev/sdb가 맞는지 재차 확인.


sync 해주고 chroot 종료

sync
exit

bind 마운트 해제해주기

umount /disk/proc
umount /disk/dev
umount /disk/sys
umount /disk/run
umount -R /disk

부팅 테스트

서버 종료 후, 바이오스에서 xfs로 전환된 디스크로 부팅하도록 설정한 후

정상적으로 부팅되는지 테스트를 진행해보면 된다.

부팅이 진행됐다면 아래 항목을 체크해보자.

  • 파일시스템 타입이 xfs로 나오는지
  • /etc/fstab의 UUID와 실제 blkid가 일치하는지

Loading script...