btrfs를 사용하여 기본 하위 볼륨(subvolid=0)의 Linux 설치를 다른 하위 볼륨으로 이동합니다.

btrfs를 사용하여 기본 하위 볼륨(subvolid=0)의 Linux 설치를 다른 하위 볼륨으로 이동합니다.

루트 btrfs 파일 시스템에 마운트할 때 많은 Linux 배포판은 기본 하위 볼륨에 설치됩니다. 수정하지 않은 채로 두면 이 레이아웃은 새로운 스냅샷이나 하위 볼륨이 루트 파일 시스템 내에 생성되도록 강제합니다. 이는 스냅샷 자체가 포함되어 있기 때문에 매우 혼란스럽습니다.

/ 
│─dev
│─home
│─var
│─usr
│─...
└─snapshots
  └─snap1 

보다 이해하기 쉬운 기본 하위 볼륨 레이아웃은 다음과 같습니다.

/ 
├─subvolumes
│ └─root
│   ├─dev
│   ├─home
│   ├─var
│   ├─usr
│   └─...
└─snapshots
  └─snap1 

livecd에서 부팅하지 않고 이 하위 볼륨 레이아웃을 사용하도록 배포판의 기본 btrfs 설치를 어떻게 변경할 수 있습니까?

답변1

꼭 필요한 것은 아니지만 예상치 못한 데이터 손실을 방지하려면 단일 사용자("복구") 모드에서 이러한 단계를 수행하는 것이 좋습니다.

기본 하위 볼륨에 원하는 레이아웃을 생성합니다.

mkdir /subvolumes
btrfs subvolume snapshot / /subvolumes/root
mkdir /snapshots

/subvolumes/root새로운 루트 파일 시스템이 될 것이므로이 단계 후에는 파일 시스템을 변경하지 마십시오..

/subvolumes/root/etc/fstab시스템이 새 루트 하위 볼륨을 루트 파일 시스템으로 사용하도록 편집합니다 . 이렇게 하려면 이 subvol=/subvolumes/root옵션을 포함하도록 수정해야 합니다.

이제 새로운 하위 볼륨을 가리키도록 grub을 수정할 수 있도록 어딘가에 새 루트 파일 시스템을 마운트해야 합니다.

mkdir /media/temporary
mount -o subvol=/subvolumes/root /dev/sdXX /media/temporary
cd /media/temporary
mount -o bind /dev  dev
mount -o bind /sys  sys
mount -o bind /proc proc
mount -o bind /boot boot # only necessary if you have a separate boot partition
chroot .
update-grub
exit

그게 다야. 재부팅하면 루트 파일 시스템이 새 하위 볼륨이 됩니다. 성공하면 디렉터리가 없어야 합니다 /snapshots.

필요한 경우 기본 하위 볼륨에 대한 영구 마운트 지점을 생성할 수 있습니다.

mkdir /media/btrfs/root

mount -o subvolid=0 /dev/sdXX /media/btrfs/root그런 다음 기본 하위 볼륨을 마운트 할 수 있습니다 .

이제 기본 하위 볼륨에서 이전 루트 파일 시스템의 내용을 안전하게 삭제할 수 있습니다.

cd /media/btrfs/root
rm -rf {dev,home,var,...}

답변2

제안된 레이아웃에는 "사소한" 문제가 있습니다. (어쨌든 괜찮습니다. 지금 사용하고 있습니다.)

GURB - '기본값 설정' 경로를 평가할 수 없습니다. 항상 (hd0,gpt2)/boot/grub2/grub.cfg(또는 grub2-install에서 "--boot-directory=/path"로 지정한 항목)에서 grub.cfg를 예상합니다.

따라서 - /subvolumes/{root,home,swap}을 갖는 아이디어가 작동합니다! 하지만 안타깝게도 - /boot가 없으면 더 이상 부팅할 수 없습니다. :-( (엄밀히 말하면 grub 로드는 가능하지만 grub.cfg(메뉴)는 찾을 수 없습니다)

실행 중인 OS(/subvolumes/root -> /)에서 /boot에 바인드 마운트된 하위 볼륨 "/boot"를 생성하여 문제를 해결했습니다. 그런 다음 "grub2-install /dev/sda --boot-directory=/boot"는 필요한 파일을 설치합니다. "grub"이 부팅되면: "ls (hd0,gpt2)/boot/grub/grub.cfg"가 예상 위치에 있고 모든 것이 잘 작동합니다. OS는 또한 이를 /boot(subvol-mount)로 "인식"하고 커널 등을 업데이트할 수 있습니다.

물론 이 설정은 약간의 "죽이기"입니다. 저는 여러 개의 독립적인 루트 설치에 대한 아이디어를 가지고 있으며 "btrfs set-default"를 통해 이들 사이를 전환하기만 하면 됩니다. 불행히도 이것은 grub으로 인해 작동하지 않습니다.

그래서 내 /etc/fstab은 다음과 같습니다:

UUID=blah /   btrfs auto,compress=no,subvol=/subvolumes/fedora_33_root 0 0
UUID=blah /boot     btrfs auto,compress=no,subvol=/boot       0 0
UUID=blah /home     btrfs auto,subvol=/subvolumes/home        0 0
UUID=blah /mnt/swap btrfs auto,subvol=/subvolumes/swap_subvol 0 0
/mnt/swap/swapfile  none          swap   0 0

관련 정보