기존 전체 디스크 btrfs(파티션되지 않은) 파일 시스템을 bcache로 변환하고 싶습니다.
이렇게 하려면 데이터를 이동하고 드라이브를 다시 포맷해야 했습니다.
단 몇 단계만으로 이 작업을 수행할 수 있는 충분한 하드 드라이브 공간이 있습니다.
나는 btrfs를 사용하고 있기 때문에 이것을 쉽게 만들 것이라고 btrfs send
생각 했습니다.btrfs receive
먼저 변환하려는 파일 시스템의 읽기 전용 스냅샷을 생성하고 이를 다른 파일 시스템의 하위 볼륨으로 보내기 시작했습니다.
나에게 불분명한 점은 슈퍼블록 변환이 발생한 후 해당 중복 하위 볼륨을 원본 디스크로 복원하는 방법입니다.
맨페이지에는 btrfs receive
새 하위 볼륨만 생성할 수 있으며 프로세스가 완료되면 해당 하위 볼륨을 읽기 전용으로 만들 수 있음이 나와 있습니다.
그렇다면 수신된 스냅샷에서 쓰기 가능한 새 루트 하위 볼륨을 교체하는 방법은 무엇입니까?
답변1
그렇다면 수신된 스냅샷에서 쓰기 가능한 새 루트 하위 볼륨을 교체하는 방법은 무엇입니까?
당신은 할 수 없습니다.
귀하의 경우 최상위(루트) 하위 볼륨(ID 5)은 /
Linux 파일 시스템의 볼륨이며 인접한 항목은 없습니다. 아시다시피 btrfs-receive
읽기 전용 하위 볼륨을 생성하므로 읽기 전용 하위 볼륨에서 읽기-쓰기 스냅샷 하위 볼륨을 생성해야 하며, 이를 위해서는 외부에서 하위 볼륨을 생성할 수 있어야 합니다 /
. 대체할 수 없습니다. 최상위 하위 볼륨의 이유입니다.
다음과 같이 말씀하셨습니다.
읽기 전용 스냅샷을 만들었습니다.FS먼저 변환하여 다음으로 보내고 싶습니다.하위 볼륨다른 fs에서.
그러나 당신이 하는 일은 읽기 전용 스냅샷을 만드는 것입니다.하위 볼륨, 전체 BTRFS 파일 시스템이 아닌. 최상위 수준의 스냅샷을 어떻게 생성할 수 있는지 이해가 되지 않습니다. 이상한.
partclone
가장 좋은 방법은 전체 파일 시스템을 백업한 다음 복구하는 것과 같은 도구를 사용하는 것입니다 . 그렇지 않으면 하위 볼륨을 변경해야 합니다.공들여 나열한 것~에서평평한, 이것이 당신이 가지고 있는 것입니다중첩됨. 중첩된 레이아웃을 사용하면 다음과 같은 결과가 나옵니다.
/ (top-level)
|
|__ /rootfs (subvolume)
| |
| _/home
|
|__ /rootfs-backup (read-only subvolume, which you can delete later)
| |
| _/home
중첩 레이아웃을 사용하면 파일 시스템의 모든 하위 볼륨에 대한 스냅샷을 생성할 수 있습니다(어쨌든 수행할 필요가 없는 최상위 수준 제외). 그런 다음 전체 파일 시스템이 아닌 rootfs
하위 볼륨 만 마운트합니다. /
예를 들어:mount -t btrfs /dev/sda1 -o defaults,subvol=/rootfs
답변2
내가 받는 것은 무엇이든 새로운 읽기 전용 하위 볼륨이 될 것입니다. 이것이 Btrfs가 작동하는 방식입니다. Emmanuel이 다른 답변에서 암시했듯이 이를 다르게 수행하는 명확하고 직관적인 방법은 없을 것입니다.
수신된 하위 볼륨을 루트 볼륨으로 작동시키는 단계는 다음과 같습니다.
cd /mnt/drv/receivedvolume
btrfs property set -ts . ro false # make it writeable
btrfs subvolume list . # take note of the ID of the volume, i'll use 123 here
btrfs subvolume set-default 123 /mnt/drv
또한 더욱 안심할 수 있도록 subvolid=123
설치 옵션 /etc/fstab
이나 기타 설치 작업을 추가할 수 있습니다.
이것이 실제로 시스템의 문제라면 / 부트로더를 다시 설치해야 할 수도 있습니다