원문 보기: https://dawoum.duckdns.org/wiki/Btrfs/Moving_ext4_partitions_to_btrfs_filesystem
가상 기계 아래에서 ext4 파티션을 btrfs 파일 시스템으로 바꾸는 예제는 다음에 있습니다:
이제 현재 작동 중인 실제 시스템을 대상으로 파일 시스템 전환을 시작합니다.
현재 정보는 아래와 같습니다:
- 펌웨어: UEFI
- /dev/nvme1n1p1 : /boot/efi : vfat
- /dev/nvme1n1p2 : / : ext4
이것을 아래와 같이 바꿀 예정입니다:
- /dev/nvme1n1p1 : /boot/efi : vfat
- /dev/nvme1n1p2 : /boot : ext4
- /dev/nvme1n1p3 : subvol=@ : btrfs
- /dev/nvme1n1p3 : subvol=@home : btrfs
먼저 백업을 진행합니다. 백업을 진행하기 전에 가능한 불필요한 파일들은 제거하는 것이 좋겠습니다. 먼저, 다음 파일을 제거했습니다:
- /var/log/daemon.log, messages 몇 년 사용하다 보니 수 기가를 사용합니다.
- /var/lib/mysql/wikidb/l10n_cache.ibd (수 기가를 사용, 현재 필요하지 않고, truncate table로 처리할 수 있습니다)
- 그 외에도 시스템에 남은 찌꺼기를 가능한 제거하십시오.
백업은 다른 디스크 (마운트 포인터: /home/user_id/Projects)에 저장할 것입니다.
#!/bin/bash
cd / # THIS CD IS IMPORTANT THE FOLLOWING LONG COMMAND IS RUN FROM /
tar -cvpzf /home/user_id/Projects/backup.tar.gz \
--exclude=/home/user_id/Projects \
--exclude=/boot/efi \
--exclude=/proc \
--exclude=/tmp \
--exclude=/dev \
--exclude=/sys \
--exclude=/run \
--exclude=/home/*/.cache /
위와 같이 백업할 경우에 문제가 발생합니다. 백업에서는 /proc, /tmp, /dev, /sys, /run 디렉토리가 필요없을지 모르지만, 파일 시스템 전환을 시도할 때에는 가능한 문제가 생기지 않도록 아래와 같이 해야 할 것으로 보입니다:
#!/bin/bash
cd / # THIS CD IS IMPORTANT THE FOLLOWING LONG COMMAND IS RUN FROM /
tar -cvpzf /home/user_id/Projects/backup.tar.gz \
--exclude=/home/user_id/Projects \
--exclude=/boot/efi \
--exclude=/home/*/.cache /
백업 정보 132G, nvme 4.0 (ext4) -> sata ssd (btrfs), 1시간 정도
복원 정보 77G, sata ssd (btrfs) -> nvme 4.0 (btrfs), 14분 정도
Partitioning and restoring
데비안 라이브시디로 부팅 후에, GParted를 사용해서 파티션을 지우고, 새롭게 만들었습니다. 그런-다음
- sudo su
- mount /dev/nvme1n1p3 /mnt
- mount /dev/sda1 /media
- cd /media
- tar xvf backup.tar.gz -C /mnt
- btrfs subvol create @
- mv * @/
- btrfs subvol create @home
- mv @/home/* @home
- mv @/boot/* /media
- mkdir -p /media/efi
- umount /media
- umount /mnt
- mount -o subvol=@ /dev/nvme1n1p3 /mnt
- mount -o subvol=@home /dev/nvme1n1p3 /mnt/home
- mount /dev/nvme1n1p2 /mnt/boot
- mount /dev/nvme1n1p1 /mnt/boot/efi
- for fs in proc sys dev dev/pts; do mount --bind /$fs /mnt/$fs; done
- chroot /mnt /bin/bash
- blkid /dev/nvme1n1p2
- blkid /dev/nvme1n1p3
- nano /etc/fstab
UUID=..... / btrfs noatime,subvol=@,compress=zstd:2 0 1
UUID=..... /home btrfs noatime,subvol=@home,compress=zstd:2 0 2
- grub-mkconfig -o /boot/grub/grub.cfg
- update-initramfs -u
- grub-install --no-nvram
- update-grub
- cat /boot/grub/grub.cfg
여기서 위의 blkid로 확인 것으로 바뀌었는지 확인하십시오.
Troubleshootings
사용자와 그룹 변경
평소 타르를 풀 때, -xvf 옵션을 사용하다 보니, 이때에도 같은 옵션을 사용함으로써 -p 옵션에서 처리해야 할 부분이 잘못 처리된 파일과 디렉토리들이 있습니다. 이 문제는 gdm이 시작되지 않아서 인식하게 되었습니다.
어쨌든, 복구 후에 꽤 많은 작업을 수행한 후이기 때문에, 새롭게 타르를 풀어서 덮어쓰지 않았고, 다른 디렉토리에 백업 타르를 풀어서, 잘못 적용된 파일을 일일이 확인해서 수정했습니다.
이때, 사용자와 그룹, 등은 가상 기계 아래에 설치된 테스트 시스템의 정보를 이용했습니다.
실제로 문제가 된 디렉토리와 파일은 많지 않았고, 주로 특이한 사용자와 그룹을 가진 파일들이 영향을 받았습니다.
댓글
댓글 쓰기