Btrfs 하위 볼륨 문제

Btrfs 하위 볼륨 문제

Btrfs에 대한 몇 가지 질문:

  1. 하위 볼륨을 생성하기 전에 Btrfs 파일 시스템을 마운트해야 합니까?
  2. 기존 디렉터리를 하위 볼륨으로 쉽게 변환할 수 있습니까? (즉, "/home"을 별도의 하위 볼륨으로 만들고 싶다면 mk_btrfs_subfolder /home새 빈 하위 볼륨을 만들고 모든 항목을 복사할 필요 없이 직접(또는 명령이 무엇이든) 수행할 수 있습니까?

위의 작업을 수행하는 명령은 좋지만 필수는 아닙니다. 예/아니요만 있으면 괜찮고 Google에서 이를 수행하는 방법을 검색할 수 있습니다.

답변1

예, 설치해야 하며 디렉터리를 하위 볼륨으로 변환하려면 다음을 사용하여 스냅샷을 생성할 수 있습니다.

btrfs subvolume snapshot <name of subvolume containing folder> @new_subvol

그런 다음 하위 볼륨으로 이동하여 @new_subvol/home을 제외한 모든 항목을 삭제한 다음 집에 있는 모든 항목을 새 하위 볼륨의 루트로 이동할 수 있습니다.

mv @new_subvol/home/* @new_subvol

그런 다음 원래 디렉터리를 삭제하고 새로 생성된 스냅샷을 해당 위치로 이동할 수 있습니다.

답변2

  1. 예.
  2. 아니요.

적어도 아직은 아닙니다.


답변3

기존 디렉터리를 하위 볼륨으로 쉽게 변환할 수 있습니까? (즉, "/home"을 별도의 하위 볼륨으로 만들고 싶다면 새 빈 하위 볼륨을 만들고 모든 것을 복사할 필요 없이 mk_btrfs_subfolder /home(또는 다른 명령)으로 이동할 수 있습니까?

대규모 하위 볼륨의 경우 가장 덜 나쁜 접근 방식은 하위 볼륨을 스냅샷으로 생성한 다음 정리하는 것입니다. 이렇게 하면 실제로 파일 데이터를 복사하는 것을 방지할 수 있지만 기본적으로 지원되는 경우 불필요한 메타데이터 업데이트가 많이 발생합니다.

Andrew는 그의 답변에서 이것을 언급했지만 완전한 예를 제공하지 않았으므로 여기에 하나가 있습니다. 나는 그와 약간 다른 접근 방식을 취하여 최종 위치에 하위 볼륨을 생성할 수 있도록 이전 디렉토리를 먼저 이동했습니다.

cd /build/
mkdir xxxx
mv *-rpi-staging xxxx
btrfs subvolume snapshot /build /build/wheezy-armhf-rpi-staging
btrfs subvolume snapshot /build /build/jessie-armhf-rpi-staging
btrfs subvolume snapshot /build /build/stretch-armhf-rpi-staging
btrfs subvolume snapshot /build /build/buster-armhf-rpi-staging
cd /build/wheezy-armhf-rpi-staging/
find -maxdepth 1 ! -name xxxx ! -name . -exec rm -rf {} +
(shopt -s dotglob; mv -- xxxx/wheezy-armhf-rpi-staging/* . )
rm -rf xxxx
cd /build/jessie-armhf-rpi-staging/
find -maxdepth 1 ! -name xxxx ! -name . -exec rm -rf {} +
(shopt -s dotglob; mv -- xxxx/jessie-armhf-rpi-staging/* . )
rm -rf xxxx
cd /build/stretch-armhf-rpi-staging/
find -maxdepth 1 ! -name xxxx ! -name . -exec rm -rf {} +
(shopt -s dotglob; mv -- xxxx/stretch-armhf-rpi-staging/* . )
rm -rf xxxx
cd /build/buster-armhf-rpi-staging/
find -maxdepth 1 ! -name xxxx ! -name . -exec rm -rf {} +
(shopt -s dotglob; mv -- xxxx/buster-armhf-rpi-staging/* . )
rm -rf xxxx

이 작업 예제에 대한 참고 사항입니다.

  1. /build는 btrfs 파일 시스템입니다.
  2. wheezy-armhf-rpi-staging jessie-armhf-rpi-stagingstretch-armhf-rpi-staging 및buster-armhf-rpi-staging은 변환할 디렉터리입니다.
  3. 이 예는 제가 실제로 수행한 작업을 정리한 버전입니다. 실수가 있으면 지적해 주시기 바랍니다.
  4. xxxx라는 파일/디렉토리는 변환 중인 디렉터리 바로 아래나 변환 중인 최상위 디렉터리 바로 아래에 존재해서는 안 됩니다.
  5. 중요한 데이터가 포함된 시스템에서 이 작업을 수행하는 경우 문제가 발생하면 복원할 수 있도록 먼저 추가 스냅샷을 생성하는 것이 좋습니다.
  6. 사용된 쉘은 bash라고 가정합니다.

답변4

기존 디렉터리를 하위 볼륨으로 쉽게 변환할 수 있습니까? (즉, "/home"을 별도의 하위 볼륨으로 만들고 싶다면 새 빈 하위 볼륨을 만들고 모든 것을 복사할 필요 없이 mk_btrfs_subfolder /home(또는 다른 명령)으로 이동할 수 있습니까?

나는 이 문제의 특정 버전에 직면했습니다. 내 파일 시스템에는 snapper라는 유틸리티에 의해 특정 일정에 따라 스냅샷이 생성된 여러 개의 최상위 btrfs 하위 볼륨이 있었습니다. 불행하게도 자주 변경되는 디렉토리의 경우 이로 인해 상당히 부풀어오르는 일이 생길 수 있는데, 그중에서 제외하고 싶은 것이 많습니다.

초기 설정에서는 스냅샷에서 특정 경로를 제외하는 것이 간단합니다. 관련 경로에 새 btrfs 하위 볼륨을 생성하기만 하면 됩니다. 불행하게도 일단 실행 중인 시스템이 있으면 상황이 조금 복잡해집니다.

아이디어스크립트 작성은 어렵지 않아서 작은 bash 스크립트로 시작했습니다. 물론, 다양한 유형의 입력, 파일 잠금, 권한 등을 다루기 시작하면서 이 작은 스크립트는 거의 100줄로 빠르게 늘어났습니다.

비슷한 문제가 있는 경우(Snapper 관리 btrfs 파일 시스템을 정리하려는 경우) 다음을 사용하도록 권유합니다(책임은 본인 부담).https://github.com/billwanjohi/snapper-exclude/blob/master/snapper-exclude.sh

관련 정보