Ext4 파일 시스템을 Btrfs로 변환하는 방법 |
Btrfs는 Linux 시스템용 COW(기록 중 복사) 원칙에 기반한 파일 시스템을 결합한 최신 파일 시스템입니다. 이 파일 시스템은 Linux 파일 시스템에 대한 복구, 내결함성 및 단순화된 관리와 같은 고급 기능을 구현하는 것을 목표로 합니다. Btrfs는 설계상 고성능을 제공하고 대규모 스토리지 서버를 지원합니다.
여기에 구현된 COW 원칙은 파일 시스템에서 데이터가 수정되면 파일 시스템의 다른 무료 위치에 복사, 수정 및 기록된다는 의미입니다. 이는 정전 시 데이터 손상이나 부분 업데이트 오류를 방지하는 데 도움이 됩니다.
Btrfs는 다음 기능을 제공합니다.
- 대용량 파일 크기 지원
- 범위 기반 파일 저장
- 작은 파일의 공간 효율적인 패키징
- 쓰기 가능한 스냅샷 및 읽기 전용 스냅샷
- 하위 볼륨 지원
- 하위 볼륨 인식 할당량 지원
- LVM 지원과 통합된 다중 장치 지원, RAID 어레이 구성 등
- 데이터 및 메타데이터에 대한 체크섬
- 공간 효율적인 인덱스 디렉터리
이 가이드의 주요 목적은 Btrfs 파일 시스템에 대한 개요를 제공하고 Ext4 파일 시스템을 Btrfs로 변환하는 방법에 대한 체계적인 안내를 제공하는 것입니다. 비루트 파일 시스템 변환은 재부팅 없이 쉽게 수행할 수 있습니다. 루트 파일 시스템을 변환하려면 Live CD로 부팅해야 합니다. 이 가이드에서는 루트 파일 시스템을 변환하고 필요한 경우 Ext4로 롤백하는 방법을 알아봅니다.
시작하기.
홈 폴더와 /etc와 같은 시스템의 중요한 데이터를 백업하는 것이 좋습니다.
백업이 완료되면 시스템 패키지를 사용 가능한 최신 버전으로 업데이트하세요.
##On Debian/ubuntu
sudo apt update && sudo apt upgrade
##On Fedora
sudo dnf update1단계 – 디스크 공간 확보
btrfs-convert 명령은 기존 EXT4 데이터를 현재 위치에 유지하면서 파일 시스템 데이터를 파티션의 여유 공간에 다시 생성했습니다.
필요한 여유 공간의 양을 알 수 없습니다. 공간이 충분하지 않으면 변환이 실패하지만 데이터에 손상을 주지 않습니다. 더 많은 여유 공간을 확보하려면:
- 사용하지 않는 패키지 및 flatpak 정리:
dnf autoremove,flatpak Remove –unused, - 패키지 캐시 정리:
pkcon 새로 고침 강제 -c -1,dnf clean all - 예를 들어 내부에서 사용되지 않는 가상 머신 이미지를 정리합니다. 그놈 박스
- 오래된 시스템 저널 정리: Journalctl –vacuum-size=100M
- Docker를 사용하는 경우
docker Volume prune,docker image prune -a와 같은 도구를 주의 깊게 사용하세요. 바오밥을 사용하여 제거할 대용량 파일 및 폴더를 식별하세요. 가능하다면 홈 폴더 외부의 파일을 수동으로 삭제하지 마세요.
이 작업이 완료되고 충분한 여유 공간이 확보되면 아래와 같이 진행하세요.
2단계 - 라이브 이미지 생성
마운트된 파일 시스템은 변환이 불가능하므로 라이브 이미지를 사용해야 합니다. 다음과 같이 라이브 이미지를 다운로드한 Ubuntu 22.04 시스템을 사용하여 이를 시연하겠습니다.
# Download with wget - Desktop Edition (Intel 64-bit)
wget https://cdimage.ubuntu.com/daily-live/current/jammy-desktop-amd64.iso
# Download with wget - Desktop Edition (ARM 64-bit)
wget https://cdimage.ubuntu.com/daily-live/current/jammy-desktop-arm64.iso시스템에 적합한 라이브 부팅용 다른 이미지를 사용할 수도 있습니다. 예를 들어 Fedora 35 이미지는 다음과 같습니다.
wget https://download.fedoraproject.org/pub/fedora/linux/releases/35/Workstation/x86_64/iso/Fedora-Workstation-Live-x86_64-35-1.2.isoISO 파일을 사용하여 아래와 같이 부팅 가능한 USB 스틱을 만듭니다.
# Identify USB device
$ sudo lsblk
# Flash OS to USB drive
$ sudo dd bs=4M if=/jammy-desktop-amd64.iso of=/dev/sdx status=progress oflag=sync/dev/sdx를 USB 디스크 경로로 바꾸고 jammy-desktop-amd64.iso 를 올바른 ISO 파일 경로.
3단계 - Live CD로 부팅
설치 미디어가 생성되면 해당 미디어로 부팅합니다. Live CD에서 부팅하려면 부팅 옵션을 수정해야 할 수도 있습니다.
그림과 같이 Live 모드로 진행합니다. 우분투 22.04의 경우:
루트 사용자로 전환합니다.
sudo su -gnome-disks를 사용하거나 아래와 같이 Fdisk를 사용하여 기기를 식별하세요.
$ fdisk -l
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 50B1DEBD-1E51-47C6-A980-272DCF1B9287
Device Start End Sectors Size Type
/dev/sda1 2048 79903539 79901492 38.1G Linux filesystem
/dev/sda2 79904768 79908863 4096 2M BIOS boot
.......
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 89C5C503-8E64-4CC2-8E0C-B54634768D73
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 1054719 1050624 513M EFI System
/dev/sda3 1054720 83884031 82829312 39.5G Linux filesystem
...여기서 내 파티션은 /dev/sda3입니다. EXT4 파일 시스템인지 확인하세요.
$ file -sL /dev/sda3
/dev/sda3: Linux rev 1.0 ext4 filesystem data, UUID=0c84a840-1dfb-4ea3-b387-57d6182f7672 (extents) (64bit) (large files) (huge files)4단계 - Ext4 파일 시스템을 Btrfs로 변환합니다.
적절한 디스크가 식별되면 이제 아래 명령을 실행하여 Btrfs로 변환할 수 있습니다.
디스크를 마운트 해제하고 무결성을 확인하십시오.
sudo umount /dev/sda3
sudo fsck.ext4 -fyv /dev/sda3샘플 출력:
e2fsck 1.46.5 (30-Dec-2021)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
216559 inodes used (8.37%, out of 2588672)
89 non-contiguous files (0.0%)
240 non-contiguous directories (0.1%)
# of inodes with ind/dind/tind blocks: 0/0/0
Extent depth histogram: 181707/22
2701443 blocks used (26.09%, out of 10353664)
0 bad blocks
1 large file
158883 regular files
20244 directories
8 character device files
0 block device files
0 fifos
6 links
37408 symbolic links (34807 fast symbolic links)
7 sockets
------------
216556 files무결성 검사가 완료되면 아래와 같이 진행합니다.
sudo btrfs-convert /dev/sda3sda3을 파티션으로 교체하는 것을 잊지 마세요. 문제가 발생하면 man 명령(man btrfs-convert)을 사용하여 도움을 받으세요.
샘플 실행 출력:
create btrfs filesystem:
blocksize: 4096
nodesize: 16384
features: extref, skinny-metadata (default)
checksum: crc32c
free space report:
total: 41874882560
free: 40559443968 (96.86%)
creating ext2 image file
creating btrfs metadata
copy inodes [.] [ 83935/ 80608]
conversion complete
이 프로세스는 파티션 크기와 솔리드 스테이트인지 회전식인지에 따라 꽤 오랜 시간이 걸립니다.
오류가 발견되면 여유 공간을 더 확보하고 btrfs-convert -n을 실행해야 합니다.
5단계 - 디스크 마운트
이제 새로운 Btrfs 파일 시스템이 있으므로 아래와 같이 마운트해야 합니다.
sudo mount /dev/sda3 /mnt경로에 하위 볼륨을 나열합니다.
$ btrfs subvolume list /mnt
ID 256 gen 3 top level 5 path ext2_saved위 출력에는 기본적으로 toplevel 및 ext2_saved와 같은 여러 하위 볼륨이 생성되어 있습니다.
6단계 – 하위 볼륨을 생성합니다.
/home 디렉토리에 대한 스냅샷을 가질 수 있는 플랫 하위 볼륨 레이아웃을 갖고 각 볼륨에 대해 다른 마운트 옵션을 원하는 경우 아래와 같이 진행하십시오.
cd /mnt
btrfs subvolume snapshot ./ ./root2
btrfs subvolume create home2
cp -a home/* home2/이제 볼륨을 생성해야 합니다.
- root2 – 파티션의 전체 스냅샷
- home2 – 빈 볼륨을 만들고 home/*의 콘텐츠를 여기에 복사했습니다.
이제 두 개의 하위 볼륨이 만들어지면 root2, home2 및 ext2_saved를 제외하고 /mnt 의 모든 항목을 삭제합니다.
sudo rm -rf bin dev boot cdrom etc home lib* lost+found media mnt opt proc root run sbin snap srv swap.img tmp usr sys var usr- root2 및 home2 하위 볼륨의 이름을 root 및 home으로 바꿉니다.
mv root2 root
mv home2 home- 나중에 홈 하위 볼륨을 마운트할 수 있도록 루트 하위 볼륨 내에서 홈 폴더를 비웁니다.
cd root/home
rm -rf *7단계 - Fstab 수정
부팅 후 볼륨을 지속성으로 만들어야 하므로 아래와 같이 기존 ext4 파일을 Btrfs로 교체하여 fstab을 수정해야 합니다.
먼저 파티션의 UUID를 식별합니다.
# blkid
.....
/dev/sda3: UUID="a8c320fa-a9d6-42c4-8fa2-95c10c6b202f" UUID_SUB="93562e7f-f631-45dc-a49c-34be5b393b9a" BLOCK_SIZE="4096" TYPE="btrfs" PARTUUID="8d3d5e37-635b-4ce5-a52e-34adb5a18da1"
.......FSTAB 파일 열기
vim /mnt/root/etc/fstab아래 줄을 추가하세요.
###Comment out the existing EXT4 filesystem and add this##
UUID=xx / btrfs subvol=root 0 0
UUID=xx /home btrfs subvol=home 0 0XX를 BTRS 파티션의 UUID로 바꾸세요. UUID는 동일하며 이전 ext4 파티션을 주석 처리하는 것을 잊지 마세요.
예를 들어:
파일을 저장하고 디렉터리를 다시 마운트합니다.
cd
umount /mnt
mount -o subvol=root /dev/sda3 /mnt
mount /dev/sda3 /mnt/boot
mkdir /mnt/boot/efi
mount /dev/sda3 /mnt/boot/efi아래와 같이 시스템 장치를 진행하고 마운트하세요.
mount -t proc /proc /mnt/proc
mount --rbind /dev /mnt/dev
mount --make-rslave /mnt/dev
mount --rbind /sys /mnt/sys
mount --make-rslave /mnt/sys
cp /mnt/etc/resolv.conf /mnt/etc/resolv.conf.chroot
cp -L /etc/resolv.conf /mnt/etc이제 시스템에 Chroot하세요.
chroot /mnt /bin/bash아래 URL을 핑하여 인터넷에 접속할 수 있는지 확인하세요.
# ping google.com
PING google.com (172.217.18.14) 56(84) bytes of data.
64 bytes from fra15s28-in-f14.1e100.net (172.217.18.14): icmp_seq=1 ttl=118 time=5.21 ms
64 bytes from fra24s22-in-f14.1e100.net (172.217.18.14): icmp_seq=2 ttl=118 time=5.19 ms
^Z
[1]+ Stopped ping google.com해결할 수 없는 경우 아래와 같이 resolv.conf 파일을 생성합니다.
rm -rf etc/resolv.conf
vi etc/resolv.conf아래 줄을 추가하고 ping을 다시 시도하세요.
nameserver 8.8.8.8
nameserver 8.8.4.48단계 - GRUB 및 커널 재설치
여전히 chroot 내부에서 아래와 같이 커널과 GRUB를 다시 설치합니다.
Debian/Ubuntu의 경우:
아래 파일을 편집하고 다음 줄을 추가하세요.
# vim etc/default/grub
.....
GRUB_DISABLE_OS_PROBER=false이제 다음 명령을 사용하여 grub을 다시 설치하십시오.
mount /boot/efi
apt reinstall grub-efi shim*
grub-mkconfig -o /boot/efi/efi/grub.cfg
grub-install /dev/sda샘플 출력:
Linux 이미지 나열
# dpkg -l | grep linux-image-.*-generic
rc linux-image-5.15.0-25-generic 5.15.0-25.25 amd64 Signed kernel image generic
ii linux-image-5.15.0-33-generic 5.15.0-33.34 amd64 Signed kernel image generic
ii linux-image-5.15.0-40-generic 5.15.0-40.43 amd64 Signed kernel image generic기본 이미지를 다시 설치합니다.
apt-get install --reinstall linux-image-5.15.0-40-generic
update-grubFedora에서는 아래 명령을 사용하여 grub을 다시 설치하세요.
mount /boot/efi
dnf reinstall grub2-efi shim
dnf reinstall kernel-core
grub-install /dev/sda
grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg모든 작업이 완료되면 시스템을 종료하고 설치 미디어를 꺼낸 다음 디스크에서 부팅합니다.
9단계 – 전환 후 활동
시스템이 올바르게 부팅되고 새 Btrfs 시스템이 원하는 대로 작동하는 경우 이제 이전 ext4 스냅샷이 차지한 볼륨을 회수할 수 있습니다. 이 스냅샷을 사용하여 이전 EXT4 파일 시스템으로 롤백할 수 있습니다. 하위 볼륨의 조각 모음 및 균형 조정을 수행하는 경우에만 롤백 기능을 잃을 수 있습니다.
이 시점에서 Btrfs 파일 시스템에 익숙하다면 스냅샷을 삭제할 수 있습니다.
최상위 하위 볼륨을 마운트합니다.
sudo su -
mount -o subvol=/ /dev/sda3 /mnt
cd /mnt스냅샷 삭제를 진행하기 전에 아래 도구를 설치해야 할 수도 있습니다.
apt install btrfs-progs스냅샷을 삭제합니다.
btrfs subvolume delete ext2_saved마지막으로 변경 사항을 확인합니다.
mount | grep "^/dev"샘플 출력:
그럽 업데이트:
update-grub그게 다야!
마무리
이 가이드는 Ext4 파일 시스템을 Btrfs 파일 시스템으로 변환하는 방법에 대한 필수 지식을 제공했습니다. 이 가이드가 귀하에게 의미가 있었기를 바랍니다.
더보기:
Linux의 BtrFS 파일 시스템 이해 및 작업
Linux에서 XFS/Btrfs 파일 시스템 크기를 조정하는 방법
Arch Linux 설치 프로그램을 사용하여 Arch Linux를 설치하는 방법



